![]() |
1
1
您的问题揭示了很多关于Git分支是什么以及合并如何在Git中工作的困惑。(这并不奇怪,因为很多关于Git的介绍都是……不好,而且Git有很多根本的复杂性,这是不能忽略的。)
我建议任何新加入Git的人
避免
你提到:
你也可以跑步
事实上,在bash提示符中,您的bash shell和git命令之间有一组巧妙的交互,每次要打印提示时,bash都会检查git。如果Git报告您完全在一个存储库中,那么shell将在提示中包含存储库的当前分支名称。如果你正处于这些冲突合并的中间,你会
但这又引出了一个问题:
What exactly do we mean by "branch"?
单击该问题阅读更多信息。这个词
分支
可以引用
分支机构名称
喜欢
这个
另一方面,
让我们花点时间检查提交
也许在Git中最重要的是提交。在Git中,任何提交的真实名称都是它的散列ID,一些丑陋的十六进制数字字符串,显然是随机的,基本上对人类没有用处,但每个字符串对于特定提交都是唯一的,并对其进行标识。就是这样
吉特
找到它:你告诉它找一些难看的大杂烩,
每个提交都存储其ID 以前的 或 起源 承诺。这意味着如果你告诉Git 最新的 提交,Git可以使用该提交来回顾第二次最新提交。第二个最新提交包含第三个最新提交的ID,依此类推。如果提交ID只是简单的大写字母,我们可以这样绘制它们:
在哪里?
这些承诺
是
历史;所有Git需要知道的是
哪一个是最新的
. 这就是分支机构的名称
这意味着当您添加
新的
致力于你的
现在
涉及多个Git存储库你从这个开始:
不管这是不是好的做法,这里有一种感觉,名字,
你们所有人
分享
但是,有一些
承诺
. 你们都是从克隆一个存储库开始的,这个存储库有一些提交集,然后你们就得到了它们。从那以后,你可能又增加了一些。因此,对于每个提交哈希ID,您的Git存储库
有
如果您的Git存储库
不
承诺吧,就是这样
什么
接收器现在有点问题,因为只有哈希ID标识的提交对人类来说是相当无用的。接受者需要给 最后的 提交 名称 .
当你跑步时
一
在这里,
提取,然后合并
假设你们两个都是从一系列以
现在是了
你的
工作到
结合
你的工作,不管你做了什么
在Git中组合的最简单方法是
合并操作由两部分组成。第一个是我喜欢称之为
合并为动词
或
要合并:
结合工作。现在,从上面的图中可以清楚地看到,你们两个的最后一个共同点是提交
Git现在运行
你现在可以把你所做的和他们所做的进行比较。Git做同样的事情是为了将您的更改与它们的更改结合起来。 如果你改变的事情“离”这些事情足够远 他们 已更改或在不同的文件中,Git将成功合并它们。更准确地说,Git会 认为 它成功地结合了它们。(这取决于你,这个比Git聪明的人,来决定真正的成功。)但是如果你改变了 相同的源代码行 如果他们改变了,Git将无法合并两个不同的改变。Git会将它的隐喻之手抛向空中,宣布 合并冲突 停下来做 你 收拾残局。
这是您看到合并状态的时候。
Git已停止
在中间
冲突合并。这个
提交图形
看起来仍然像上面的图片,两个“分支”(在匕首的意义上)从一个共同的承诺中分叉出来;它们还没有聚在一起。现在你的工作就是把这些乱七八糟的东西编辑成合理的东西,快跑
不过,如果Git认为它可以自己进行合并,
这个提交即结束即合并,无论Git是单独完成还是停止并让您清理和完成它,都将 绑在一起 双图匕首:
新合并提交
进行此合并提交将结束合并过程,以便您现在回到正常的非合并状态。但是,现在您有了一个新的提交,显然,其他人没有:您有合并提交
(现在可以使用
二 在内部,Git使用了大量的快捷方式来避免大量的工作(如果可能的话),但最终, 结合 部分需要计算差异。 我也在这里遗漏了很多关于 工艺工程。这主要是当你必须清理失败合并的混乱时:合并发生在你的 指数 (也叫你的 集结区 )以及在你的 工作树 (你在哪里工作)。提交、索引和工作树之间的分离更加重要,因为您开始在Git中执行更高级的操作。 当合并不是合并时
不是全部
现在你跑
注意
什么时候?
您可以重新设置基片而不是合并我不会在这里详细讨论,但不是 合并 你和别人一起工作,你可以 重碱 你的工作 在 别人的工作。假设我们从需要组合图表的相同工作开始:
我们可以用git代替合并。
复制
承诺
现在我们有了这些拷贝,我们有了Git“剥标签”
如果你现在选择 放弃 原件,因为您不再需要它们,我们可以完全删除问号标签,并理顺图表中的一个扭结:
现在你好像写下了你的两个承诺
之后
提取承诺
如果在合并时发生合并冲突,那么在重新组合时几乎肯定会发生合并冲突,并且 可以 得到许多重复的冲突(取决于你做了多少提交),并且他们 可以 比合并更难解决。但最终,您将避免合并提交本身,当您查看所有开发的历史时,它将 似乎 更简单,即使它实际上更复杂。
是否这样做取决于你。但如果你真的选择去做,你就去做。
而不是
合并。记住,REBASE的工作方式是
复制
一些提交;注意只复制那些尚未发布的提交(使用
最后一个注意事项
|
![]() |
2
1
做
这个
|
![]() |
3
0
回答您的问题:在
|
![]() |
4
0
它不会创建新的分支。第二个用户(例如任何用户)将拥有master的本地副本。通过运行git pull,远程更改是
最好的处理方法是,对于第二个用户来说:
这将拉取远程更改并在本地提交的基础上应用它们,然后可以推送到远程主机。 |
![]() |
5
0
是的,Git正在创建所谓的“ 合并提交”。
如果你想避免这个,你应该
但你应该记住
|
![]() |
charleslcso · 从开源克隆并推送到我的GitHub[重复] 1 年前 |
|
Itachi · 无法为python项目安装“DAWG”包 1 年前 |
![]() |
Igor · git重置已删除目录上的头 2 年前 |
![]() |
Robo · 撤消删除Git中被忽略的文件 2 年前 |
![]() |
Ali EXE · 如何根据bat中命令的输出设置变量? 2 年前 |
![]() |
ShortArrow · 如何使用git管理链接源文件? 2 年前 |
![]() |
Siggi · 使用git移动文件时丢失历史记录 2 年前 |