Git - 这些过程是否相等?
Git - are these processes equal?
想请教一下这两种方式有什么区别
起始情况是:
master branch
|
E F - test branch
| |
D C
| /
B
|
A
第一种方法:
git checkout test
git merge master
git rebase -i master
git checkout master
git merge test
第二种方法:
git checkout test
git rebase -i master
git checkout master
git merge test
我想做的是将 C 和 F 压缩到一个提交中,然后将其 rebase 到 master 上,这样它在 master 上显示为一个新提交。
但是,我在实验中使用了第一种方法(通常使用第二种方法),但结果很糟糕。使用第一种方法后,master 上的一些更改丢失了。
所以我的问题是有什么区别?如果我在这两种方法之后都正确,最终图表应该如下所示:
master branch
|
G = C + F + old master
|
E
|
D
|
B
|
A
将 master 合并到 test 和 rebase 是没有意义的。因为合并时测试中的更改已经存在。
要达到你想要的效果,你需要使用 --squash
- 结帐测试
- 合并或变基 master(无论哪个)
- 结帐大师
- git合并测试--squash
- 提交您想要的消息。
--squash 将您在测试中的所有提交压缩为一个,因此在您的历史记录中它看起来像是一个提交。
如果不确切知道您在交互式变基过程中做了什么,很难说出这两种方法之间的区别。
但是在第一种方法中,合并将向 test
分支添加一个新的提交(我们称之为 M
)。所以在合并之后,回购将看起来像这样:
master branch
|
| M - test branch
|/ |
E F
| |
D C
| /
B
|
A
(注意master
不变。)
现在,当您进行交互式变基时,git 意识到只有 C
和 F
(而不是合并提交,M
)需要应用于master
。因此,在不对变基文件中的 command/commit 列表进行任何更改的情况下,您最终会得到:
master branch
|
E --- C --- F - test branch
|
D
|
B
|
A
(再次注意 master
没有改变。)
在交互式变基期间,如果您将 pick
更改为 squash
/fix
以提交 F
,它将合并到 C
。所以你最终会得到:
master branch
|
E --- C+F - test branch
|
D
|
B
|
A
最后,在将 test
合并到 master
之后,您最终得到:
E --- C+F - test / master branch
|
D
|
B
|
A
这两种方法的区别在于第一种方法在 test
分支上创建合并提交,然后在 test
重新基于 master
.[=32= 时消失]
想请教一下这两种方式有什么区别
起始情况是:
master branch
|
E F - test branch
| |
D C
| /
B
|
A
第一种方法:
git checkout test
git merge master
git rebase -i master
git checkout master
git merge test
第二种方法:
git checkout test
git rebase -i master
git checkout master
git merge test
我想做的是将 C 和 F 压缩到一个提交中,然后将其 rebase 到 master 上,这样它在 master 上显示为一个新提交。
但是,我在实验中使用了第一种方法(通常使用第二种方法),但结果很糟糕。使用第一种方法后,master 上的一些更改丢失了。
所以我的问题是有什么区别?如果我在这两种方法之后都正确,最终图表应该如下所示:
master branch
|
G = C + F + old master
|
E
|
D
|
B
|
A
将 master 合并到 test 和 rebase 是没有意义的。因为合并时测试中的更改已经存在。
要达到你想要的效果,你需要使用 --squash
- 结帐测试
- 合并或变基 master(无论哪个)
- 结帐大师
- git合并测试--squash
- 提交您想要的消息。
--squash 将您在测试中的所有提交压缩为一个,因此在您的历史记录中它看起来像是一个提交。
如果不确切知道您在交互式变基过程中做了什么,很难说出这两种方法之间的区别。
但是在第一种方法中,合并将向 test
分支添加一个新的提交(我们称之为 M
)。所以在合并之后,回购将看起来像这样:
master branch
|
| M - test branch
|/ |
E F
| |
D C
| /
B
|
A
(注意master
不变。)
现在,当您进行交互式变基时,git 意识到只有 C
和 F
(而不是合并提交,M
)需要应用于master
。因此,在不对变基文件中的 command/commit 列表进行任何更改的情况下,您最终会得到:
master branch
|
E --- C --- F - test branch
|
D
|
B
|
A
(再次注意 master
没有改变。)
在交互式变基期间,如果您将 pick
更改为 squash
/fix
以提交 F
,它将合并到 C
。所以你最终会得到:
master branch
|
E --- C+F - test branch
|
D
|
B
|
A
最后,在将 test
合并到 master
之后,您最终得到:
E --- C+F - test / master branch
|
D
|
B
|
A
这两种方法的区别在于第一种方法在 test
分支上创建合并提交,然后在 test
重新基于 master
.[=32= 时消失]