我的项目中有一个主分支,用于从其他人那里获取更改.从那时起,我通常有几个主题分支,我正在工作.
我的问题是:有没有办法让我将新的更改添加到我的主人中,然后立即将所有主题分支重新绑定到该主题上?
情况就是这样:
        D--E topic1
       /
A--B--C  master
       \
        F--G topic2
我想用一个命令(H来自上游)完成这个任务:
               D'--E' topic1
              /
    A--B--C--H  master
              \
               F'--G' topic2
现在,我知道我可以通过将topic1和topic2重新设置为master来实现这一目标,我甚至可以编写一个脚本来自动执行此操作.但是,如果我有其他几个分支,创建新分支并经常删除其他分支并且我一直收到上游变更怎么办?
当手动完成时,这个操作(几个rebase)既累人又容易出错.
有没有更简单的方法?
谢谢!
假设我们有以下修订图:
A-X-Z--B
     \
      \-C
在B和C之前使用A.进一步假设我从上游重新绑定A,创建一个新的提交A*,然后将B和C重新绑定到A*上.生成的修订图如下:
A*-X'-Z'-B
 \
  \-X"-Z"-C
请注意,不再共享共享历史记录.有没有一种简单的方法可以解决这个问题,除了说,重新定义B然后明确地将C重新定位到Z'.换句话说,是否有更好的方法可以同时自动修改多个分支以保留共享历史记录?只是人为地在分割点放置一个标记,或者手动检查图形以找出修改C以保留共享历史记录的提交的sha1似乎有点尴尬,更不用说开放可能性了错误,特别是因为我必须在每次改变时都这样做,直到我检查上游分支的变化.
是否可以使用git中的所有子分支来重新分支一个分支?
我经常使用分支作为快速/可变标记来标记某些提交.
* master
*
* featureA-finished
*
* origin/master
现在我想rebase -i master进入origin/master,改变/重新提交提交featureA-finished^
之后git rebase -i --onto origin/master origin/master master,我基本上希望历史是:
* master
*
* featureA-finished
* (changed/reworded)
* origin/master
但我得到的是:
* master
*
* (same changeset as featureA-finished)
* (changed/reworded)
| * featureA-finished
|.* (original commit i wanted to edit)
* origin/master
有没有办法绕过它,还是我坚持在新的重新提交的作品上重新创建分支?
这是我目前的git树:
A - H (master)
|
\- B - C - D - E (feature)
           |
           \- F (new)
           |
           \- G (other)
而且我想重新设计侧支,这取决于H而不是A:
A - H (master)
    |
    \- B'- C'- D'- E'(feature)
               |
               \- F'(new)
               |
               \- G'(other)
看似简单的概念,很难自动完成.这已经在这里和这里被问过,但是提议的解决方案对我不起作用.
首先,正如前面所指出的那样,git branch当前分支存在时,输出并不容易解析(有一个*前置).但这不是一个塞子,在我的情况下,我可以轻松提供名称feature,new并other手动,或确保当前分支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 …特定(嵌入式)linux内核repo的维护者修改了一堆古老的提交以清理历史.因此,所有提交都有不同的SHA.
当我从这个重写的历史中获取git时,我需要将我的本地分支重新定位到本地跟踪分支入口点,该入口点对应于我自己的分支开始的本地树中的点.标准方案:
git rebase --onto SHAxx master ownbranch
(SHAxx对应于下图中遥控器/ origin/master的c2).
但是,当我有几个自己的分支在master中有一个单独的祖先时,我必须为每个分支应用一个rebase.相反,我希望将所有带有任何关联标记的分支转移到单个操作中的获取跟踪分支中的新入口点.
在图形上,获取之后的状态,在任何操作之前(简化 - 超越左侧是深度主历史记录):
    c1'--c2'--c3'--c4'--c5'--c6'--c7--c8--c9 remotes/origin/master
   /
--o--c1--c2--c3--c4--c5--c6 master
           \
            o---o---o---o---o  branch1
                     \
                      o---o  branch2 (etc.)
确切地说:当我自己的工作从主提交c2开始时,我希望将我自己的子树及其所有标签(如果存在)在一个动作中重新定义到遥控器/ origin/master的c2'(与主人的c2相比具有不同的SHA) ).
那时我可以完全删除master并使用我自己的工作制作遥控器/ origin /掌握新的master:
    c1--c2--c3--c4--c5--c6  (old master, not referenced anymore)
   /
--o--c1'--c2'--c3'--c4'--c5'--c6'--c7--c8--c9 master = remotes/origin/master
            \
             o---o---o---o---o  branch1
                      \
                       o---o  branch2 (etc.)
然后我将测试构建过程是否产生与之前相同的结果,如果确定:继续将合并的主更新递增(例如,每个子索引在2.6.nn中的步骤)到我自己的(特定于板)分支中.
或者是否有其他/更好的方法来实现相同的结果?
Rebasing包括其所有子项的分支都提供了一种可能的解决方案,但标签不会移动.
假设我有以下场景:
    o (master)   
   /       o--o (WIP1)
  /       /
 o--o--o--o--o--o (WIP2)
(X)       \
           o--o (WIP3)
是否有一个git命令创建一个新的分支,以便它包含分支X后的子树?我想执行"大规模的反思",我希望三个WIP分支在主人身上重新定位.
我知道我可以用一些Bash脚本来做到这一点,但我想知道如何使用git命令.
我正在使用一个理论上应该遵循Gitflow工作流程的存储库(参见Vincent Driessen 成功的git分支模型).但是,存储库上的初始提交是在develop分支上进行的,并且没有master可见的分支.它即将发布时间,我需要创建一个master分支,反映项目的生产就绪状态,应该从一开始就存在.请记住,develop分支有多个功能分支.存储库完全是本地的,尚未推送.
我的想法是创建一个孤儿分支master并将develop分支重新分支到它上面,但我不知道我该如何去做.
那么,我怎样才能创建master分支,就像它从一开始就创建一样?
更新:在我的情况下,第一次提交develop不是应该被认为适合生产的提交,因此使用它作为初始master提交将是不明智的.项目处于此状态的原因是因为它在决定使用Git时最初没有使用VCS.
假设我们有以下修订图:
A-B (master)
   \
    C (feature-a)
     \
      D (feature-b) [depends on feature a]
       \
        E (feature-c) [depends on feature b]
然后修改 master 以跟随 commit F。有没有简单的方法来重订E到F(主),以便分支机构feature-a,feature-b以及feature-c所有最终组成如下:
A-B-F (master)
     \
      C' (feature-a)
       \
        D' (feature-b)
         \
          E' (feature-c)
?
在现实世界中,每个功能之间显然有多个补丁,因此手动重新附加中间的分支以重新定位历史是乏味且容易出错的工作。我知道,我可以变基E到E'一个简单git checkout feature-c && git rebase master但树叶树枝feature-a和feature-b指向的提交C和D,而不是C'和D'。Rebase 应该拥有移动所有分支的所有信息,对吗?
在处理我的功能分支时,我不断地对它们进行重新排序和压缩,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) …