我认为每个学过Git的人都应该做过类似这种笔记,因为Git命令太多看着看着就把前边看过的忘了,之前我也看过Git,但是一直没用,现在一看几乎没有印象了,所以这次我要把我看到的命令记下来给我自己备忘。
Git已经是最流行的版本控制系统了,网上相关的免费学习资源很多,我见过的中文书籍就有:
但我是买的一本纸质书叫做《版本控制之道--使用Git》,下边是我记录的几乎是整本书讲过的所有命令,后期又添加了点其他内容,方便以后查阅。
设置
其实最后这些设置都保存在
查看帮助:
初始化
纳入版本控制
add命令是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等,注意每次修改后都要重新add,不然就会提交之前add时的版本。
下边这两个模式,不常见
提交
参数的意思
-m "提交的说明"
-a 动把所有已经跟踪过的文件暂存,并提交.(工作目录中修改过的文件都提交到版本库,不需一个一个手动add了)
--amend 增补提交
-C 复用指定提交的提交留言
-c 打开编辑器在已有的提交基础上编辑修改
e.g 修改最后一次提交:
如果没有修改就相当于更改提交说明,上边3个命令得到一个提交.
忽略提交的文件
所有人都需要忽略的文件要写在.gitignore
文件里,而只有自己的个人偏好需要忽略的文件要写在.git/info/exclude
文件中
语法
查看文件改动:
请注意,单单 git diff 不过是显示还没有暂存起来的改动,而不是这次工作和上次提交之间的差异。
所以有时候你一下子暂存了所有更新过的文件后,运行 git diff 后却什么也没有,就是这个原因。
重命名,移动,删除文件:
其实,运行 git mv 就相当于运行了下面三条命令:
必须调用 git rm 文件名
,从暂存区移除,并且文件也被删除
如果只是手工删除了文件,运行git status时会出现
此时必须再运行 git rm 文件名
,才会在提交时候不再纳入版本管理。
如果删除之前修改过并且已经add到缓存区了的话,则必须强制删除 -f
另外一种情况是,我们想把文件从Git仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除。比如一些大型日志文件或者一堆.a编译文件,不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore 文件中补上,用 --cached 选项即可。
查看状态:
查看当前状态 git status
查看提交历史 git log
这时“j”向下浏览,“k”向上浏览,“q”退出
在windows下还可以gitk
打开图形界面查看
问责:查明谁修改了代码
撤销:
撤销缓存区的修改(没有commit的)
复位:还没有commit,让工作目录回到上次提交时的状态
反转提交:
分支:
在当前分支末梢建立分支:
切换分支:
创建并切换分支:
删除分支:
基于某次提交、分支或标签创建新分支:
查看分支:
分支重命名:
合并分支:
直接合并:
压合合并
将分支压合成一条commit记录,并合并过来
拣选合并
只合并一个提交
如果需要连续拣选,就需要加-n
参数
然后再git commit ,但不要加-m
参数,编辑器就会使用刚拣选的提交留言作为现在的留言。
标签Tag
查看标签
创建标签:
检出标签:
变基:
- git rebase RB_1.01 # 也许修改过一个bug,希望新版本变基到RB_1.01分支上
- 手动解决冲突 # 如果解决不了直接git rebase --skip或--abort来跳过特定提交或完全放弃变基
- git add xxx.html # 冲突解决
- git rebase --continue
--onto参数可以改写历史抹掉中间的参数,将倒数第一个参数变基到倒数第3个参数,为防止出错建议在试验性分支上先试验。
rebase -i 可以排序历史记录,多个提交合并为1个,一个提交分解成多个提交 ,
详见版本控制之道p86 ,需要编辑器支持,windows记事本不行
远程相关
添加远程仓库
查看远程分支:
远程仓库重命名和删除:
远程仓库重命名
获取数据:
现在pb/master可以在本地访问了,你可以合并到自己的某个分支,或者切换到这个分支看看有什么有趣的更新
git pull 抓取数据合并到工作目录中当前分支
如果提示tracking information什么不对,可以这样指定本地examples分支跟随远端examples分支
git branch --set-upstream-to=origin/examples examples
推送数据:
其他:
归档版本库,导出压缩包: