# GIT-版本控制工具

# Git图示

# Git饭前小菜

# 查看所有的配置以及它们所在的文件
git config --list --show
1
# 列出所有 Git 当时能找到的配置
git config --list
1
# 查看某一项配置,如user.name
git config user.anme
1
# 设置你的用户名和邮件地址(会写入到你的每一次提交中)
git config --global user.name "biubiu"
git config --global user.email "biubiu@163.com"
1
2
# 获取帮助
git help
git --help
1
2
# 要想获得 git config 命令的手册
git help config
git config -h
1
2

# Git基础命令

# 在已存在目录中初始化仓库

该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干

git init
1
# 指定所需的文件来进行追踪
git add .
git add filename

git commit -m 'initial project version'
1
2
3
4
# 克隆现有的仓库
git clone https://github.com/libgit2/libgit2
1
# 在克隆远程仓库的时候,自定义本地仓库的名字 mylibgit
git clone https://github.com/libgit2/libgit2 mylibgit
1
2
# 检查当前文件状态
git status
1
# 忽略文件

创建一个名为 .gitignore 的文件,列出要忽略的文件的模式。

# 忽略所有的 .a 文件
*.a

# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a

# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO

# 忽略任何目录下名为 build 的文件夹
build/

# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt

# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 查看已暂存和未暂存的修改

当前做的哪些更新尚未暂存? 有哪些更新已暂存并准备好下次提交?

git diff
1
# 暂存命令的作用

可以将git工作区的代码更改暂存,之后就可以执行git pull、git merge之类的命令。

# 暂存
git stash save "暂存的备注"
# 查看暂存列表
git stash list
# 取回暂存代码
git stash pop
# 清空暂存
git stash clear
1
2
3
4
5
6
7
8
# 提交更新

每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。

git commit -m 'message'
# 跳过使用暂存区域
git commit -a -m 'added new benchmarks'
1
2
3
# 移除文件
git rm README.md
1
# 移动文件
git mv file_from file_to
1
# 查看提交历史

不传入任何参数的默认情况下,git log 会按时间先后顺序列出所有的提交,最近的更新排在最上面

git log
1

-p 它会显示每次提交所引入的差异
-2 最近的两次提交

git log -p -2
# 想看到每次提交的简略统计信息
git log --stat  
# oneline 会将每个提交放在一行显示
git log --pretty=oneline 
# 定制记录的显示格式
# %H 提交的完整哈希值
# %h 提交的简写哈希值
# %an 作者名字
# %ae 作者的电子邮件地址
# %ad 作者修订日期(可以用 --date=选项 来定制格式)
# %ar 作者修订日期,按多久以前的方式显示
# %s 提交说明
git log --pretty=format:"%h ##### %an, %ar : %s"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 撤消操作

有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交:最终你只会有一个提交,第二次提交将代替第一次提交的结果。

git commit --amend -m 'cancel'
1
# 撤消对文件的修改

如果你并不想保留对 README.md 文件的修改怎么办?git status 也告诉了你应该如何做

git checkout -##### README.md
1
# 查看远程仓库
git remote -v
1
# 添加远程仓库
git remote add shortname https://github.com/paulboone/ticgit
1

你可以在命令行中使用字符串 shortname 来代替整个 URL, 例如,如果你想拉取仓库中有但你没有的信息,可以运行 git fetch shortname

# 从远程仓库中抓取与拉取

git fetch 命令只会将数据下载到你的本地仓库,它并不会自动合并或修改你当前的工作,你必须手动将其合并入你的工作 git pull 那么可以用 git pull 命令来自动抓取后合并该远程分支到当前分支

git fetch
git pull 
1
2
# 推送到远程仓库
# git push 的一般形式为 git push <远程主机名> <本地分支名> <远程分支名>
# 例如:git push origin master:refs/for/master 
# 即是将本地的master分支推送到远程主机origin上的对应master分支,origin是远程主机名,第一个master是本地分支名,第二个master是远程分支名

git push origin master
#如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建

git push origin :refs/for/master
#如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master

git push origin
#如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支

git push
#如果当前分支只有一个远程分支,那么主机名都可以省略

git push origin --force
#强制提交
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 查看某个远程仓库
git remote show origin
1
# 远程仓库的重命名与移除

你可以运行 git remote rename 来修改一个远程仓库的简写名

git remote rename shortName origin
1

想要移除一个远程仓库,或者某一个贡献者不再贡献了

git remote remove shortName
git remote rm shortName
1
2
# 列出标签
git tag
git tag -l
git tag --list 
1
2
3

你也可以按照特定的模式查找标签。 例如,Git 自身的源代码仓库包含标签的数量超过 500 个。 如果只对 v1.0.0-RC18x 系列感兴趣,可以运行:

git tag -l "v1.0.0-RC18*"
1
# 创建标签
# 轻量标签
git tag v1.0.0-RC01
1
2

加上-a参数来创建一个带备注的tag,备注信息由-m指定。如果你未传入-m则创建过程系统会自动为你打开编辑器让你填写备注信息。

# 附注标签
git tag -a v1.0.0-RC01 -m "my tag comment"  
1
2
# 查看标签提交信息
git show v1.0.0-RC188
1
# 后期打标签 ,对过去的提交打标签
# 查找提交记录 9fceb02其中有个提交这样得序列号
git log -10 --pretty=oneline
# 要在那个提交上打标签,你需要在命令的末尾指定提交的校验和(9fceb02)
git tag -a v1.0.0-RC59 9fceb02
1
2
3
4
# 上传标签

默认情况下,git push 命令并不会传送标签到远程仓库服务器上
必须显式地推送标签到共享服务器上

git push origin v1.0.0-RC188
1

想要一次性推送很多标签,可以使用带有 --tags 选项,将会把所有不在远程仓库服务器上的标签全部传送到那里。

git push origin --tags
1
# 删除标签
git tag -d v1.0.0-RC188
1

远程仓库中移除这个标签

git push origin :refs/tags/v1.4-lw
git push origin --delete v1.0.0-RC188
1
2
# 创建分支
git branch dev
1
# 分支切换

这样 HEAD 就指向 dev 分支了

git checkout dev
1
# 创建分支并且切换到新分支
git checkout -b local
1
# 分支的合并,把jira-SH-11035分支合并到master分支
git checkout master
git merge jira-SH-11035
1
2
# 删除分支,使用 -D 选项强制删除它
git branch -d jira-SH-11035
git branch -D jira-SH-11035
1
2
# 删除远程分支
git push origin --delete dev
1
# 查询分支
git branch
git branch -a
1
2
# 查看已经合并未合并分支

# 查看哪些分支已经合并到当前分支
git branch --merged
# 查看所有包含未合并工作的分支
git branch --no-merged
1
2
3
4
5

# GitHub配置SSH

生成密钥 ssh-keygen -t rsa -b 4096 -C baijqmail@163.com 验证结果 ssh -T git@github.com