相关疑难解决方法(0)

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存储库拓扑:

A-B-F (master)
   \   D (feature-a)
    \ /
     C (feature)
      \
       E (feature-b)
Run Code Online (Sandbox Code Playgroud)

通过重新feature分支我希望改变整个子树(包括子分支):

$ git rebase feature master

A-B-F (master)
     \   D (feature-a)
      \ /
       C (feature)
        \
         E (feature-b)
Run Code Online (Sandbox Code Playgroud)

但是,这是实际结果:

      C' (feature)
     /
A-B-F (master)
   \   D (feature-a)
    \ /
     C
      \
       E (feature-b)
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过执行以下方法手动修复它:

$ git rebase --onto feature C feature-a
$ git rebase --onto feature C feature-b
Run Code Online (Sandbox Code Playgroud)

但有没有办法自动重组分支,包括其所有子/后代?

git version-control branch rebase git-rebase

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

Git:如何一次变换多个分支(使用相同的基本提交)?

我的项目中有一个主分支,用于从其他人那里获取更改.从那时起,我通常有几个主题分支,我正在工作.

我的问题是:有没有办法让我将新的更改添加到我的主人中,然后立即将所有主题分支重新绑定到该主题上?

情况就是这样:

        D--E topic1
       /
A--B--C  master
       \
        F--G topic2
Run Code Online (Sandbox Code Playgroud)

我想用一个命令(H来自上游)完成这个任务:

               D'--E' topic1
              /
    A--B--C--H  master
              \
               F'--G' topic2

现在,我知道我可以通过将topic1和topic2重新设置为master来实现这一目标,我甚至可以编写一个脚本来自动执行此操作.但是,如果我有其他几个分支,创建新分支并经常删除其他分支并且我一直收到上游变更怎么办?

当手动完成时,这个操作(几个rebase)既累人又容易出错.

有没有更简单的方法?

谢谢!

git rebase git-rebase

57
推荐指数
2
解决办法
2万
查看次数

git rebase分支与所有子分支

是否可以使用git中的所有子分支来重新分支一个分支?

我经常使用分支作为快速/可变标记来标记某些提交.

* master
*
* featureA-finished
*
* origin/master
Run Code Online (Sandbox Code Playgroud)

现在我想rebase -i master进入origin/master,改变/重新提交提交featureA-finished^

之后git rebase -i --onto origin/master origin/master master,我基本上希望历史是:

* master
*
* featureA-finished
* (changed/reworded)
* origin/master
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

* master
*
* (same changeset as featureA-finished)
* (changed/reworded)
| * featureA-finished
|.* (original commit i wanted to edit)
* origin/master
Run Code Online (Sandbox Code Playgroud)

有没有办法绕过它,还是我坚持在新的重新提交的作品上重新创建分支?

git branch rebase

17
推荐指数
2
解决办法
3321
查看次数

重新绑定树(提交/分支及其所有子项)

这是我目前的git树:

A - H (master)
|
\- B - C - D - E (feature)
           |
           \- F (new)
           |
           \- G (other)
Run Code Online (Sandbox Code Playgroud)

而且我想重新设计侧支,这取决于H而不是A:

A - H (master)
    |
    \- B'- C'- D'- E'(feature)
               |
               \- F'(new)
               |
               \- G'(other)
Run Code Online (Sandbox Code Playgroud)

看似简单的概念,很难自动完成.这已经在这里这里被问,但是提议的解决方案对我不起作用.

首先,正如前面所指出的那样,git branch当前分支存在时,输出并不容易解析(有一个*前置).但这不是一个塞子,在我的情况下,我可以轻松提供名称feature,newother手动,或确保当前分支master.

然后我尝试了这些命令:

git rebase --committer-date-is-author-date --preserve-merges --onto master feature^ feature
git rebase --committer-date-is-author-date --preserve-merges --onto master …
Run Code Online (Sandbox Code Playgroud)

git

16
推荐指数
2
解决办法
4312
查看次数

重新依赖主题分支

我在git中使用了很多本地主题分支,有时最终导致主题分支之间的依赖关系导致rebase问题.例如,结构如下:

master ---> featureA ---> featureB
                     \--> featureC
Run Code Online (Sandbox Code Playgroud)

如果master变化和我(和解析)冲突时重订基featureA,然后后来重订featureBfeatureA触发同样的冲突(有时是令人振奋的新的为好),因为它试图从重新应用补丁featureA分支.假设之间的实际的补丁featureA,并featureB会干净的应用,如果精挑细选,有没有在这种情况下做底垫,大约有樱桃采摘所有提交的之间的相同效果的方式featureAfeatureB

git rebase

15
推荐指数
2
解决办法
2331
查看次数

可以在git filter-branch和rebase之后自动移动标签吗?

编辑问题归结为"也可以git rebase指示重新标记标签吗?" 但对原始问题的回答也会有所帮助.


如何将过去添加到git存储库?我遵循了这些指示.< edit >然后我重新加入以包含仅在快照中的文件,请参见此处.< / edit >由于历史记录被重写(由git filter-branchgit rebase或两者?)所有标签仍然在原始时间线上*我不知何故喜欢将它们移动到新的.我想我用标签做了所有提交消息,所以我可以尝试编写一个使用它们的脚本,但更通用的git move-tags <from> <to>会更好.

那么,有没有办法解决"在新时间轴之后N提交的提交,以便标记旧时间轴上的第N次提交"?除了明显的手动重新定位之外的任何其他解决方案也会很棒.

(请随意将那个可怕的长句纠正为简单的英语......)

*)嘿,git解决了祖父悖论!

tags git history git-rebase git-filter-branch

14
推荐指数
1
解决办法
5357
查看次数

交互式变基后保留中间分支指针

在处理我的功能分支时,我不断地对它们进行重新排序和压缩,git rebase -i以保持我的历史记录的更清晰版本。有时我会开发多个相互依赖的功能(我团队的规则是使 PR 尽可能小,因此较大功能的一个原子块通常会成为其自己的功能分支)。由于此工作流程,我通常会在重新设置分支基础后手动重新指向分支。有没有办法自动将这些指针移动到它们应该着陆的位置?

例如,在此图中:

5bab4818e (HEAD -> cell-toggle-comp) Added cell-toggle component
d55cab881 (toggle-comp) Toggle: Added honey traceability comment
4240f0ac3 Made Toggle a named export and replaced references to obsolete <ui> alias
90a0b2452 Refactored Switch instances to toggle
e15c758a0 Updated Switch component to latest specs (and renamed things to match design lingo)
d53090e93 (fix-switch-reference) Fixed Switch reference that was being imported from React Native instead of src/components
4a214cb72 (cell-text-selection-comp) Added CellTextSelection ui component
cef3b5716 (origin/master, origin/HEAD, master) …
Run Code Online (Sandbox Code Playgroud)

git rebase git-rebase git-interactive-rebase

5
推荐指数
0
解决办法
115
查看次数