相关疑难解决方法(0)

为什么我要一遍又一遍地解决同样的冲突?

当我这样做时git rebase branch1,我branch1-local会发生冲突.我解决了冲突,做了git add <conflicted-add>然后git rebase --continue就像git要求我做的那样.之后,将应用新的提交.出现了新的冲突.但是再次发生同样的冲突!同一个文件!我再这样做,git addgit rebase --continue,然后这一切再次重复,直到我重复这一过程,每次提交被重建基础上.

为什么rebase让我一遍又一遍地重做同样的冲突解决方案?

git version-control git-rebase

42
推荐指数
2
解决办法
9048
查看次数

当git重新提交很多提交时如何防止大量的git冲突?

故事:在一个项目的中间,我的同事从大师那里创建了一个新的分支,并开始进行繁重的重新分解工作.我从master创建了我的分支,并开始在页面上做新的东西.我们经常提交,但只有我可以修改代码才能掌握(因为同事的更改太重,无法从主服务器部署).不幸的是,我们的一些工作依赖于相同的文件.因此,经过几天的工作,她终于想要改变主人的变化,她有很多git冲突.

my_branch    #---#----#-#-------#----#--#-----#---#----#----#
            /     \              \   \   \              \    \
master     *-------*--------------*---*---*--------------*----*----*
            \                                                     /
her branch   #------#-------#-----------#-----------#------------#
Run Code Online (Sandbox Code Playgroud)

问题1是:当我们处理相同的文件时,如何防止大量的git冲突?(或者在这种情况下最佳做法是什么?)

但这不是我们问题的结束,...绝对正确她试图从主人到她的分支进行变基(为了进行我所做的更改),所以提交映射应该看起来像这样

my_branch    #---#----#-#-------#----#--#-----#---#----#----#
            /     \              \   \   \              \    \
master     *-------*--------------*---*---*--------------*----*----*
            \                   \            \                    /
her branch   #------#-------#----*------#-----*-----#------------#
Run Code Online (Sandbox Code Playgroud)

这就是困扰我们的事情.在这些改变期间,她正在解决这些冲突.但是git不记得她关于冲突修复的决定,所以当她从主人她的分支做另一个git rebase时,她不得不再次修复同样的git冲突,以至于她在以前的rebase 中修复了.

问题2是:如何告诉git在分支git rebase之后记住git冲突修复,那么在下一个rebase之后我们不必再次修复相同的冲突了?

git rebase git-rebase

39
推荐指数
3
解决办法
1万
查看次数

Git:重新定义冲突的合并提交

在完成一个主题分支的工作后,我将主题分支合并为master,如下所示:

          o---*---o---o topic
         /             \
o---o---o---*---o---o---+ master
Run Code Online (Sandbox Code Playgroud)

标有"*"的提交修改了相同的代码,因此合并导致合并提交中解决的合并冲突(标记为"+").

当我合并并解决冲突时,我的同事将新的提交推送到主人(标记为'n'),导致以下历史记录:

          o---*---o---o topic
         /             \
o---o---o---*---o---o---+ master
                    \
                     n---n origin/master
Run Code Online (Sandbox Code Playgroud)

现在,推送我的本地主分支当然会导致错误,因为它没有快进,所以我有两个选择:

  1. 扔掉我的工作,将master重置为origin/master并重做合并.我想避免这种情况,因为我必须重新解决冲突.

  2. Rebase master到origin/master并推送.这就是我的问题:执行此rebase(即使使用-p开关)也不能顺利运行,合并提交再次显示相同的冲突,即使新提交('n')没有更改主题分支触及的任何内容.因此,我必须在rebase期间再次解决冲突,并且与选项1具有相同的结果.

我想要实现的是重新定义合并提交'+'而不必再次解决冲突:

          o---*---o---o-------- topic
         /                     \
o---o---o---*---o---o---n---n---+ master & origin/master
Run Code Online (Sandbox Code Playgroud)

编辑:

启用了rerere开关,但似乎没有任何帮助; 除了将config.rerere设置为true以解决我的问题,我还需要做什么吗?

编辑2:

将merge-commit('+')合并到origin/master也可以工作(如注释和答案中所提出的那样),但是会导致一种丑陋的历史记录,我只想通过一次合并提交来避免这种历史记录.

git merge conflict rebase

8
推荐指数
1
解决办法
902
查看次数

