【问题标题】:git - How to undo changes to a locally committed filegit - 如何撤消对本地提交文件的更改
【发布时间】:2019-02-22 20:10:56
【问题描述】:

我一直在关注我的本地BranchA

  1. 修改FileA(错误)
  2. git add FileA
  3. git commit -m "Modified FileA"

所以,FileA 在我的本地分支BranchA 上的本地提交(从未推送到远程)中(也从未推送到远程)。

如何恢复对 FileA 的更改?

更新以及我是如何解决的

我从 SourceTree 而不是从 git 撤消了对 FileA 的更改,因为我意识到这对我来说更简单。

为此,在 SourceTree 中,对提交的文件 FileA 进行 r-c >“Log Select ...”> 选择上一个提交(您之前的那个)> 对其进行 r-c 并选择“重置到此提交”。完成了这项工作,但谢谢大家

【问题讨论】:

标签: git git-commit revert


【解决方案1】:

要专门撤消该文件中的更改,但保持提交不变:

1) 将文件 A 恢复到之前的状态

git checkout HEAD^ -- path/to/fileA

2) 将它包含在您对 BranchA 所做的最后一次提交中

git commit --amend

(而且因为还没推,下次不用再强推了。)

【讨论】:

  • 因为git checkout HEAD^ -- path/to/fileA 先将文件写入索引,然后再写入工作树,所以这里实际上不需要git add 步骤。但这是要使用的最短(也可能是最好的)Git 命令集;赞成...
  • 谢谢,我接受你的回答,但我没有机会尝试,因为我是从 SourceTree 做的。在 SourceTree 中,在提交的文件上 r-c > Log Select ... > 选择上一个提交(你之前的那个)> r-c 并选择“重置到此提交”。完成了这项工作,但谢谢大家
【解决方案2】:

首先将分支重置为上一次提交:

git reset @^ --mixed

然后您可以使用checkout 将特定文件重置为旧状态:

git checkout -- files...

完成后,您可以重新提交更改:

git add files...
git commit -m "message"

【讨论】:

    【解决方案3】:

    您可以使用git reset HEAD~1 将当前分支索引重置为上一次提交。添加--hard 以重置您的工作目录,或者如果您想优化更改并重新提交,请不要​​使用它。

    如果您此后进行了其他更改,请使用 git rebase 将您的违规提交首先移至堆栈顶部。

    【讨论】:

    • 但我只想撤消一个文件,而不是整个提交。我在那个提交中有 FileA、FileB、FileC,我只希望 FileA 恢复到我更改之前的版本
    • 所以去掉--hard,这样你就可以细化(git checkout -- FileA)并重新提交。
    【解决方案4】:

    另一种方法(我假设您的提交仅在文件中有更改,您想丢弃):

    在你的 BranchA 中

    git rebase -i HEAD~2
    

    它将给出两个提交的列表,按历史升序排序。最后一个是你想要改变的。所以,你想放弃那个提交。将光标移动到第二次提交,而不是 pick 键入 drop,或者只是 d

    保存您的更改(取决于您的编辑器,可能是CTRL+X + SHIFT+Y 用于nano:wq 用于vim,仅此而已。

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 2018-05-01
      • 1970-01-01
      • 2020-05-17
      • 2010-10-29
      • 1970-01-01
      相关资源
      最近更新 更多