gpt4 book ai didi

git:分支分歧;如何进行?

转载 作者:IT王子 更新时间:2023-10-29 00:59:15 26 4
gpt4 key购买 nike

我的本​​地树与主树发生了分歧:

$ git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 7 and 3 different commit(s) each, respectively.
#
nothing to commit (working directory clean)

我尝试了 git pull --rebase 但失败了:

$ git pull --rebase
First, rewinding head to replay your work on top of it...
Applying: * ...
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging ChangeLog
CONFLICT (content): Merge conflict in ChangeLog
Failed to merge in the changes.
Patch failed at 0001 * ...

所以我用 git rebase --abort 恢复了,我现在在方 block 1。

我想要的是:

  1. 将我的 7 个补丁“导出”到人类可读的 diff 文件中(a la hg export)。
  2. 使我的树成为原点/主树的副本(a la hg strip)。
  3. 手动重新应用我的 7 个补丁(a la hg import)。

我明白 git rebase --continue 会这样做。我做到了,它确实有效(在几次手动 merge 和 git add 之后)。但是,我希望能够手动执行此操作,所以我想知道与上面的 hg 命令相对应的 git 命令是什么。

谢谢。

附言。请不要告诉我在 git 中使用 ChangeLog 文件是愚蠢的。就算是,也不是我能决定的。

最佳答案

当然,您可以通过多种方式手动执行此操作。你仍然会遇到同样的冲突,因为 git 基本上是在幕后为你做这件事。但如果您想手动执行此操作,可以使用以下几种方法。

首先,将您的提交导出为一系列补丁。最简单的方法是使用 git format-patch:

git format-patch -M @{upstream}

将生成 7 个补丁文件——一个用于您的每个提交。 (请注意,“@{upstream}”是字面意思——它不是 git 的一个不太为人所知的特性。)这比捕获 git diff 的输出要好,因为所有提交信息(作者,日期、消息等)被保留。

然后您可以重置您的存储库以匹配上游:

git reset --hard @{upstream}

然后您可以使用 git am 重新应用您的补丁——一次一个或一次全部。

git am 0001-blah-blah.patch
git am 0002-blah-blah.patch
...

第二个选择是创建一个备用分支来处理您的工作:

git branch scrap

然后将您的分支重置为上游:

git reset --hard @{upstream}

然后 cherry-pick 提交:

git cherry-pick scrap~6
git cherry-pick scrap~5
git cherry-pick scrap~4
...

然后丢弃废料分支:

git branch -D scrap

关于git:分支分歧;如何进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8716130/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com