经过git rebase我的合并冲突解决.我对"由我们添加"的含义感到困惑A.java.是什么阻止它被自动添加/暂存为新文件C.java?
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: com/company/C.java
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
added by us: com/company/A.java
both modified: com/company/B.java
Run Code Online (Sandbox Code Playgroud)
git版本2.5.1.windows.1
当我们合并时,我们保留 Maven pom.xml 文件的本地版本:
git merge origin/remote_branch
git checkout --ours **/pom.xml pom.xml
git add **/pom.xml pom.xml
git commit -m "Merge"
Run Code Online (Sandbox Code Playgroud)
除非本地分支中的 pom.xml 文件已被删除,否则这非常有效。运行上面的命令 #2 后,我们得到一个错误:
d:\code>git checkout --ours **/pom.xml pom.xml
error: path 'blah/pom.xml' does not have our version
Run Code Online (Sandbox Code Playgroud)
...并且在此错误之后,下一个命令 #3git add **/pom.xml pom.xml有效地添加了远程 pom.xml 文件 - 这正是我们不想要的。
我们如何更新脚本来处理这个问题?
这是我的情况:git merge master导致 50 个文件存在合并冲突。我希望其中 45 个文件被接受master并完成,并且我想手动解决其余 5 个文件中的冲突。所有 45 个文件都在目录 中some/dir。其余5人分散在其他地方。如果我只想接受 master 对所有 50 个冲突的更改,我会运行以下命令:
git merge -X theirs master
# OR (same thing):
git merge --strategy-option theirs master
Run Code Online (Sandbox Code Playgroud)
但我不想那样,就像我说的。我想要更多这样的东西:
git merge -X theirs master some/dir
Run Code Online (Sandbox Code Playgroud)
这样它会自动为 中的所有冲突选择“他们的”(主人)一方some/dir,但否则让我手动修复冲突。然而,这并不存在。
所以,我的解决方法是这样的:
简短的介绍:
开始合并,在众多冲突文件中手动修复我需要的几个文件。备份我刚刚修复的所有文件。中止合并。重做合并,git merge -X theirs master以自动接受master所有文件中所有冲突的更改。手动将我的几个手动修复的文件复制回存储库,然后提交它们。
这样可以避免手动修复 50 个文件,而当只有 5 个文件真正需要我注意时,这可能会非常乏味且耗时。
完整、详细的步骤:
开始正常合并:
git merge master
Run Code Online (Sandbox Code Playgroud)
手动解决我想要执行此操作的 5 个文件中的冲突,并保存每个文件。然后,将它们复制到存储库之外的位置(或者至少在存储库忽略的文件夹中)。我现在拥有手动解决的 5 个文件的副本。这是实现此目的的一种方法:
mkdir -p …Run Code Online (Sandbox Code Playgroud)在 a 期间,我无法理解这些冲突中的us人和them是谁git revert,所以我真的不知道这里发生了什么:
git revert some_commit_hash
Run Code Online (Sandbox Code Playgroud)
然后git status显示如下冲突:
deleted by them: path/to/file1.h
both modified: path/to/file2.h
deleted by them: path/to/file1.cpp
deleted by them: path/to/test_file1.cpp
added by us: path/to/file3.h
deleted by them: path/to/file4.h
added by us: path/to/file5.h
Run Code Online (Sandbox Code Playgroud)
“我们”是谁?“他们”是谁?
更新:请注意,我正在还原的提交是一个非常大的合并提交。
不重复:
us和them:GIT:“被我们删除”冲突有多危险?mergeandrebase但 NOT revert,并且 git 经常使用相同的术语来表示相反的事情,具体取决于操作:根据 Git,谁是“我们”,谁是“他们”?我调整了2个文件,然后将它们合并到Github。但是,当我运行一次推送时,出现错误:
Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
# deleted by us: somefolder/somefile.ext
Run Code Online (Sandbox Code Playgroud)
但是,我还没有碰过这个文件。当查看我的本地目录时,我看到文件仍然完整无缺。
有谁知道这是为什么发生的,我能对此做些什么?