Val*_*Val 5 git git-merge git-branch
我是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)
Run Code Online (Sandbox Code Playgroud)
我将如何保持分歧?放弃我的更改并从最新更改中提取最新更改,然后继续工作而不会弄乱其他人的工作。
另外,由于我对此并不陌生,请对您的回答进行一些描述,因为这对我来说可能没有多大意义。
非常感谢
有几种方法。
首先,您可以简单地进行合并origin/uitest,但这并没有留下干净的历史,因为它引入了看起来像分支的内容并进行合并,即使它一直以来都是同一分支。我相信Linus喜欢将这类合并提交称为“毫无意义”。不幸的是,这也是最简单的方法。
重新定级通常是一个更高级的主题,如果您不小心,可能会引入很多其他问题。就是说,这也是获得无历史记录的清晰记录的好方法。在这种情况下,您可以执行以下操作:
git rebase origin/uitest
Run Code Online (Sandbox Code Playgroud)
从您的uitest分支开始,它将承担您所做的所有工作,并将其放在原始/ uitest的工作之上。
虽然有两个问题。首先,如果您将任何其他分支合并到分支中,git rebase则将其删除。您需要传递该-p标志以保留您引入的所有合并提交,但这也不总是正确的选择。如果您所做的只是提交自己的更改,那么使用我给出的命令应该没问题。
其次,任何时候使用重新设置基准时,您都应该记住永远不要重新设置公共提交。Rebase将更改提交ID,因为父母已更改。如果人们将您的工作合并在一起,并且您重新设置工作基础,那么他们最终将获得历史记录中的多个提交副本,这很糟糕。因此,在应用此技术时要小心。
话虽如此,你想结交git rebase朋友。这是一个功能强大且有用的工具,但是与其他任何电动工具一样,它可能很危险。
如果您只是想舍弃所做的事情,可以运行:
git reset --hard @{u}
Run Code Online (Sandbox Code Playgroud)
要么
git reset --hard origin/uitest
Run Code Online (Sandbox Code Playgroud)
这将重置您的uitest分支以匹配上游或origin/uitest。它将丢弃您的提交。
就个人而言,我会将工作重新定基,或者至少尝试一下。如果失败,或者由于合并冲突而变得复杂,则可以始终使用终止git rebase --abort,然后回退以合并或放弃更改(尽管合并可能会向您显示相同的合并冲突)。
| 归档时间: |
|
| 查看次数: |
9208 次 |
| 最近记录: |