在git rebase中解决冲突时如何从一个分支中选择文件?

 路见不平出手打_418 发布于 2023-01-30 08:43

鉴于git repo有两个分支masterfeature.在主服务器上重新定义功能分支时rebase master,假设该文件a.txt包含在rebase可以继续之前需要解决的冲突.

我知道我可以通过三个步骤解决冲突:

    a.txt在我的编辑器中打开手动解决冲突

    打电话git add a.txt告诉git我已经手动解决了冲突

    打电话git rebase --continue转移rebase

有没有办法通过告诉git我想要来自主分支的文件版本或者我想要来自功能分支的文件版本而不必执行上面的步骤1和2来避免步骤1.

2 个回答
  • 是.事实上,有不止一种方法可以做到这一点.

    底垫和合并(和摘樱桃,对于这个问题)命令都采取相同strategy-X标志传递给底层的Git合并机械.对于recursive策略,-Xours并且-Xtheirs在合并两个分支中修改的文件的情况下选择文件的一个或另一个"边".

    或者,这是完全不同的,在情况下,当合并有冲突停止,您可以使用git checkout--ours--theirs标志,从一个侧面或其他挑版本.(你可以使用其他命令执行此操作;在这里,我会坚持使用--ours,--theirs因为这些命令与使用合并机制的命令的参数相匹配.)

    这当然是不同的,因为您可以切换选择:

    $ git checkout main
    Switched to branch 'main'
    $ git merge branch
    ... conflicts in files A and B ...
    $ git checkout --ours -- A    # takes main:A
    $ git checkout --theirs -- B  # takes branch:B
    

    请注意,这与"我们的策略 " 完全不同(上面显示了" recursiveours选项的策略").随着"我们的战略 ",出现了完全不同的东西.让我们从没有它开始,再次进行相同的合并:

    $ git checkout main && git merge branch
    ... conflicts ...
    $ git checkout --ours -- A B  # take main:A and main:B
    

    假设有第三个文件,Cgit可以自己合并.当你执行上述操作时,git会合并C你拿main:Amain:B.如果你使用git merge --strategy=ours branch,虽然混帐将采取main:A,main:Bmain:C.它会丢弃branch:C更改而不是自动合并它们.

    git merge上面用过,因为它使"我们的"和"他们的"东西"正常".我不喜欢git命名这些的方式,因为当你做一个rebase时,我们/他们的版本会被换掉,因为rebase通过改变到"其他"分支并做一系列樱桃选择来工作.那是:

    $ git checkout mine; git rebase theirs
    

    通过做(非常)粗略相当于:

    $ git checkout theirs; git cherry-pick theirs..mine
    

    然后,将分支标签移动,使分支theirs实际上不移动.(这在内部并不是那么糟糕:-)但是它确实设法--ours表达"他们的"并且--theirs意味着"我们的",这在外部非常糟糕.)

    2023-01-30 08:46 回答
  • 您可以使用:

    git checkout --ours -- path/to/file
    

    要么:

    git checkout --theirs -- path/to/file
    

    ...在合并或变基期间选择有冲突文件的特定版本;因为变基有点奇怪,--theirs在这种情况下将是feature的版本,--ours将是的版本master

    2023-01-30 08:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有