标签: merge-conflict-resolution

避免重新解决 git rebase 中的冲突,包括合并提交

尝试通过添加源远程并将历史记录从一个存储库移动到另一个存储库(无公共根)并重新定基到本地目标存储库上的分支。

来源:

A-B-C
 \ /
  E
Run Code Online (Sandbox Code Playgroud)

目的地通缉:

F-A'-B'-C'
   \   /
     E'
Run Code Online (Sandbox Code Playgroud)

git rebase --rebase-merges 的文档表示它将保留拓扑并重新创建合并提交,但是:

这些合并提交中任何已解决的合并冲突或手动修改都必须手动解决/重新应用。

现在,我想避免重新解决冲突,但我很困惑为什么需要这样做。合并提交的内容就在那里,我可以将 HEAD 分离到 to 。

所以,我尝试了

$ git rebase -i --onto destnewbranch --root --rebase-merges srcbranch
Could not apply C... master # Merge branch 'master'

(detached HEAD|REBASE x/y)
$ git status
interactive rebase in progress; onto F
Last commands done (n commands done):
   pick B
   merge -C C master # Merge branch 'master' 

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git …
Run Code Online (Sandbox Code Playgroud)

git rebase merge-conflict-resolution

6
推荐指数
1
解决办法
2863
查看次数

不同版本之间 Git 合并的最佳实践

想象一下,我们使用Gitflow,从中分离出一个发布分支develop,最终将合并到 和maindevelop。只有release质量的改进。其中大多数需要部署到集成阶段,因此它们的版本有多个pom.xml(多模块),并且package.json在分支上更新和标记release

上面develop有针对未来版本的常规(不稳定)功能开发,并且版本已相应设置。有时,来自 的改进release会合并回develop. 我们会遇到合并冲突,在下图中用 X 标记。

main     ----------------------o----
                              /
release        o---o-----o-o-o
              /     \     \   \
develop  ----o---o---x--o--x-o-x----
                           ^
               we are here |
Run Code Online (Sandbox Code Playgroud)

例子:

  • 上的release版本号是1.0.0-SNAPSHOT
  • 上的develop版本号是1.1.0-SNAPSHOT分支之后的。
  • 新功能进入develop,版本号保持不变。
  • 中的版本release偶尔会增加(并标记)为1.0.11.0.21.0.3
  • 现在,当我想将版本 1.0.x 合并到 1.1.0 而共同祖先是 1.0.0 时, 当然会发生冲突。
    • (我们完全理解那里发生的事情,不需要解释。)
$ git …
Run Code Online (Sandbox Code Playgroud)

git merge release version merge-conflict-resolution

6
推荐指数
1
解决办法
1831
查看次数

为什么我的合并请求显示已在 GitLab 的目标分支中的“添加”?

我在 Git 中有一个临时分支和主分支似乎有点不同步。我正在使用 GitLab,并打开了从 stage 到 main 的合并请求,只是为了看看分支之间有什么区别。差异似乎包括主分支中已经存在的“更改”,对此我有点困惑。例如,“更改”选项卡中显示的更改之一是添加主分支中已有的文件,并且这两个文件是相同的。

然而,我在暂存分支上看到一些提交尚未进入主分支。这很好,我现在想让它们远离主分支。

我想知道如何使分支同步,以便当我打开从阶段到主分支的合并请求时,唯一的更改是实际上不在主分支中的分支。当我打开合并请求时,为什么主文件中已经存在的文件显示为“添加”?

理想情况下,我希望不要触及主分支,而是使用主分支中的内容重建暂存分支,并将不在主分支中的提交保留在阶段上。

git version-control git-merge merge-conflict-resolution gitlab

6
推荐指数
1
解决办法
3692
查看次数

Mercurial,冲突,合并,以及后来的进一步冲突,Mercurial是否记得最初的解决方案?

想象一下这种情况:

  1. Alice和Bob都克隆了一个中央主Mercurial存储库,包含1个文本文件
  2. Alice和Bob都对文件中的同一行进行了更改,并提交
  3. Bob推回中央存储库,但不是Alice
  4. 爱丽丝现在进入她的存储库,注意到她现在有两个头,并合并
  5. 由于合并是冲突,她解决了冲突
  6. 爱丽丝然后提交但不推
  7. 现在,Bob作进一步的修改文件,在该文件的一些其他位置(即远不及初步改变)并提交,推
  8. 爱丽丝,在她的合并文件,确实在同一位置的类似变化鲍勃只是改变了,并承诺
  9. 爱丽丝拉,并发现另一个双头存储库,她合并

以下是上述场景的不同视图

("CHANGE"之后的数字表示该人改变了文件的"部分X".如果两个用户都改变了相同的部分,我们前面会发生合并冲突,如果他们改变了不同,那么就没那么多了)

    Alice                    Bob
    CLONE MASTER             CLONE MASTER
    -----------------------------------------
    CHANGE 1                               <-----+
    COMMIT                                       +-- upcoming merge conflict
    -----------------------------------------    |
                             CHANGE 1      <-----+
                             COMMIT
                             PUSH
    -----------------------------------------
    PULL                                   <-- Bob's change +1 head
    MERGE                                  <-- Attempt to get rid of extra head
    RESOLVE CONFLICT                       <-- Resolve merge conflict
    COMMIT
    -----------------------------------------
                             CHANGE 2      <-----+
                             COMMIT              +-- yet another merge
                             PUSH                |   conflict ahead
    -----------------------------------------    |
    CHANGE 2                               <-----+
    COMMIT
    PULL                                   <-- Bob's change, …

