1

我提交我的并将它们推送到 Git。我的同事提交了他们的更改。我提交了更多我的更改。

有人告诉我,我的更改无法针对此版本进行测试,必须在下一个版本中进行。我必须撤消所有更改,并且仅撤消我的更改。我怎样才能做到这一点?

在将更改推送或拉入 Git 时,我使用 tortoise。我正在使用 Windows XP 机器。

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

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

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

4

2 回答 2

2

为什么干脆不使用git revert命令?

于 2012-06-12T07:18:43.023 回答
0

假设最初的集成 Repo 是 I,当你的提交是 Y,后来你的同事提交是 C。所以开发线可能是这样的。目前文件系统为F。

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

正如你提到的

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

因此,您可以继续执行 reset HEAD~1 直到到达 I,即进行任何更改之前的提交。假设您提交后有两次提交。您可以使用它来达到提交 I。

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
而 I 键是:906488ac2d5a8468d725351df80e3b0f6338c9be
为两个提交制作标签,例如

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

结帐间使用

git checkout Intercommit

然后使用 rebase repo

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

于 2012-06-12T00:43:55.320 回答