Git分支分叉



我是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)

我如何"不发散"?放弃我的更改,并从最新的更改中提取最新的更改,然后继续工作,而不会干扰其他人的工作。

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

有几种方法。

合并

首先,您可以简单地合并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

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

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

最新更新