merge mercurial conflict merge-conflict-resolution

5
推荐指数
1
解决办法
348
查看次数

为什么git有时会将添加的行标记为更改的行(即添加的代码段上的空冲突)

我仍然没有确定的方法来重现这个,但如果这是一个众所周知的问题,我还是会问它.会发生什么是git经常会产生这样的冲突:

<<<<<<< HEAD
  } // action_do_add
=======
  } // action_do_add
...lots of code here...
>>>>>>> some_branch
Run Code Online (Sandbox Code Playgroud)

所以我没有注意到我只是添加了一段新代码,而是认为我修改了整行代码.这有时会发生在文件的中间,但最常见的是 - 在文件的末尾.我的猜测是它可能与行尾字符有关,但我还是必须运行测试来确认这一点.有没有人有同样的问题,如果是的话,你如何解决它?

git merge conflict git-merge merge-conflict-resolution

5
推荐指数
1
解决办法
992
查看次数

由于重命名,Git revert会创建"由我们删除"的冲突

我正在尝试恢复一个提交,修改了一个已经重命名的文件.

修改过的文件曾经被调用bin/internal/call_parser.rb,并且当前被调用lib/call_parser.rb,并且在尝试进行恢复后我处于我的状态

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 16 commits.
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   other/unrelated/file
#
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   deleted by us:      bin/internal/call_parser.rb
#
Run Code Online (Sandbox Code Playgroud)

据我所知,当前版本的lib/call_parser.rb和文件bin/internal/call_parser.br的当时版本应该足够相似,以至于git可以检测到共享内容(我听说过git的工作原理)关于文件内容,而不是文件名).如何让git更加努力地工作以检测重命名,从而恢复到lib/call_parser.rb中的内容?

git git-revert merge-conflict-resolution

5
推荐指数
1
解决办法
3011
查看次数

如何在git中保存合并后的主文件冲突

我多次陷入这种境地

1. I work on master branch and make some commits
2. Then i use git pull
3. Then i get auto merge fail , conflicting changes
Run Code Online (Sandbox Code Playgroud)

现在假设有5个文件存在冲突.我想知道

1. How can i overwrite those conflicting files with my files on my commit
2. How can i overwrite those with chnages from master
Run Code Online (Sandbox Code Playgroud)

在我做git pull之后

git version-control version git-checkout merge-conflict-resolution

5
推荐指数
1
解决办法
1308
查看次数

由于未合并的文件,Git拉不可能

我刚刚尝试用master另一个分支替换我的服务器上的分支,因为它master被破坏了,我似乎无法解决错误...

我替换它的分支是我的最后一个工作版本.我通过从本地计算机运行以下命令来完成此操作:

git checkout lastWorkingBranch

git merge -s我们的主人

git checkout master

git merge lastWorkingBranch master

git push origin master

然后,在服务器上,我跑了

git pull origin master

但是,这给出了以下输出:

Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
root@moon:/code/moon# git stash
costing/views.py: needs merge
tools.py: needs merge
costing/views.py: needs merge
tools.py: needs merge
costing/views.py: unmerged (395725168ffab1962655116880b74158de3e1e56) …
Run Code Online (Sandbox Code Playgroud)

git merge-conflict-resolution

5
推荐指数
1
解决办法
6448
查看次数

在git中查看对已删除文件的更改

假设当我从master 分支出来时,我的repo分支colors.txt上有一个master包含以下内容的文件:

red
green
blue
yellow
Run Code Online (Sandbox Code Playgroud)

然后my-branch,我分支到,在其中进行以下更改:

  1. 删除 colors.txt
  2. 添加red.txt以下内容:

    red
    
    Run Code Online (Sandbox Code Playgroud)
  3. 添加green.txt以下内容:

    green
    
    Run Code Online (Sandbox Code Playgroud)
  4. 添加blue.txt以下内容:

    blue
    
    Run Code Online (Sandbox Code Playgroud)
  5. 添加yellow.txt以下内容:

    yellow
    
    Run Code Online (Sandbox Code Playgroud)

现在,我需要对master进行一些更改,因此我想合并。但是,有人也更改colors.txt为:

red
green
blue
yellow
orange
purple
Run Code Online (Sandbox Code Playgroud)

在合并期间,我得到的唯一信息是删除了文件colors.txt,那么如何在master上看到对文件的更改,以便我可以适当地解决冲突(在这种情况下,通过添加orange.txtpurple.txt)?

git git-merge merge-conflict-resolution

5
推荐指数
1
解决办法
826
查看次数

解决仅某些文件的合并冲突,并承诺分支给其他团队解决他们的文件

简而言之,我们有一个仓库来托管不同职能团队的代码,即服务器端,移动,CI,自动化QA等。

现在,当我们尝试从支持分支的错误修复扩展到开发发布的分支时,出现了许多与不同团队/开发区域有关的冲突。由于我们没有一个人同时负责服务器端和移动端,因此很难解决一个人的冲突。

这里的问题是:是否可以通过某种方式仅解决一些冲突(例如服务器端),然后推送到中间分支,并让其他团队解决与其开发领域相关的冲突。只有在所有团队解决所有冲突之后,才最终合并中间分支。

也许我们在这里做错了。任何建议将不胜感激(除了将代码库分为单独的存储库,为此为时已晚)。

git git-pull merge-conflict-resolution

5
推荐指数
1
解决办法
2646
查看次数