Tir*_*esi 2 git merge branch github
我有一个关于git合并的问题.假设我的存储库中有两个分支(本地和远程):master和test.当我在测试分支上工作时,主分支由其他人更新.在终端,我写道:
git checkout master
git pull origin master
Run Code Online (Sandbox Code Playgroud)
这会用最近添加的东西更新我的主分支吗?然后,我完成了我在测试分支中所做的事情.
如果我去终端并写:
git checkout master
git merge test
git push origin master
Run Code Online (Sandbox Code Playgroud)
这将我的测试分支合并到我的主分支中,然后将更改推送到github(让我们假设没有冲突)?我的问题是:测试分支会发生什么?它是否与合并前的方式保持一致?或者测试和主分支是否相同?我现在应该这样做来更新测试分支吗?
git checkout test
git pull origin master
git push origin test
Run Code Online (Sandbox Code Playgroud)
提前致谢.
如果我去终端并写:
Run Code Online (Sandbox Code Playgroud)git checkout master git merge test git push origin master这将我的测试分支合并到我的主分支中,然后将更改推送到github(让我们假设没有冲突)?我的问题是:测试分支会发生什么?
什么都没有.
请记住,分支名称只是(单个)提交的名称.为了绘制它们,我喜欢将提交本身作为圆形o节点或大写单个字母绘制,当我们需要讨论特定提交时,用连接它们的线条:
...--o--o--o--o <-- master
\
o--o--o <-- test
Run Code Online (Sandbox Code Playgroud)
每个提交"指回"到其父提交 - 所以如果我们给每个提交一个字母名称,并绘制所有中间箭头,我们得到:
...<-A<-B<-C<-D <-- master
\
E<-F<-G <-- test
Run Code Online (Sandbox Code Playgroud)
分支的名称,master和test,实际上包含两个分支的末端的原始哈希标识.也就是说,如果你检查文件.git/refs/heads/master1,你会发现其中有一个丑陋的40个字符的哈希值,a139fc7...或其他内容.
实际上,master指向提交D,并test指向G.提交D点返回提交C,指向返回B,等等; 然后G返回F指向的点,返回E指向的点B(在这里用纯文本绘制箭头太麻烦了,因为一些好的箭头绘制字体只适用于某些机器).
当你在某个分支上并进行新的提交时,Git进行此提交的方式是它将新的commit与其父集写入当前的branch-tip,然后一旦新的commit在存储库中安全地重写,就会重写具有新提交ID 的分支名称文件.这使得分支名称指向新的提示.新ID无处可去,因此其他任何分支名称都不会发生任何变化.
合并提交有两个父母,所以当你git merge test和它工作时,你得到这个:
...--o--o--o--o---o <-- master
\ /
o--o--o <-- test
Run Code Online (Sandbox Code Playgroud)
注意,test根本没有移动,但是master- 并且新的合并提交指向两个不同的早期提交:旧的分支提示master和(未更改的)提示test.
1没有承诺将来会存在这个文件,或者留在这个位置或者有这种格式,但是现在,今天的Git版本通过2.10,你通常会有这个文件.
| 归档时间: |
|
| 查看次数: |
4089 次 |
| 最近记录: |