相关疑难解决方法(0)

漂亮的git分支图

我已经看到一些书籍和文章有一些非常漂亮的git分支和提交图.如何制作git历史的高质量可打印图像?

git git-log

1290
推荐指数
33
解决办法
65万
查看次数

git的"rebase --preserve-merges"到底是做什么的(为什么?)

Git的命令文档rebase非常简短:

--preserve-merges
    Instead of ignoring merges, try to recreate them.

This uses the --interactive machinery internally, but combining it
with the --interactive option explicitly is generally not a good idea
unless you know what you are doing (see BUGS below).
Run Code Online (Sandbox Code Playgroud)

那么当你使用时会发生什么--preserve-merges?它与默认行为(没有该标志)有何不同?"重新创建"合并等意味着什么?

git git-rebase

328
推荐指数
3
解决办法
8万
查看次数

为什么在使用git rebase时会再次出现相同的冲突?

我已经在SO上阅读了关于git merge和git rebase的相关问题,但我仍然无法完全理解幕后发生的事情.

这是我们的分支情况:

MASTER------------------------
        \        \
         \        \----Feature B---
          \                        \
           \-----Feature A----------\---Feature A+B
Run Code Online (Sandbox Code Playgroud)

我们有2个功能分支,它们来自不同时间的master,现在我们想要组合2个分支.我们希望遵循这种first rebase then merge做法,但是当我们将功能A重新命名为功能B时,我们会遇到冲突.这是预期的,因为两个功能(和主人)在相同的区域都有变化.但奇怪的是,同样的冲突在此之后不断出现git rebase --continue.这让我们疯狂,所以我们最终中止了rebase,并使用了git merge.事实证明,冲突实际上很容易解决.

我的问题是双重的:

  1. git rebase适合我们situtation?或者,只有少数(1或2)变化才能改变?
  2. 引擎相同的冲突会一次又一次地重现?我的理解是一次rebase解决一个冲突,但通过比较哪个提交到什么?

关于SO的相关帖子:

git merge git-merge git-rebase

36
推荐指数
1
解决办法
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 ×4

git-rebase ×2

merge ×2

conflict ×1

git-log ×1

git-merge ×1

rebase ×1