Git分支发散了

时间:2013-04-05 09:45:37

标签: git git-branch git-merge

我是GIT的新手,虽然我理解它的概念我不认为我也理解它的实践。

我得到了一个分支uitest来处理,因为我可能没有完成推送,提交,正确拉动,我现在已经分支了分支。

因为我是新来的,所以我也不想覆盖其他开发代码,因为我的代码或更改只是实验性的习惯于git及其工作方式我不介意丢弃我的更改,因为我有一个复制我需要重新做的所有事情。

$ git status
# On branch uitest
# Your branch and 'origin/uitest' have diverged,
# and have 47 and 6 different commits each, respectively.
#
nothing to commit (working directory clean)

我怎么会无所事事?放弃我的更改并从最新的更改中提取最新的更改,然后继续工作而不会弄乱其他人的工作。

此外,由于我是新手,请对您的答案进行一些描述,因为这对我来说可能没有多大意义。

非常感谢

1 个答案:

答案 0 :(得分:5)

有几种方法。

合并

首先,您可以简单地合并origin/uitest,但这并不会留下干净的历史,因为它引入了看起来像分支和合并的内容,即使它本来就是同一个分支。我相信Linus喜欢称这类合并提交“毫无意义”。不幸的是,这也是最简单的方法。

衍合

重新定位往往是一个更高级的主题,如果你不小心,可能会引入许多其他问题。也就是说,如果没有毫无意义的提交,它也是获得干净历史的好方法。在这种情况下,你可以这样做:

git rebase origin/uitest

来自你的uitest分支,它将完成你所做的所有工作,并把它放在origin / uitest的工作之上。

但有几次捕获。首先,如果您已将任何其他分支合并到您的分支中,git rebase将删除它们。您需要传递-p标志以保留您引入的任何合并提交,但这并不总是正确的做法。如果您所做的只是提交自己的更改,那么您应该对我给出的命令感到满意。

其次,无论何时使用rebase,你都应该记住永远不要重新提交公共提交。 Rebase将更改提交ID,因为父级已更改。如果人们正在合并你的工作,并且你重新设计它们,那么他们最终会在历史记录中提交几份你的提交 - 这很糟糕。所以当你应用这种技术时要小心。

所有这一切,你想让git rebase成为你的朋友。它是一个强大而有用的工具,但与任何电动工具一样,它可能很危险。

放弃您的工作

如果您只想放弃已完成的操作,可以运行:

git reset --hard @{u}

git reset --hard origin/uitest

这将重置您的uitest分支以匹配上游或origin/uitest。它会丢弃你的提交。

就个人而言,我会改变工作或者至少尝试一下。如果它失败,或者因合并冲突而变得复杂,您可以随时使用git rebase --abort中止,然后回退以合并或放弃您的更改(尽管合并可能会显示相同的合并冲突)。