事后如何修复GitHub上的pull-merge-push

时间:2013-11-07 16:34:00

标签: git git-merge

我不记得确切的消息或它为什么会发生,但是当我试图推动我对远程仓库的更改时,我收到了一条消息,上面写着tip/head pointers were not in sync之类的消息,我需要先拉出来然后推。我做到了,现在这就是我所拥有的:

观察当前状态:

* commit 7f82d39
|     comment 3
|
*   commit f4d754b
|\  Merge: aadc751 328b900
| | 
| |     Merge branch 'master' of https://github.com/myrepo
| |
| * commit 328b900
| | 
| |     comment 2
| |
* | commit aadc751
|/  
|       comment 1
|
* commit aa65fee

请注意,我是所有这些提交的作者,并未涉及其他作者。我想以这样的方式来修改它,以便销毁GitHub有的任何错误/无意的更改,并且只保留在我的本地机器上的repo上进行的提交。有效地将分支合并为一个。然后将本地回购推送回GitHub覆盖任何GitHub。

换句话说,我希望有一个分支行,没有分割和合并,我可以丢弃或合并任何GitHub发起的提交,只使用我的本地仓库作为“真”分支,没有丢失任何东西。

如何?

我对rebase有点了解,但是想确保我不要搞砸了。

奖金:下次回购提示不符合我该怎么办?

1 个答案:

答案 0 :(得分:0)

步骤如下: 1.给你的“一个真正的分支”一个名字并检查出来 2.修复你的历史 3.应用合并后的最后一次提交

转换为:

git checkout -b onetrue aadc751
git rebase 328b900
git cherry-pick 7f82d39

你已经完成了。您现在有一个名为“onetrue”的分支,它具有您想要的历史记录。如果你喜欢它,请保留它。如果您可能已经使用了另一个不再需要的分支,例如“master”,则可以将其删除:

git branch -D master

如果您希望现在将新分支称为master,请将其重命名为:

git branch -m onetrue master

回答奖金,为了避免将来这种情况,请在拉动时包含“rebase”标志:

git pull --rebase