现场版本控制
- 现场版本库创建。
直接在需要版本控制的目录下执行Git版本库初始化命令。
1 | git init |
- 添加文件并提交
1 | git add -A |
- 为初始提交建立一个里程碑:”v1”
1 | git tag v1 |
- 然后开始在工作区中工作–修改文件,提交
1 | git commit -a |
- 当对修改结果满意,想将工作成功保存带走时,可以通过下面的命令,将从v1开始的历次提交
逐一导出为补丁文件。转换的补丁文件都包含一个数字前缀,并提取提交日志信息作为文件名,而且补丁文件
还提供对二进制文件的支持。
1 | git format-patch v1..HEAD |
- 通过邮件将补丁文件发出。当然也可以通过其他方式将补丁文件带走。
1 | git send-email *.patch |
Git创建的补丁文件使用了Git扩展格式,因此在导入时为了避免数据遗漏,要使用Git提供的命令而不能
使用GNU patch命令。即时要导入的不是Git版本库,也可以使用Git命令。
修改提交说明
1 | git commit --amend |
这个命令如果不带”-m”参数,会进入提交提交说明编辑界面,修改原来的提交说明,直到满意为止。
如果要修改某个历史提交的提交说明,Git也可以实现,但要用到另一个命令:变基命令。
例如要修改
修改相应提交前面的动作的关键字。
1 | git rebase -i <commit-id>^ |
删除不应提交的文件
1 | git rm --cached 文件名 |
如果是历史版本,例如是在
1 | git rebase -i <commit-id>^ |
更好用的提交列表
git add
命令将修改内容加入提交暂存区。git add -u
命令可以将所有修改过的文件加入暂存区。git add -A
命令可以将本地删除文件和新增文件都登记到暂存区。git add -p
命令甚至可以对一个文件内的修改进行有选择性的添加。
一个修改后的文件被登记到提交暂存区后,可以继续修改,继续修改的内容不会被提交,除非再对此文件
再执行一次 git add
命令。即一个修改文件可以拥有两个版本,在提交暂存区中有一个版本,在工作区
中有另外一个版本。
执行 git commit
命令提交,无须设定什么变更列表,直接将登记在暂存区中的内容提交。
Git支持对提交的撤销,而且可以撤销任意多次。
工作进度保存
如果工作区的修改尚未完成时,忽然有一个紧急的任务,需要从一个干净的工作区开始新的工作,
或者要切换到别的分支进行工作,那么如果保存当前尚未完成的工作进度呢?
1 | git stash |
在切换到新的工作分支之前,执行 git stash 保存工作进度,工作区会变的非常干净,然后就可以切换到新的分支。
1 | git stash |
新的工作分支修改完毕后,再切换回当前分支,调用 git stash pop 命令则可恢复之前保存的工作进度。
1 | git checkout <orignal_branch> |
更好的差异比较
Git对差异比较进行了扩展,支持对二进制文件的差异比较,这是对GNU的 diff
和 patch
命令的重要补充。
还有Git的差异比较除了支持基于行的差异比较外,还支持在一行内逐字比较的方式,当向 git diff
命令
传递 --word-diff
参数时,就会进行逐字比较。
在上面介绍了工作区的文件修改可能会有两个不同的版本,一个是在提交暂存区,一个是在工作区。因此在
执行 git diff
命令时会遇到令Git新手费解的现象。
- 修改后的文件在执行
git diff
命令时会看到修改造成的差异。 - 修改后的文件通过
git add
命令提交到暂存区,再执行git diff
命令会看不到该文件的差异。 - 执行
git diff --cached
命令才可以看到添加到暂存区中的文件所做出的修改。
无处不在的分页器
分页器默认使用 less
命令(less -FRSX
)进行分页。
下面是在分页器中常用的热键:
- 字母q:退出分页器;
- 字母h:显示分页器帮助;
- 按空格下翻一页,按字母b上翻一页;
- 字母d和u:分别代表向下翻动半页和向上翻动半页;
- 字母j和k:分别代表向上翻一行和向下翻一行;
- 如果行太长被截断,可以用左箭头和右箭头使得窗口内容左右滚动;
- 输入/pattern:向下寻找和pattern匹配的内容;
- 输入?pattern:向上寻找和pattern匹配的内容;
- 字母n或N:代表向前或向后继续寻找;
- 字母g:跳到第一行;
- 字母G:跳到最后一行;
- 输入数字再加字母g:则跳转到对应的行;
- 输入!
:可以执行Shell命令。
对于默认未提供分页器的Git命令,例如 git status
命令,可通过下面任一方法启用分页器:
- 在
git
和子命令(如:status
)之间插入参数-p
或--paginate
,为命令启用内建分页器。如:
1 | git -p status |
-设置Git变量,设置完毕后运行相应的命令,将启用内建分页器。
1 | git config --global pager.status true |
Git 命令的分页器支持带颜色的字符输出,对于太长的行则采用截断方式处理(可用左右方向键滚动)。
如果不习惯分页器的长行截断模式而希望采用自动折行模式,可通过下面任一方法进行设置:
- 通过设置LESS环境变量来实现。
1 | export LESS=FRX |
-或者通过定义Git配置变量来改变分页器的默认行为。
1 | git config --global core.pager 'less -+$LESS -FRX' |