Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免多个冲突解决方案的最佳方法-在重设基础之前进行Git软重置?_Git_Rebase_Squash - Fatal编程技术网

避免多个冲突解决方案的最佳方法-在重设基础之前进行Git软重置?

避免多个冲突解决方案的最佳方法-在重设基础之前进行Git软重置?,git,rebase,squash,Git,Rebase,Squash,每当我有一个复杂的重基,因为我当前的功能分支有很多细节,并且因为我的功能分支有很多小提交,解析过程看起来既麻烦又低效 我一直在寻找方法,以便在重新基址发生之前基本上挤压。一种解决方案似乎是将sofr重置为最后一次合并,然后从多个提交中创建一个提交,然后再进行重新基础 但这个解决方案似乎有点老套。有没有更好的方法来处理这个问题 编辑: 我指的是必须通过pull请求完成合并,而我无法控制合并过程本身的情况。正如您在评论中所指出的,您可能需要git rebase-I工作流程 运行git-rebase-

每当我有一个复杂的重基,因为我当前的功能分支有很多细节,并且因为我的功能分支有很多小提交,解析过程看起来既麻烦又低效

我一直在寻找方法,以便在重新基址发生之前基本上挤压
。一种解决方案似乎是将sofr重置为最后一次合并,然后从多个提交中创建一个提交,然后再进行重新基础

但这个解决方案似乎有点老套。有没有更好的方法来处理这个问题

编辑:
我指的是必须通过pull请求完成合并,而我无法控制合并过程本身的情况。

正如您在评论中所指出的,您可能需要
git rebase-I
工作流程

运行
git-rebase-i
基本上告诉git:

  • 列出当前分支上位于
    之后的提交
  • 为每一次此类提交提交提交一份说明表,上面写着“挑选”
  • 编辑说明表后,请签出
    ,然后按照说明操作
  • 完成指令后,将当前分支指向最后一个复制(或挤压)提交
  • 因此,如果您有一系列微小的提交
    A1、A2、A3
    ,然后还有一些
    B1、B2
    ,例如:

    ...--o--o   <-- origin/feature
             \
              A1--A2--A3--B1--B2   <-- feature (HEAD)
    
    现在它会自动恢复列表,这取决于
    B
    提交的说明。它再次暂停,启动编辑器,以提交新的一体式
    B

              A--B   <-- HEAD [in progress / being rebuilt]
             /
    ...--o--o   <-- origin/feature
             \
              A1--A2--A3--B1--B2   <-- feature [being rebased]
    

    注意,如果存在冲突,Git暂停较大的停顿(实际上它完全退出了<代码> Git ReBase< /Case>命令,但后面留下了许多跟踪文件,<>代码> Git状态可以用来显示您仍然处于ReBASE的中间)。您必须修复冲突并运行

    git-rebase--continue
    来恢复操作。如果您只是在压缩一些提交,您不应该看到冲突,但是如果您正在安排一组分散的小冲突,即,最初不是将所有
    a
    组聚集在一起,而是分散在一起,您将它们聚集在一起,您可能需要解决一些小冲突


    在没有参数的情况下运行
    git-rebase-i
    会告诉git查找当前分支的“上游”设置。例如,如果
    feature
    具有
    origin/feature
    作为其上游,这相当于
    git-rebase-i origin/feature
    。您总是将选定/编辑的TODO列表提交复制到指定的提交之后,但默认值为“已设置的上游”

    请注意,您必须在运行
    git fetch
    之前执行所有这些操作,因为
    git fetch
    将更新
    origin/feature
    。如果您确实运行了
    git fetch
    ,并且它确实更新了
    origin/feature
    ,您现在可能有:

              o--o--o   <-- origin/feature
             /
    ...--o--*   [remembered in your reflogs as origin/feature@{1}]
             \
              A1--A2--A3--B1--B2   <-- feature (HEAD)
    

    (为了减少混乱,“狗”仍然在那里,只是不是
    --all
    部分。或者,您甚至可以使用
    git merge base
    来定位commit
    *
    ,但我们将把它留给另一个主题。:-)

    您可以使用
    git merge--squash功能

    git checkout master
    git merge --squash feature_branch
    
    这将从
    feature\u分支
    将所有提交压缩为一个提交,并将此提交添加到
    master

    例子 以下回购协议有一个分支
    功能/1
    ,该分支基于
    master
    。在
    feature/1
    中有一些提交,在
    master上有一个提交。之后,我在
    master
    上执行了一个
    git merge--squash功能/1
    ,它创建了commit
    5497776
    ,其中包含了对
    feature/1
    上的提交树所做的更改

    * 5497776 (HEAD, master) merge --squash feature/1
    * 46059c7 Change 2 on master
    | * b080e96 (feature/1) Change 3 on feature branch
    | * 6caf662 Change 2 on feature branch
    | * 69d9993 Change 1 on feature branch
    |/  
    * b39b078 Change 1
    

    顺便说一下,我明确挑起了合并冲突。您可以在合并过程中解决这些问题,然后进行更改以将冲突标记为已解决,并继续执行
    git commit

    软重置到上次合并,然后创建一个新的提交是最佳解决方案。这被严重否决了,但我认为这是不合理的,特别是在无法直接合并到主控的情况下,因为它必须通过拉式请求来完成。

    如果您的英语描述中还包含git命令,那么您的问题将更容易理解。一个简单的交互式重基(挤压所有内容)不会解决这个问题吗?你不会只在分支上发生冲突吧?这意味着该分支上的单个提交与同一分支上的其他提交发生冲突?是的,但挤压是否不仅发生在重基之后?为了避免多重冲突,我不是必须在重新调整基础之前挤压吗?否则,它仍将重播每次提交并要求我解决冲突。使用挤压的交互式重新基址应该保留初始提交的父级,除非您要求它也在某些内容上重新基址。如果您有大量提交,那么我猜您的
    重置--soft
    工作流比
    重新基址-I
    更快。在交互重基期间,您必须使用
    s
    (用于挤压)积极标记除一次提交之外的所有提交,这对于(比如)30次提交来说似乎很乏味。您可能希望在基于您的功能分支的新分支上执行
    软-重设基址
    ,这样您就可以轻松返回原始分支(
    reflog
    ,也可以,但这样更简单)。是的,但我需要在合并之前重设基址,所以这不起作用。也许我理解您的问题是错误的,但您注意到,您希望将所有提交压缩为一个,然后在
    master
    分支上对其重定基址。这正是
    merge--sqash
    所做的,即使我们正在使用
    merge
    命令。如您所见,最上面的提交
    5497776
    处于启用状态
    git log --decorate --oneline --graph origin/feature@{1}..
    
    git checkout master
    git merge --squash feature_branch
    
    * 5497776 (HEAD, master) merge --squash feature/1
    * 46059c7 Change 2 on master
    | * b080e96 (feature/1) Change 3 on feature branch
    | * 6caf662 Change 2 on feature branch
    | * 69d9993 Change 1 on feature branch
    |/  
    * b39b078 Change 1