我有以下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)
但有没有办法自动重组分支,包括其所有子/后代?
假设我们有以下修订图:
A-X-Z--B
\
\-C
Run Code Online (Sandbox Code Playgroud)
在B和C之前使用A.进一步假设我从上游重新绑定A,创建一个新的提交A*,然后将B和C重新绑定到A*上.生成的修订图如下:
A*-X'-Z'-B
\
\-X"-Z"-C
Run Code Online (Sandbox Code Playgroud)
请注意,不再共享共享历史记录.有没有一种简单的方法可以解决这个问题,除了说,重新定义B然后明确地将C重新定位到Z'.换句话说,是否有更好的方法可以同时自动修改多个分支以保留共享历史记录?只是人为地在分割点放置一个标记,或者手动检查图形以找出修改C以保留共享历史记录的提交的sha1似乎有点尴尬,更不用说开放可能性了错误,特别是因为我必须在每次改变时都这样做,直到我检查上游分支的变化.
因此,我正在一个有时构建时间较长的项目中进行构建,并且该构建经常被破坏。如果我有一个较旧的分支并正在进行一些工作(已提交,但基于一个较老的父级),则运行会git checkout oldbranch更改工作目录以表示所有旧代码,这使我需要再次运行完整版本。
但是,通常我只修改了一个或两个文件,其余的不需要重置。我想做的是将该分支重新设置为当前的主头,并保留对文件的那些更改。
基本上,如果a.rs和b.rs已被修改,那么我需要一种使这些更改基于当前文件头的方法,而不涉及除这两个文件以外的任何文件。
有这样做的git-ish方式吗?目前,我正在使用补丁文件来执行此操作。
在处理我的功能分支时,我不断地对它们进行重新排序和压缩,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)