5

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

我将如何消除分歧?丢弃我的更改并从最新更改中提取最新更改,然后继续工作而不会弄乱其他人的工作。

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

非常感谢

4

1 回答 1

5

有几种方法。

合并

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

变基

变基往往是一个更高级的主题,如果您不小心,可能会引入大量其他问题。也就是说,这也是在没有毫无意义的提交的情况下获得干净历史记录的好方法。在这种情况下,您可以这样做:

git rebase origin/uitest

来自您的 uitest 分支,它将占用您所做的所有工作,并将其放在 origin/uitest 中的工作之上。

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

其次,任何时候你使用变基,你都应该记住永远不要变基公共提交。Rebase 将更改提交 ID,因为父母已更改。如果人们正在合并您的工作,并且您对其进行了变基,那么他们最终会在历史记录中获得您的提交的多个副本——这很糟糕。因此,在应用此技术时要小心。

说了这么多,你想交git rebase你的朋友。这是一个强大而有用的工具,但与任何电动工具一样,它可能很危险。

放弃你的工作

如果你只是想放弃你所做的,你可以运行:

git reset --hard @{u}

或者

git reset --hard origin/uitest

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

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

于 2013-04-05T10:07:39.000 回答