Kev*_*son 444 git merge-conflict-resolution
我一直在Windows上使用Git(msysgit)来跟踪我一直在做的一些设计工作的变化.
今天我一直在使用不同的PC(带远程仓库brian),现在我正在尝试将今天完成的编辑合并到我笔记本电脑上的常规本地版本中.
在我的笔记本电脑上,我习惯git pull brian master将更改添加到我的本地版本中.除了主要的InDesign文档之外,一切都很好 - 这显示为冲突.
PC(brian)上的版本是我想要保留的最新版本,但我不知道哪些命令告诉repo使用这个版本.
我试着将文件直接复制到我的笔记本电脑上,但这似乎打破了整个合并过程.
谁能指出我正确的方向?
mip*_*adi 816
git checkout对此类案件接受--ours或--theirs选择.因此,如果您有合并冲突,并且您知道您只想要合并的分支中的文件,则可以执行以下操作:
$ git checkout --theirs -- path/to/conflicted-file.txt
Run Code Online (Sandbox Code Playgroud)
使用该版本的文件.同样,如果您知道您想要您的版本(不是合并的版本),您可以使用
$ git checkout --ours -- path/to/conflicted-file.txt
Run Code Online (Sandbox Code Playgroud)
Vol*_*lkA 144
你必须手动解决冲突(复制文件)然后提交文件(无论你是复制它还是使用本地版本),像这样
git commit -a -m "Fix merge conflict in test.foo"
Run Code Online (Sandbox Code Playgroud)
Git通常在合并后自动提交,但是当它检测到冲突时它本身无法解决,它会应用它想出的所有补丁,剩下的就是让你手动解析和提交.在Git的合并手册页中,针对Git SVN速成班或此博客条目可能揭示它是如何工作的一些情况.
编辑:请参阅下面的帖子,您实际上不必自己复制文件,但可以使用
git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt
Run Code Online (Sandbox Code Playgroud)
选择所需文件的版本.只有在需要两种版本的混合时,才需要复制/编辑文件.
请将mipadis答案标记为正确答案.
Rob*_*obM 120
你也可以克服这个问题
git mergetool
Run Code Online (Sandbox Code Playgroud)
这会导致git创建冲突二进制文件的本地副本并在其上生成默认编辑器:
{conflicted}.HEAD{conflicted}{conflicted}.REMOTE显然,您无法在文本编辑器中有用地编辑二进制文件.而是{conflicted}.REMOTE在{conflicted}不关闭编辑器的情况下复制新文件.然后,当您关闭时,编辑器git将看到未修饰的工作副本已更改,并且您的合并冲突以常规方式解决.
Jos*_*gan 16
要通过将版本保留在当前分支中来解决(忽略要合并的分支中的版本),只需添加并提交文件:
git commit -a
Run Code Online (Sandbox Code Playgroud)
要通过使用您要合并的分支中的版本覆盖当前分支中的版本来解决,您需要首先将该版本检索到工作目录中,然后添加/提交它:
git checkout otherbranch theconflictedfile
git commit -a
Run Code Online (Sandbox Code Playgroud)
kri*_*ris 10
mipadi的回答对我来说不太有用,我需要这样做:
git checkout --ours path/to/file.bin
或者,保持合并版本:
git checkout --theirs path/to/file.bin
然后
git add path/to/file.bin
然后我能够再次执行"git mergetool"并继续下一次冲突.
小智 6
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...
--ours
--theirs
检查索引中的路径时,请检查阶段#2(ours)或#3(theirs)是否有未合并路径.由于先前失败的合并,索引可能包含未合并的条目.默认情况下,如果您尝试从索引中检出此类条目,则结帐操作将失败,并且不会检出任何内容.使用
-f将忽略这些未合并的条目.可以使用--ours或从索引中检出合并的特定一侧的内容--theirs.使用时-m,可以放弃对工作树文件所做的更改以重新创建原始冲突的合并结果.
我遇到了一个类似的问题(想要提取包含一些在合并时导致冲突的二进制文件的提交),但遇到了一个可以完全使用 git 完成的不同解决方案(即不必手动复制文件)。我想我会把它包括在这里,所以至少我下次需要它的时候能记住它。:) 步骤如下:
% git fetch
Run Code Online (Sandbox Code Playgroud)
这将从远程存储库中获取最新提交(您可能需要指定远程分支名称,具体取决于您的设置),但不会尝试合并它们。它记录了 FETCH_HEAD 中的提交
% git checkout FETCH_HEAD stuff/to/update
Run Code Online (Sandbox Code Playgroud)
这需要我想要的二进制文件的副本,并使用从远程分支获取的版本覆盖工作树中的内容。git 不会尝试进行任何合并,因此您最终会得到来自远程分支的二进制文件的精确副本。完成后,您可以像往常一样添加/提交新副本。
此过程用于解决向Github提交拉取请求后的二进制文件冲突:
在Github上,应您的请求,冲突应该消失。
| 归档时间: |
|
| 查看次数: |
167242 次 |
| 最近记录: |