以下命令之间有什么区别?:
git diff foo master # a
git diff foo..master # b
git diff foo...master # c
Run Code Online (Sandbox Code Playgroud)
diff手册谈到它:
比较分支机构
Run Code Online (Sandbox Code Playgroud)$ git diff topic master <1> $ git diff topic..master <2> $ git diff topic...master <3>
- 主题提示与主分支之间的更改.
- 与上述相同.
- 自主题分支启动以来主分支上发生的更改.
但对我来说并不完全清楚.
假设我只是衍合分支foo上master,有冲突的.我想foo通过引入额外的更改或丢失更改(除了适合冲突解决的更改),确保我不会在冲突解决期间意外损坏内容.我这样做是通过:
diff -u <(git diff `git merge-base master foo@{1}` foo@{1}) \
<(git diff `git merge-base master foo ` foo )
Run Code Online (Sandbox Code Playgroud)
(更新:或我刚刚提醒的等效...语法git-diff:)
diff -u <(git diff master...foo@{1}) <(git diff master...foo) | mate
Run Code Online (Sandbox Code Playgroud)
这向我展示了master..foo被认为是补丁的所有变化,这正是我想要检查的最小化.但是,调用很复杂,输出的解释并不完全简单.
有没有更好的方法来完成这项任务 - 提供相同的信息,但有更好的方法或格式 - 或者我应该采取上述内容并将其包装在脚本中?
有没有办法测试两个差异或补丁是否相同?
假设您有以下git提交历史记录,其中功能F和G可以完全重新映射到E:
G
/
A--B--C--D--E
\
F
Run Code Online (Sandbox Code Playgroud)
由于我们当前部署过程的限制,我们有以下几个相关的图表(它不受版本控制)
G'
/
------------E'
\
F'
Run Code Online (Sandbox Code Playgroud)
F'和G'最终将被应用于头部E',其中一些是确定的顺序,所以它最终会像
------------E'--G'--F'
Run Code Online (Sandbox Code Playgroud)
有没有办法测试从E'到G'的差异与B中G的Git提交产生的补丁相同?
我完全意识到,在一个理想的世界中,修订控制可以解决这个问题,而且我们已经到了那里,但那不是我们现在所处的位置.
你可以基本上在单独的结账时播放两个补丁并比较输出,但这看起来很笨重.并且比较差异本身,我假设,不会工作,因为行号可能会改变.即使G'和F'被重新定义为E',F'的补丁也将最终应用于G',使得补丁的差异上下文不同.
我需要知道这两个补丁是否实际相同.
我有一个旧的补丁文件和使用unix diff命令创建的新补丁文件.只是差异补丁报告由于创建补丁时的时间戳而产生的差异.
有没有办法(使用diff?)能够可靠地告诉我这两个补丁是否实际相同?
Git版本2.19引入了git range-diff应该用于比较两个提交范围的版本.我一直在阅读文档,但我不明白这个新功能的目的是什么.
我检查了官方的Git文档,我无法理解它的语法(省略标志):
git range-diff ( <range1> <range2> | <rev1>...?<rev2> | <base> <rev1> <rev2> )
Run Code Online (Sandbox Code Playgroud)
什么是rev1和rev2?
有人可以解释它们何时有用我的意思是每个案例?