小白问题: git 咋还原提交和提交者?

日期 : 2021-04-10 17:23:05作者 : 望京博格

场景是这样的

1. 原始文件 A
2. 对 A 修改了第 2-10 行,90-100 行,并提交。
3. 中间又有若干个提交,单独或一起修改 2-10 和 90-100 行。

现在我想保留 2-10 行的修改,让 90-100 行回到原始状态,而且让这几行的最后提交仍然原作者。

这要怎么做到?我们是代码谁修改谁负责,所以不想留下自己的名字。。。

这不就是 rebase 的典型使用场景嘛
首先确认你的修改还没有 push 到远程分支(如果已经 push 了但是确认这个远程仓库只有你一个人在使用的话也可以,只不过最后需要进行一次 push -f 操作)
1. 确认 git status 处于 clean 状态
2. 找到修改第 2-10 行和 90-100 行的那次提交,记下 commit hash
3. 执行 git rebase -i "commit hash"^,commit hash 为上一步中记录的值,注意不要漏了最后的^
4. 在出现的界面中把那次提交前面的 pick 修改为 edit,其他的提交保持 pick
5. 保存退出
6. 修改文件,把对 90-100 的修改还原
7. 使用 git commit --amend 提交,此时有需要的话可以顺便修改提交说明
8. 执行 git rebase --continue,如果后面的提交中没有再修改过 90-100 行,那么就到此结束,否则就会停下来提示你产生冲突,此时再次修改文件解决冲突(把对 90-100 行的修改还原),然后执行 git add,git rebase --continue,重复这个过程直到没有冲突为止

到这一步后就达到了你想要的效果了,既保持了完整的提交历史,同时 90-100 行就好像从来没有动过一样

标签 :