![]() |
1
3
首先,我将给出命令,然后给出它们真正在做什么,以及为什么这会实现您想要的。我假设下面的功能分支是刚刚调用的
中
根据你的工具,你可能想做
长重要的是,在这里,没有真正的 悬而未决的变化 . Git不存储 变化 完全。什么是Git商店 提交 ,并且每个提交都是所有文件的完整快照。当你问吉特的时候 什么改变 ,你必须告诉Git 二 提交,或者至少提交两个充满文件的树。然后,Git从这两个输入中计算出快照A和快照B的不同之处。然后Git告诉您这些不同之处,但A和B仍然是完整的快照。在某些方面,这些都不重要,你可以在需要的时候看到变化,在需要的时候看到快照。但是,如果你的心理模型与Git的实际做法相匹配,你就没有什么秘密可言了:你自己的工作会更容易。最重要的方法是记住: 要查看更改或差异,必须提供两个输入。 有时,其中一个输入是隐含的。有时, 二者都 其中有暗含的!
最后一个例子是
手上有两件东西,Git会比较它们,告诉你有什么不同。这个
您也可以手动运行
(旁白:在我看来,你想做的可能是错误的做法。你可以通过早点和经常地承诺,使你自己的工作更容易。执行diff是一个好主意,但是您可以从基本提交到tip提交,也就是说,跨一个提交范围来评估总体结果。然后,您可以使用一个交互式的REBASE,或“我的首选方法”附加分支,将较小的承诺重新构建成更合理的一系列承诺。但其中大部分是个人偏好。听起来你的xcode工具比现在的工作要好得多;你使用它的方式不是 错误的 ,这是非常有限的。) 如何以及为什么这样做
我开始写一篇较长的文章,但它失控了,所以我只想说:看看我的其他StackOverflow答案,了解Git是如何从索引中提交的,而不是工作树,以及这些提交是如何更新分支名称的。
Git的合并本身也是一个相当大的主题。但是,我们可以说合并使用 指数 以实现其合并结果, 工作树 起次要作用,主要针对存在合并冲突的情况。
真正的合并,即
忽略诸如添加、删除或重命名文件之类的问题,比较这三个提交将生成一个谁更改了哪些文件的列表。如果 我们 更改了一些他们没有更改的文件,或者 他们 更改了一些我们没有的文件,合并这些文件很容易:Git可以只获取我们的文件,或者他们的文件。如果我们两个都没有更改文件,Git可以获取文件的三个版本中的任何一个(合并库、我们的或他们的)。 对于困难的情况,我们都更改了一些文件,git从合并基础开始,和 组合 我们的更改及其更改,并将组合的更改应用于合并基副本。如果我们的改变和他们的改变有所不同 线 结合很简单,Git宣布结果是成功的(即使它在现实中毫无意义)。如果我们和他们都改变了 相同的 行,git声明合并冲突。
合并冲突是最棘手的。给你,吉特走了
所有三个输入文件
在索引中,并将冲突合并写入工作树。你的工作,作为人类
如果你跑
然而,在所有这些情况下,Git在
这不是你想要的。所以,我们使用
没有特别好的理由,
(对于更简单的合并,Git将默认执行快进,
决赛
|
![]() |
2
1
你考虑过合并吗
合并成
另一个注意事项是,“head~2”是提交历史记录中要重置回的提交数的示例。如果合并提交将“x”个提交数放在远程之前,则将“2”替换为提交数a
|
![]() |
3
1
我相信有很多有效的方法可以做到这一点。我想描述一个简短的 补片 从功能分支传输代码更改。
这将创建一个
补丁
每次提交文件。(提示:在最后一个命令中需要输入的提交是
之前
你要转的第一个。见
其次,我建议你
第三,得到累积的变化 补丁 文件到的索引中 主人 :
|