Git 改变历史
悔棋
修改最近一次提交信息
git commit --amend
除了想要修改最近一次提交信息外,另一个用处是生成Change-ID。在克隆了代码和钩子文件后,如果代码提交中没有Change-ID,而后续需要提交到gerrit无法自动生成Change-ID报错时,使用此命令。
修改最近一次提交中的文件
git checkout HEAD^ -- helloworld.c
检出
修改
git commit --amend -m "commit with --amend helloworld.c"
提交
多步悔棋
git reset --soft HEAD^^
想把几个提交合一就会退几步
git commit -m "modify helloworld.c"
提交
穿越
- 删除某次提交,后续不变
- 合并历史中的几次提交,后续不变
拣选操作
拣选操作 cherry-pick
删除某提交
git checkout 要删除提交前的哈希值
git cherry-pick 一个一个后续提交
git checkout master
切回master
git reset --hard HEAD@{1}
HEAD@{1}就是之前cherry-pick后的HEAD
cherry-pick的哈希值 之后修改的内容相同但是提交的哈希值不同
合并某两次提交
git checkout 要合并提交的哈希值
git reset --soft HEAD^^
回到两次提交前
git commit
提交信息
git cherry-pick 一个一个后续提交
git checkout master
切回master
git reset --hard HEAD@{1}
HEAD@{1}就是之前cherry-pick后的HEAD
变基操作 rebase
比如将ABCDEF变成ABCEF
git rebase --onto <newbase> <since> <till>
<newbase> 是C的哈希值
<since> 是E^的哈希值(从这里开始但是不包括这个
<till> 是F的哈希值(到这里结束包括这个
git checkout master
git reset --hard HEAD@{1}
比如将ABCDEF变成AB(CD)EF
git checkout D的哈希值
git reset --soft HEAD^^
退到B了
git commit
提交信息 记住提交的哈希值xxx
git rebase --onto xxx E^ master