gpt4 book ai didi

git - 如何强制 git 进入 "merge conflict mode"?

转载 作者:行者123 更新时间:2023-12-01 22:17:25 26 4
gpt4 key购买 nike

我在分支 master 中有一个文件 foo。它需要一些工作,所以我创建了分支 bar,我在那里做了一些工作。事情看起来令人满意,所以我准备 merge 回 master。只有一个问题:我想保留我在分支 bar 中所做的所有更改以供将来引用,但并非所有更改都属于 master,反正现在不.但是如果我进行通常的 merge ,git 将看不到任何冲突——因为 master 中的文件 foo 没有被编辑——并且只会进行 merge 。有没有办法强制 git 执行此 merge ,就好像存在我需要解决的冲突一样?或者是否有其他方法可以将 bar 中选定的更改放入 master 中?

最佳答案

有几个选项。直接回答您问题的那个:

git merge --no-commit

将自动 merge 到索引然后停止,就像需要手动解决冲突一样。当然,不会有冲突标记,也没有“未暂存”/等待解决的更改,但您可以在提交前修改提交以查看您想要的样子。

最大的问题是,除了“这可能是一团糟”之外,就 git 而言,bar 中的所有更改都是如此。现在占 master .由于您暗示您稍后可能需要剩余的更改,所以这不好。

你真正想要的是类似的东西

x --- O --- M <--(master)
\ /
A --- B <--(bar)

哪里O是原来的分支点,A有你现在想要的改变,B具有您稍后需要的更改。

(或者,如果你想避免 merge 提交,你会想要

x --- O --- A <--(master)
\
B <--(bar)

代替。)

如何最好地做到这一点取决于您现在拥有的东西。如果bar只有一个提交(或者,在任何情况下,如果你很高兴最终只有一个“提交 merge ”和一个“提交保存以备后用”),并且如果 master 上没有提交在 O 之后,你可以这样做:

开始于

x --- O  <--(master)
\
AB <--(bar)

你会

git checkout bar
git reset --mixed HEAD^

(假设在 bar 上实际上只有一个提交;否则,将 HEAD^ 替换为提交 O 的 SHA1 值或您在提交 O 上放置的标记)。现在你有

x --- O  <--(master)(bar)
^HEAD

包含来自 bar 的所有原始更改在你的工作树中未被追踪。因为所有的更改都在一个文件中,所以我们需要使用补丁模式来有选择地添加更改

git add -p
# select the changes to merge
git commit
git stash

给你

x --- O  <--(master)
\
A <--(bar)
\ ^HEAD
B <--{stash}

接下来

git checkout master
git merge bar

如果您想要 merge 提交(保留在 bar 上进行更改的拓扑),则传递 --no-ffmerge命令。否则,因为我们假设 master 没有偏离 bar , 你会得到一个快进离开

x --- O --- A <--(master)(bar)
\ ^HEAD
B <--{stash}

(相反,如果 master 分歧但您决定线性化历史,您会将 A rebase 到 master 而不是 merge ...)

然后你可以做类似的事情

git branch --delete bar
git stash branch bar

结束于

x --- O --- A <--(master)
\
B <--(bar)

关于git - 如何强制 git 进入 "merge conflict mode"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43762558/

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