在'git 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
Run Code Online (Sandbox Code Playgroud)
对于上面的'git merge add-on',我预计'bar.c'的合并冲突没有基本版本,没有本地版本和远程版本.[编辑]正如在一个答案中所建议的,上面没有发生合并.这是我强制合并的情况,仍然没有所需的合并冲突:
$ git merge --no-ff add-on
Merge made by the 'recursive' strategy.
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 bing.c
Run Code Online (Sandbox Code Playgroud)
请注意,上面的'bing.c'实际上是空的; 但是,这不是问题,因为提供非空文件仍然会被合并.[编辑2]我试过 - 没有提交这个结果:
$ 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
Run Code Online (Sandbox Code Playgroud)
我错过了什么?有没有办法确认'.gitattributes'是否被使用/读取?
你没合并.你的命令git merge add-on执行了"快进",这意味着它只是移动了分支头.这是因为您的add-on分支已经从分支的尖端下降master,因此不需要合并.如果你运行git log你将看到没有合并提交.
基本上,它在合并之前看起来像这样:
master
/
o---o---o---o add-on
\ /
o---o---o
Run Code Online (Sandbox Code Playgroud)
并且合并只是将master指针移动到行的末尾:
master, add-on
/
o---o---o---o---o---o---o
Run Code Online (Sandbox Code Playgroud)
如果要强制合并,请传递--no-ff标记,如下所示git merge --no-ff add-on.
进一步反映后,该merge属性将无法执行您想要的操作.这仅适用于文件级合并,这意味着合并的两端都对特定文件进行了更改.如果只有一方有更改(这是您的情况),则不会进行文件级合并,并且无条件地接受更改的文件.
你最好的选择可能是git merge --no-ff --no-commit add-on用来产生合并,但实际上并没有提交.您现在可以检查结果并在提交合并之前将其调整到令您满意的程度.如果您希望以每个块为基础接受更改,您可以执行类似git reset重置索引然后git add -p执行每个块执行的操作.
| 归档时间: |
|
| 查看次数: |
2109 次 |
| 最近记录: |