撤销特定的提交并避免合并操作:git revert

5
我想要在git仓库中删除特定的提交,以便能够撤销应用于我的软件的“修复”。
这里是一个EMC:
#!/bin/bash
rm -rf TEST .git
mkdir TEST
git init
echo "info 1" > TEST/file.txt
git add TEST/
git commit -m "Initial Commit"
echo "info 2" >> TEST/file.txt
git add TEST/
git commit -m "Commit Fix 1 on file"
echo "info 3" >> TEST/file.txt
git add TEST/
git commit -m "Commit Fix 2 sur file"

文件 file.txt 的结果将是:
info 1
info 2
info 3

我想要获取没有“info 2”这行的文件。git revert会产生冲突,我想避免处理这些冲突。也就是说,就像提交“Commit Fix 1 on file”从未发生过一样。
我尝试过revert或rebase,但都没有成功,请问您有别的想法吗?
谢谢,

说句实话,kdiff3 能够在没有任何手动干预的情况下自动处理“冲突”。我不确定为什么 git 不能自动解决它。 - PherricOxide
2个回答

1
要撤销特定的提交,您需要使用git log来识别提交的哈希值,然后使用git revert <commit>创建一个新的提交以删除这些更改。

OP提到他不想处理合并冲突。我不确定为什么会有冲突,但最终确实会提示:“错误:无法还原ed0ff67...文件上的提交修复1 提示:解决冲突后,请标记已更正的路径 提示:使用'git add <paths>'或'git rm <paths>'将其提交结果 ”。 - PherricOxide
没错,我试过了,但是最后两次提交都作用在同一个文件上。所以 git revert 会导致冲突,需要手动处理。我需要避免这种操作。但如果这些提交修改了两个不同的文件,你说得对... - Brownie
@Brownie:不是他们在同一个文件中引入更改,而是在你使用的微小示例文件中,这些行是相邻的。在实际示例中,出现这样的冲突的可能性要小得多。 - Mark Longair

0
$ git reset HEAD^^
$ change your file to delete the info 2
$ git add .
$ git commit -m "Commit Fix 2 sur file"

谢谢您的回答,但我不想手动修改文件。这样做的目的是为了管理软件上的修复,并能够轻松地添加和删除修复。 - Brownie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接