如何返回到之前的提交并在之前的提交中进行更改?

How to go back to a previous commit and make change in this previous commit?

我正在与 git 合作。几天以来,我从一位大师那里得到了一个分支。

$ git log
commit 412455451515dd5d5dldldld454585fgdgjd      // #7
Author: me
Date:   Fri Mar 03 14:27:55 2015 +0100

    feature7A

commit 95299628812ae425c06accc61a0ef4203cc  // #6
Author: me
Date:   Wed Mar 03 11:20:35 2015 +0100

     feature6A

commit 82f1691fcfd6348ddf5462be42bf9983b2f  // #5
Merge: 052c908 6c2c93d
Author: me
Date:   Tue Mar 02 16:36:01 2015 +0100

   feature5A

commit 6c2c93da125a66f7dbb5b14a96feed819f70671d     // #4
Author: me
Date:   Tue Mar 01 14:30:48 2015 +0100

   feature4A

我回到提交 82f1691fcfd6348ddf5462be42bf9983b2f // #5

git checkout 82f1691fcfd6348ddf5462be42bf9983b2f 

我更正了此提交中的错误。 我想在提交 412455451515dd5d5dldldld454585fgdgjd // #7 中恢复此更改。 想要的就是最好的做法:

  1. 保存零钱 切换到提交#7 使用 git stash pop

  2. 应用更改
  3. 合并提交 #5 和 #7。

谢谢

您将要更改历史记录。仅当您尚未共享您的修改时才执行此操作。 当心!

如果你已经分享了这个,那么不要惊慌,但也不要做下面的事情。请参考负责 repo 的人并获得适当的帮助,这与您项目中的工作流程一致。

// in the following i'm assuming that you were working on master.
git checkout 82f1691f -b recovery
// This checks out the commit you want to modify and creates a branch there that we will delete afterwards.
//Hack hack hack.

git add my_Modified_File.h  //You can replace this 2 lines by using git gui
git commit --amend          //and selecting the menu commit->fix the last commit

git checkout master
git rebase recovery

最干净、最好、最诚实,就是把变化应用在当下。提交 #5 有一个错误,就这样吧。每个开发者都会写出bug,让历史来证明它不是问题。重写历史来隐藏它是没有意义的。

最佳做法是:

$ git stash
$ git checkout #7
$ git stash apply

检查您的修复是否仍然有效

$ git commit -a

可能在您的提交消息中提及这修复了提交 #5 中引入的错误。