0

我提交了一个错误(程序未编译),并且在提交之后:git push (I).
我的同事完成了:git pull (She) 并获得了存储库的未编译状态。之后添加了一些提交(关于项目文档 - 因为编译并不重要)并再次完成:git push (She)
之后我们得到了以下存储库状态:

  1. 她的一些承诺
  2. 她的一些承诺
  3. 我的错误提交
  4. 我的另一个提交
    我想完全删除提交 3。为此我做了
    git-rebase --onto <sha of commit 4> <sha commit 3> master
    git push --force

现在我们有了正确的存储库状态(没有提交 3),但还有其他所有更改。但是,如果她这样做

git pull
git push

她将与她的本地提交 #3 合并,然后将其拉到存储库。在 git pull 之后,我怎样才能让某人(不仅是她)更正存储库的状态 - 进行所有更改,但没有提交 #3?

注意: 可能她最后添加了(在另一种情况下 - 功能)本地提交。而且她的本地存储库比服务器的存储库更新。

4

1 回答 1

0

你已经发现了改变公共历史的问题:每个看到改变的人都必须同意以同样的方式改变它。在这种简单的情况下,他们也可以通过执行与rebase您相同的命令来获得新的正确版本:

git-rebase --onto <sha of commit 4> <sha commit 3> master

这将更新他们的本地 master 以再次同意远程 master 分支,并且他们可以正常继续。

没有办法自动导致这种情况发生。对于那些只是在跟踪,或者在你做这个 rebase 时推送了他们所做的所有更改的人来说,最简单的方法master可能是执行git reset --hard origin/master,但这将删除在你做 rebase 时不在当前分支上所做的任何本地提交master

实现相同目的的另一种方法是使用git revert. 这将简单地添加一个与不同提交相反的新提交。这不会编辑历史记录,它只是以撤消它的方式添加它。这会导致问题提交仍然出现在git log相关命令中,但不会对其他人造成问题。

于 2011-09-27T12:01:00.093 回答