什么是git-rerere以及它是如何工作的?

据我所知,通过保存冲突解决信息来实现项目同步非常有用,但我并不完全清楚如何使用和配置它.

我想配置我的持续集成(CI)环境.建议这样做吗?

请不要在另一个问题上标记副本:启用git rerere是否有任何缺点?.因为我的怀疑与"因此是否有任何不利因素"无关?它会导致哪些潜在的问题不会发生呢?

git version-control continuous-integration git-rerere

8
推荐指数
2
解决办法
2301
查看次数

通过本地存在的非平凡合并提交重新进行上游更改

作为php-src的开发人员,我最近发现自己处于以下情况:

A   B   C
o---o---o         version1
         \
o---o-----o---o   master
x   y     D   E

o---o---o         upstream/master
x   y   z
Run Code Online (Sandbox Code Playgroud)

所以当我这样做时,我会git push --dry-run upstream master version1得到典型的:

! [rejected]        master -> master (fetch first)
Run Code Online (Sandbox Code Playgroud)

我的自然反应是重新绑定受影响的分支并保留合并提交:

git fetch upstream
git rebase -p upstream/master
Run Code Online (Sandbox Code Playgroud)

重要的是要注意原始的合并提交并不简单,因为版本分支和主服务器之间有很多变化; 它需要努力来解决这样的合并.

执行上述rebase操作会导致合并冲突,我必须再次解决它; 这几乎与我已经完成的工作完全相同.

有一个更好的方法吗?或者我忘记了一个明显的rebase选项?

git push git-rebase merge-conflict-resolution

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

我如何审核git rerere的决议?

背景

我目前正在解决与启用git rerere的合并冲突.git status显示一条未合并的路径.当我查看文件时,没有<<<<<<< HEAD>>>>>>> <SHA>标记识别冲突,这告诉我rerere已经完成了它的工作并根据我过去的方式解决了冲突.

我想确认rerere的决议是正确的.

我正在进行的合并过程非常复杂,涉及到Linux内核的多个遥控器.我昨天做了几个遥控器的测试合并,目的是识别冲突,通知维护者,然后丢弃最终的(肯定已损坏的)内核.在这样做的时候,我做了几个不小心的冲突解决方案,只是为了继续下一个遥控器,并且git rerere forget <pathspec>在我完成之后调用了所有冲突的路径,包括我正在处理的那个.因为我告诉rerere忘记这条路径,我不知道为什么它在这次运行中解决了任何问题,我担心它应用了我昨天做的修复,当时我不在乎结果是否正确.

问题

是否有任何方法可以查看在已经应用解决方案后重新解决的冲突?

我想避免重新启动合并,因为这是一个漫长的过程,我们还没有完全自动化.此外,因为我试图告诉rerere昨天忘记了这条路,但它今天仍然应用了一个解决方案,我想如果我不知道为什么git rerere forget <pathspec>先失败,我会最终处于相同的位置.

相关问题
撤消在rebase中完成的git rerere解决 方案< - 解决方案需要重新启动合并
启用git rerere是否有任何缺点?< - 只讨论git rerere forget <pathspec>

跟进注意/问题
我刚尝试输入git rerere forget没有pathspec,我知道这是不赞成的,但如果我理解正确,应该让rerere忘记所有的决议.我重新合并,它仍然对文件应用了一个解决方案.我也完全禁用了rerere并且第三次运行合并,所以我可以看到冲突,而rerere确实应用了我昨天所做的半心半意的决议.为什么forget不正确地丢弃我不想重用的解决方案?

git git-merge git-rerere

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

将分支合并并变基到主分支而不发生冲突

这是我们当前的功能分支工作流程 ->

  • 从 master 创建一个新的功能分支。
  • 将工作提交到功能分支。
  • 当我们努力保持最新状态时,将 master 合并到功能分支中。
  • 如果有冲突就解决。这会在功能分支中创建“将 master 合并到 Feature_Branch”提交。
  • 当功能分支完成后,将功能分支合并回主分支。

问题:

如果我们将功能分支合并到主分支中,那么就没有问题。如果我们进行定期合并,然后重新建立基础,我们必须再次解决所有冲突。在具有 100 个提交的功能分支上,这是一个很大的痛苦。

有没有办法将功能分支合并回master并rebase而不发生冲突?

git

4
推荐指数
1
解决办法
6814
查看次数