git 假合并(将提交标记为已合并而没有真正的合并)
git fake merge (marking a commit as merged without a real merge)
假设我的存储库中有以下历史记录:
E--F
/
A--B--C---D
我想修改成这样:
E--F
/ \
A--B--C---D
我不想修改revisions的文件内容,我只想"draw a merge arrow"。我该怎么做?
我尝试通过以下命令执行此操作:
git checkout D
git merge F -s ours --no-ff --no-commit
git commit --amend
但我收到以下错误消息:
fatal: You are in the middle of a merge -- cannot amend.
我想保留提交信息不变(作者、日期、消息)。我唯一想改变的是将伪合并信息添加到提交中。
这对我有用:
git checkout D~1
git merge F -s ours --no-ff --no-commit
git cherry-pick D -n
git commit -C D
git branch -f D
git checkout D
包含答案:您不能修改现有提交 D
。地球上没有任何力量可以修改现有的提交:git commit --amend
是一个谎言。 :-)
不过,您可以做几件事:
您可以使用提交 D
。这就是这个 two-command 序列:
git checkout D
git merge F -s ours --no-ff --no-commit
准备执行(最终提交已被 --no-commit
抑制,但合并记录为正在进行中)。
问题,如你所见,当你去使用git commit --amend
时出现了:--amend
意味着使用D
的parent (s) 而不是 D
本身作为 parents,这与正在进行的 F
.
的记录合并冲突
您可以进行合并提交,其中 C
作为其 parent 之一,F
作为另一个,并使用内容(树) 来自提交 D
。这可能就是你想要的。请注意,没有用于此的前端命令,因此您必须手动构建新提交;结果就是许多人所说的邪恶合并.
您可以使用 git replace
进行类似于 D
但具有不同 parent 的额外提交,Git 将使用 代替 D
,但 根本没有实际删除 D
。也就是说,原始图形保留在原位(并且可以使用 git --no-replace-objects
查看和使用),但是大多数命令,当它们即将使用 D
时,使用替换。
此方法的优点是它不会影响任何现有的克隆。缺点是没有其他人会 看到 这个替换提交,除非他们明确要求将其复制到他们自己的存储库:对替换的引用存在于 refs/replace/
下,这不是通常在 git fetch
和 git push
.
上传输
包含一个使用 parents C
和 F
但使用 D
的树进行新提交的命令。
假设我的存储库中有以下历史记录:
E--F
/
A--B--C---D
我想修改成这样:
E--F
/ \
A--B--C---D
我不想修改revisions的文件内容,我只想"draw a merge arrow"。我该怎么做?
我尝试通过以下命令执行此操作:
git checkout D
git merge F -s ours --no-ff --no-commit
git commit --amend
但我收到以下错误消息:
fatal: You are in the middle of a merge -- cannot amend.
我想保留提交信息不变(作者、日期、消息)。我唯一想改变的是将伪合并信息添加到提交中。
这对我有用:
git checkout D~1
git merge F -s ours --no-ff --no-commit
git cherry-pick D -n
git commit -C D
git branch -f D
git checkout D
D
。地球上没有任何力量可以修改现有的提交:git commit --amend
是一个谎言。 :-)
不过,您可以做几件事:
您可以使用提交
D
。这就是这个 two-command 序列:git checkout D git merge F -s ours --no-ff --no-commit
准备执行(最终提交已被
--no-commit
抑制,但合并记录为正在进行中)。问题,如你所见,当你去使用
git commit --amend
时出现了:--amend
意味着使用D
的parent (s) 而不是D
本身作为 parents,这与正在进行的F
. 的记录合并冲突
您可以进行合并提交,其中
C
作为其 parent 之一,F
作为另一个,并使用内容(树) 来自提交D
。这可能就是你想要的。请注意,没有用于此的前端命令,因此您必须手动构建新提交;结果就是许多人所说的邪恶合并.您可以使用
git replace
进行类似于D
但具有不同 parent 的额外提交,Git 将使用 代替D
,但 根本没有实际删除D
。也就是说,原始图形保留在原位(并且可以使用git --no-replace-objects
查看和使用),但是大多数命令,当它们即将使用D
时,使用替换。此方法的优点是它不会影响任何现有的克隆。缺点是没有其他人会 看到 这个替换提交,除非他们明确要求将其复制到他们自己的存储库:对替换的引用存在于
refs/replace/
下,这不是通常在git fetch
和git push
. 上传输
C
和 F
但使用 D
的树进行新提交的命令。