【问题标题】:Git branch divergedGit分支分歧
【发布时间】:2013-03-27 16:17:04
【问题描述】:

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

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

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

非常感谢

【问题讨论】:

  • 您的日志文本似乎不完整?
  • 哎呀,现在更新谢谢...
  • 如果您想了解更多信息,请阅读this book,它真的帮助我理解了git

标签: git git-branch git-merge


【解决方案1】:

有几种方法。

合并

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

变基

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

git rebase origin/uitest

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

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

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

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

放弃你的工作

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

git reset --hard @{u}

git reset --hard origin/uitest

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

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

【讨论】:

  • 好的,git reset --hard origin/uitest 对我有帮助 :) 谢谢,我可以在这里问一个愚蠢的问题,这是我通常会做的事情,你能帮我制定一个工作流程来避免这样的问题吗?我想打开一个文件,对其进行更改,直到我(本地)满意,然后当我认为一切正常时,我想推送所有更改...我的意思是我必须按什么顺序放置、推送、拉取,提交,添加等......因为我不完全理解这些命令,无论是新的,但非常兴奋和有兴趣学习(GUI综合症[笑话])
  • 我认为大多数人都使用git pull,尽管我个人并不喜欢这种解决方案。我倾向于使用变基工作流程。所以我会做一个git fetch --allgit rebase @{u}、测试和git push。第一个命令从远程获取最新数据,第二个命令将我的更改基于上游最近的提交,然后我进行测试,最后推送我的更改。如果出现新的东西,我会重新开始这个过程。我也经常在单独的分支中工作,然后在master上做git fetch --allgit merge --ff-only @{u},然后合并分支,测试和推送。这是我用得最多的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
相关资源
最近更新 更多