用git恢复提交的部分?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我想在git中恢复特定的提交。不幸的是,我们的组织仍然使用CVS作为标准,所以当我提交回CVS时,会将多个git提交合并为一个。在这种情况下,我想单独挑出最初的git提交,但这是不可能的。

有没有类似于git add --patch这将允许我有选择地编辑差异,以决定提交的哪一部分要恢复?

提问于
用户回答回答于

使用--no-commit(-n)的选择git revert,然后打开更改,然后使用git add --patch:

$ git revert -n $bad_commit    # Revert the commit, but don't commit the changes
$ git reset HEAD .             # Unstage the changes
$ git add --patch .            # Add whatever changes you want
$ git commit                   # Commit those changes

注意:使用gitadd-补丁添加的文件是要还原的文件,而不是要保存的文件。

用户回答回答于

我已经成功地使用了以下内容。

首先,恢复完整提交(将其放在索引中),但不要提交。

git revert -n <sha1>  # -n is short for --no-commit

然后交互地从索引中删除已恢复的良好更改。

git reset -p          # -p is short for --patch  

然后提交坏更改的反向差异。

git commit -m "Partially revert <sha1>..."

最后,恢复的好的更改(已经被重置命令没有进行)仍然在工作树中。他们需要清理。如果工作树中没有其他未提交的更改,则可以通过

git reset --hard

扫码关注云+社区