Git回滚我的提交

时间:2012-06-11 23:51:40

标签: git version-control

我承诺并将他们推给Git。 我的同事们做出了改变。 我承诺更多的改变。

我被告知我的更改无法进行测试 此版本必须在下一个版本中发布。我必须退出所有的更改,只有我的更改。我怎么能这样做?

在推动或推动我的变化进入Git时,我会使用乌龟。我正在使用Windows XP机器。

是的,在推动我的提交之前,我拉了我的同事工作。

我不得不提一下,我的更改是针对完全不同的文件。我的同事都没有触及他们。

它只是一个分支,它是集成分支。

2 个答案:

答案 0 :(得分:2)

为什么不使用git revert命令?

答案 1 :(得分:0)

让我们说初始集成的Repo是我,当你的提交是Y,之后你的同事提交是C.所以可能是开发线看起来像这样。目前文件系统为F.

          (F)    
I--Y--C1--C2
           ↑
          HEAD

正如你提到的那样

  

我不得不提一下,我的变化完全不同   文件。我的同事都没有触及他们。

所以你可以继续重置HEAD~1直到你到达我,之前的提交做了任何改变。假设提交后有两个提交。你可以使用它来达到提交我。

git reset HEAD~3

由于您的文件被保留,这可能看起来像

          (F)    
I--Y--C1--C2
↑           
HEAD

现在你可以从系统中删除你的文件并添加你的同事的文件(到索引,它已经存在于FileSystem上),然后进行提交。现在开发线可能看起来没有你的改变。

    (F1) 
 I--C3
    ↑
   HEAD

这不是推荐的方法。建议的方法是使用

 git revert HEAD^

虽然我从来没有使用它,所以不能告诉你。

编辑:另一种方式。
找到提交“Y”的“SHA KEY”并在“I”之前提交。
可以使用

完成
git log

让我们说Y键是:7a2ab465aad23dc66a23ade897deb65a5bf9419d
而对于我的关键是:906488ac2d5a8468d725351df80e3b0f6338c9be
为两个提交制作标签,如

git tag Intercommit -a 906488ac2d5a8468d725351df80e3b0f6338c9be
git tag YourCommit -a  7a2ab465aad23dc66a23ade897deb65a5bf9419d

使用

结帐联运
git checkout Intercommit

然后使用

重新定位回购
git rebase --onto HEAD YourCommit master

现在dev的行看起来像

I--C1--C2
       ↑
      HEAD

您可以在

上找到有关变基和重写一次提交的更多信息

http://www.kernel.org/pub/software/scm/git/docs/v1.7.3/user-manual.html#rewriting-one-commit

http://learn.github.com/p/rebasing.html