Gui*_*ara 19 git git-merge squash
我正在尝试使用git merge --squash和--no-ff参数,但是git不允许.有人有任何消化帮助我吗?
我不能使用快进合并,我需要使用--squash参数来分组在另一个分支中进行的大量提交.
谢谢!
R0M*_*RMY 21
它可能不会让你,因为这样的命令没有意义.
--squash
说的文件(强调我的):
--squash
生成工作树和索引状态,就好像发生了真正的合并(合并信息除外),但实际上没有提交或移动HEAD,也没有记录GIT_DIR/MERGE_HEAD以使下一个git commit命令创建合并提交.这允许您在当前分支之上创建单个提交,其效果与合并另一个分支(或章鱼的情况下更多)相同.
该--no-ff
标志的作用:
即使合并解析为快进,也要创建合并提交.
你本质上是要求git进行提交而不是同时进行提交.
如果要保留分支的所有历史记录,则应使用该--no-ff
标志.Commit d是一个包含两个父项a和c的合并提交.
a ------ d -- ....
\ /
b -- c
Run Code Online (Sandbox Code Playgroud)
如果您希望将该分支上的所有提交视为单个工作单元,请使用--squash
.Commit d是一个常规提交,它包含来自提交b和c的所有更改,但只有一个父项,a.
a ---- d -- ....
\
b -- c
Run Code Online (Sandbox Code Playgroud)
怎么--squash
办? - 它将所有提交压缩在一起,创建索引状态,以便您可以将分支中的所有更改作为单个提交提交.您的代码更改将像您合并分支,但您的历史将像您做了一个巨大的提交.
怎么--no-ff
办? - 它说,即使分支可以快进,也可以将其视为合并并创建合并提交.
因此,--squash
是关于获得没有合并痕迹的历史.--no-ff
是关于强制合并的历史记录,即使它被转发.因此,它们是互斥的,不能一起使用.
我认为这个问题来自误解fast-forward
.它不是合并; 它只是将分支直接转发到合并分支的另一个提交,因为提交是直接在前一个分支的提交中进行的.没有快进会停止此行为并强制在顶部进行合并提交.当你在挤压时,如果你要求它不要快进,那就无所谓了.这两种方式都是一样的.
归档时间: |
|
查看次数: |
6267 次 |
最近记录: |