gpt4 book ai didi

git - 强制 'git merge' 将所有差异声明为 merge 冲突

转载 作者:太空狗 更新时间:2023-10-29 12:58:21 26 4
gpt4 key购买 nike

在“git merge”中,我希望任何差异,即使通常不是 merge 冲突,也被视为 merge 冲突。然后,使用“git mergetool”我可以看到并解决每一个差异。我尝试在 .gitattributes 中指定 '* -merge' 但这似乎没有用:

$ git checkout master
Switched to branch 'master'
$ ls
foo.c
$ git merge add-on
Updating a628824..2219552
Fast-forward
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 bar.c
$ cat .gitattributes
* -merge
$ ls
bar.c foo.c

对于上面的'git merge add-on',我预计'bar.c'的 merge 冲突没有基础版本,没有本地版本和远程版本。[编辑] 正如一个答案中所建议的那样,上面没有发生 merge 。这是我强制 merge 的情况,仍然没有所需的 merge 冲突:

$ git merge --no-ff add-on
Merge made by the 'recursive' strategy.
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 bing.c

请注意,上面的“bing.c”实际上是空的;但是,这不是问题,因为提供非空文件仍然会被 merge 。 [edit 2] 我试过 --no-commit 这个结果:

$ git merge --no-ff --no-commit add-on
Automatic merge went well; stopped before committing as requested
$ git status
# On branch master
# Changes to be committed:
#
# new file: boom.c
#
$ git mergetool
No files need merging
$ cat .gitattributes
* -merge

我错过了什么?有没有办法确认“.gitattributes”正在被使用/读取?

最佳答案

你没有 merge 。您的命令 git merge add-on 执行了“快进”,这意味着它只是移动了分支头。这是因为您的 add-on 分支已经从 master 分支的顶端派生而来,因此不需要 merge 。如果您运行 git log,您会看到没有 merge 提交。

merge 前基本上是这样的:

              master
/
o---o---o---o add-on
\ /
o---o---o

并且 merge 只是将 master 指针移动到行尾:

                          master, add-on
/
o---o---o---o---o---o---o

如果你想强制 merge ,传递 --no-ff 标志,就像在 git merge --no-ff add-on 中一样。


经过进一步思考,merge 属性不会执行您想要的操作。这仅适用于文件级 merge ,这意味着 merge 的双方都对特定文件进行了更改。如果只有一侧发生更改(这是您的情况),则不会进行文件级 merge ,并且无条件接受更改的文件。

您最好的选择可能是使用 git merge --no-ff --no-commit add-on 来生成 merge 但实际上并不提交。您现在可以在提交 merge 之前检查结果并对其进行调整以达到您满意的程度。如果您想接受基于每个大块的更改,您可以执行类似 git reset 的操作来重置索引,然后使用 git add -p 来执行每个大块的暂存。

关于git - 强制 'git merge' 将所有差异声明为 merge 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10131577/

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