首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘`git’报告我未更改的文件的冲突

‘`git’报告我未更改的文件的冲突
EN

Stack Overflow用户
提问于 2021-10-07 15:53:49
回答 1查看 393关注 0票数 1

我想了解下面(尝试)的git合并是怎么回事。

我有一个名为llvm的分支,其中main分支是上游的llvmorg-12.0.0标记,另外:

  • 两个新文件.
  • 对现有上游文件的两个小更改.

通过这样做,我们可以看到我在分支中接触到的文件:

代码语言:javascript
复制
$ git diff --name-only llvmorg-12.0.0
.buildbot.sh # new file
bors.toml    # new file
llvm/CMakeLists.txt # modified file
llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp # modified file

下面是我的main分支在tig中的样子:

现在,我想将最新的llvm版本同步到我的分支中,即llvmorg-13.0.0标记。我已经做了git fetch llvm来获取上游的所有提交和标记。

让我们首先创建一个分支来完成合并:

代码语言:javascript
复制
$ git co -b sync-llvm13
Switched to a new branch 'sync-llvm13'

现在让我们进行合并:

代码语言:javascript
复制
$ git merge llvmorg-13.0.0
Performing inexact rename detection: 100% (8537886/8537886), done.                                                                                                                                 
warning: Cannot merge binary files: llvm/test/tools/llvm-profgen/Inputs/recursion-compression-pseudoprobe.perfbin (HEAD vs. llvmorg-13.0.0)                                                        
Removing polly/lib/External/isl/cpp/cpp.h.pre                                                                                                                                                      
Removing polly/lib/External/isl/cpp/cpp-checked.h.pre                                                                                                                                              
CONFLICT (add/add): Merge conflict in openmp/runtime/test/tasking/hidden_helper_task/capacity_nthreads.cpp                                                                                         
Auto-merging openmp/runtime/test/tasking/hidden_helper_task/capacity_nthreads.cpp                                                                                                                  
Removing openmp/runtime/src/tsan_annotations.h                                                                                                                                                     
Removing openmp/runtime/src/tsan_annotations.cpp                                                                                                                                                   
Auto-merging openmp/runtime/src/kmp_tasking.cpp                                                                                                                                                    
Auto-merging openmp/runtime/src/kmp_settings.cpp                                                                                                                                                   
Auto-merging openmp/runtime/src/kmp_runtime.cpp                                                                                                                                                    
Auto-merging openmp/runtime/src/kmp_config.h.cmake                                                                                                                                                 
CONFLICT (content): Merge conflict in openmp/runtime/src/kmp_config.h.cmake                                                                                                                        
Auto-merging openmp/runtime/src/CMakeLists.txt                                                                                                                                                     
Auto-merging openmp/runtime/cmake/config-ix.cmake                                                                                                                                                  
Auto-merging openmp/runtime/CMakeLists.txt                                                                                                                                                         
CONFLICT (add/add): Merge conflict in openmp/libomptarget/test/offloading/bug49334.cpp                                                                                                             
Auto-merging openmp/libomptarget/test/offloading/bug49334.cpp                                                                                                                                      
CONFLICT (add/add): Merge conflict in openmp/libomptarget/test/offloading/bug49021.cpp                                                                                                             
Auto-merging openmp/libomptarget/test/offloading/bug49021.cpp                                                                                                                                      
CONFLICT (add/add): Merge conflict in openmp/libomptarget/test/offloading/assert.cpp
...
Auto-merging clang/test/Preprocessor/riscv-target-features.c                                                                                                                                       
CONFLICT (content): Merge conflict in clang/test/Preprocessor/riscv-target-features.c                                                                                                              
Removing clang/test/Preprocessor/pragma_sysheader.h                                                                                                                                                
Auto-merging clang/test/Preprocessor/macro_vaopt_check.cpp                                                                                                                                         
CONFLICT (content): Merge conflict in clang/test/Preprocessor/macro_vaopt_check.cpp                                                                                                                
Auto-merging clang/test/OpenMP/teams_distribute_simd_codegen.cpp                                                                                                                                   
CONFLICT (content): Merge conflict in clang/test/OpenMP/teams_distribute_simd_codegen.cpp                                                                                                          
Auto-merging clang/test/OpenMP/teams_distribute_parallel_for_simd_codegen.cpp                                                                                                                      
CONFLICT (content): Merge conflict in clang/test/OpenMP/teams_distribute_parallel_for_simd_codegen.cpp                                                                                             
Auto-merging clang/test/OpenMP/teams_distribute_parallel_for_codegen.cpp                                                                                                                           
...loads more conflicts

这是个惊喜。有很多被标记为冲突的文件,但我从未碰过。

这些冲突是add/addrename/deletecontent的混合。

查看其中一个content冲突,文件中确实有冲突标记(例如,libcxx/include/__support/openbsd/xlocale.h):

代码语言:javascript
复制
...
<<<<<<< HEAD:libcxx/include/__support/openbsd/xlocale.h                                                                                                                                        
#include <__support/xlocale/__strtonum_fallback.h>                                                                                                                                             
=======                                                                                                                                                                                        
#include <cwctype>                                                                                                                                                                             
>>>>>>> llvmorg-13.0.0:libcxx/include/support/openbsd/xlocale.h
...      

(因此这排除了行尾作为原因的可能性)

我很困惑。如上面使用git diff --only-name命令所示,我从未编辑过这些文件。

锣开着什么?

用户错误/误解?我应该以不同的方式合并吗?

这是在Debian 11上使用最新的git (2.33.0)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-07 19:24:06

如果标记llvmorg-12.0.0 llvmorg-13.0.0**.**无法访问标记,则可以解释这一点。

换句话说,签出标记12,并尝试在标记13中合并,您可能会遇到冲突。如果您这样做(显然)与您的代码无关,这只意味着该回购使用的维护人员使用的分支策略不一定包括将发布的标记合并回main。或者,如果他们最终做到了,他们并没有在这两个版本之间这样做。

您还可以使用以下命令(在Git Bash或*nix shell中)测试是否可以从标记13中访问标记12:

代码语言:javascript
复制
git rev-list llvmorg-13.0.0 | grep `git rev-parse llvmorg-12.0.0`

命令列表中的"rev-list“部分所有的提交都可以从标记13中找到,然后它会很高兴地查看标记12的提交ID是否是其中之一。

如果这没有结果,那么这就是正在发生的事情。

从您的合并输出中,您看到的CONFLICT (add/add)代码行表明,回购维护人员从版本12分支中选择了一些提交到main或release-13分支,而不是合并,这是另一个证据--这就是原因所在。这一策略意味着发布标记不能彼此访问,如果将一个发布标记合并到另一个发布标记中,则可能会出现合并冲突。

,那么你应该怎么做?

两种可能的选择是:

1. main的分支(原来的主板,而不是叉子然后继续重新定位到main,直到您准备好用代码做其他事情为止。在您的分支检查,重建您的分支如下:

代码语言:javascript
复制
git rebase --onto main llvmorg-12.0.0

随后的重基将是正常的:git rebase main

2.从较新的标记重新构建分支,而不是在新标记中合并。在您的分支检查,重建您的分支如下:

代码语言:javascript
复制
git rebase --onto llvmorg-13.0.0 llvmorg-12.0.0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69484251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档