简单地从提交中恢复更改

Simply reverting changes from a commit

假设我有一个文件随着时间的推移被添加到 Git 中。如何简单地恢复较早的提交之一但保留以下所有提交?

例如,添加并提交空白file.txt。每个后续提交都会增加一个数字。我希望简单地撤消添加的第一个数字 (1) 但保留其他数字 (2 & 3)。看来我应该使用 revert 但我有点迷路了。

➜ ls
file.txt

➜ cat file.txt
1
2
3

➜ git log --oneline
afc6136 Add 3
d0cbec0 Add 2
1d6a4ff Add 1
b6c3a92 Init file.txt

➜ git revert 1d6a4ff
error: could not revert 1d6a4ff... Add 1
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

➜ cat file.txt
<<<<<<< HEAD
1
2
3
=======
>>>>>>> parent of 1d6a4ff... Add 1

好消息:您走对了!

但是,由于您的所有更改彼此非常接近,因此您会发生冲突。本质上,git 是在说 "too much has changed around here since the commit we're reverting, and I don't feel comfortable guessing -- please tidy things up and tell me when you're done"。

每个冲突的区块都被标记为:

<<<<<<< some commit
(chunk's content in some commit)
=======
(chunk's content in some other commit)
>>>>>>> some other commit

您应该将块编辑成您想要的样子,删除分隔符(“<<<”、“===”和“>>>”行),然后 git add文件和 git commit 它(正如消息 git 给你的建议)。

在您的情况下,整个文件都在块内——情况并非总是如此。在您的初始提交中尝试使用更大的基础文件(如 "more lines"),您就会明白我的意思。