gpt4 book ai didi

Git merge - merge 后的分支会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 14:31:48 27 4
gpt4 key购买 nike

我有一个关于 git merge 的问题。假设我的存储库中有两个分支(本地和远程):master 和 test。当我在测试分支上工作时,主分支被其他人更新了。在终端中,我写:

git checkout master
git pull origin master

这会用最近添加的内容更新我的 master 分支吗?然后,我完成了我在测试分支中所做的事情。
如果我去终端写:

git checkout master
git merge test
git push origin master

这会将我的测试分支 merge 到我的主分支中,然后将更改推送到 github 上(假设没有冲突)?我的问题是:测试分支会发生什么?它是否保持与 merge 前相同的方式?还是 test 和 master 分支都变得一样了?我现在应该这样做来更新测试分支吗?

git checkout test
git pull origin master
git push origin test

提前致谢。

最佳答案

If I go to the terminal and write:

git checkout master
git merge test
git push origin master

This merges my test branch into my master branch and then pushes the changes to github right (let's assume there are no conflicts)? My question is: what happens to the test branch?

什么都没有。

请记住,分支名称 只是(单个)提交的名称。为了绘制它们,我喜欢将提交本身绘制为圆形 o 节点,或者当我们需要谈论特定提交时使用大写单个字母,并用线条连接它们:

...--o--o--o--o      <-- master
\
o--o--o <-- test

每个提交都“指向”其父提交——所以如果我们给每个提交一个字母名称,并绘制所有中间箭头,我们得到:

...<-A<-B<-C<-D      <-- master
\
E<-F<-G <-- test

分支名称mastertest 实际上包含两个分支提示的原始哈希ID。也就是说,如果您检查文件 .git/refs/heads/master1,您会发现其中一个丑陋的 40 字符散列,a139fc7。 .. 或其他内容,在其中。

实际上,master 指向提交D,而test 指向G。提交 D 指向提交 C,后者又指向 B,依此类推;并提交 G 指向 FF 指向 EE 指向 B(这太在这里用纯文本绘制箭头很棘手,因为一些好的箭头绘制字体只适用于某些机器)。

当您在某个分支上并进行 提交时,Git 进行此提交的方式是将其父级设置为当前分支提示的新提交写入,然后一次新提交安全地存储在存储库中,使用新提交的 ID 重写分支 name 文件。这使得分支名称指向新提示。新 ID 无处可去,因此 other 分支名称没有任何变化。

一个 merge 提交有两个 parent ,所以当你git merge test 并且它工作时,你会得到这个:

...--o--o--o--o---o  <-- master
\ /
o--o--o <-- test

请注意 test 根本没有移动,但是 master 移动了——并且新的 merge 提交指向两个不同的早期提交:旧的分支提示 master,以及 test 的(未更改的)提示。


1我们不保证这个文件将来会存在,或者保留在这个位置或者有这个格式,但现在,从今天的 Git 版本到 2.10,你通常会有那个文件.

关于Git merge - merge 后的分支会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39848521/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com