我提交我的并将它们推送到 Git。我的同事提交了他们的更改。我提交了更多我的更改。
有人告诉我,我的更改无法针对此版本进行测试,必须在下一个版本中进行。我必须撤消所有更改,并且仅撤消我的更改。我怎样才能做到这一点?
在将更改推送或拉入 Git 时,我使用 tortoise。我正在使用 Windows XP 机器。
是的,在推动我的提交之前,我让我的同事工作。
我不得不提一下,我的更改是针对完全不同的文件的。我的同事都没有碰它们。
它只是一个分支,即集成分支。
我提交我的并将它们推送到 Git。我的同事提交了他们的更改。我提交了更多我的更改。
有人告诉我,我的更改无法针对此版本进行测试,必须在下一个版本中进行。我必须撤消所有更改,并且仅撤消我的更改。我怎样才能做到这一点?
在将更改推送或拉入 Git 时,我使用 tortoise。我正在使用 Windows XP 机器。
是的,在推动我的提交之前,我让我的同事工作。
我不得不提一下,我的更改是针对完全不同的文件的。我的同事都没有碰它们。
它只是一个分支,即集成分支。
为什么干脆不使用git revert
命令?
假设最初的集成 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
和