有时候在git
的操作中相同的功能提交多次。相同git log
看着很难受,特别是有代码洁癖的开发者。本文通过实例来说一说rebase
命令如何修改git
的history
。
通过git rebase --help
可以查看命令的使用方法,官网文档是最权威的教程。
git log
查看历史记录
1 | commit ac041371bd1f34a53b0136f6cdec07a1dd746de4 |
历史记录存在重复的修改记录,相同的记录需要合并,最近的四次如何合并为一个。
修改某一次的log记录
git rebase -i HEAD~4
1 | pick 737b136 修改记录1用于测试git rebase |
p, pick 使用这条 commit
r, reword 使用这条 commit 但是要修改 commit message
e, edit 使用这条 commit 但是要修改 commit messaage // 这里和 reword 使用方法一样, 但 reword 在 :wq 后会直接让你进入修改编辑, edit :wq 后要再使用 git commit –amend 进入修改
s, squash 使用这条 commit, 但是要与上一条 commit 合并, 并保留自身 commit message
f, fixup 与 squash 一样, 但是舍弃 自身 commit message
x, exec 执行命令
来自: http://noyobo.com/2014/04/06/git-rebase-commits.html
修改如下 可以使用缩写命令:
1 | pick 737b136 修改记录1用于测试git rebase |
提示如下:
1 | ➜ do git:(git-rebase-test) git rebase -i HEAD~4 |
使用git commit --amend
。修改历史记录,git rebase --continue
。于是得到
1 | commit a360c19ef0ad51ed407ff9f2f55c009ffa766441 |
合并最后4次的提交记录
git rebase -i HEAD~4
1 | pick 737b136 修改记录1用于测试git rebase |
1 | # This is a combination of 4 commits. |
于是得到如下:
1 | commit f9064cdf6355268e83365e094939144a000c0a68 |
实战过程碰到的问题
误操作使用git rebase --abort
合并log
后无法push
。需要强推-f
log修改为限行提交参考 https://backlogtool.com/git-tutorial/cn/stepup/stepup2_8.html
处理过程中会出现冲突,修改冲突后,git rebase --continue
git rebase -i HEAd~4
出现的log居然是倒序排列的
多人操作同一分支,强行提交提交,pull
下来会出现冲突
参考
相关文章
- http://blog.csdn.net/itfootball/article/details/44154121
- https://backlogtool.com/git-tutorial/cn/stepup/stepup1_1.html
- http://www.ruanyifeng.com/blog/2015/08/git-use-process.html
- http://noyobo.com/2014/04/06/git-rebase-commits.html
命令查看的文档
1 | GIT-REBASE(1) Git Manual GIT-REBASE(1) |