如何在调用 git fetch 后查看更改的文件
How to see changed files after calling git fetch
如果两个人在 github 上的同一个存储库和同一个分支主管上工作。然后说 A 将他们的更改推送给 master,而我作为 B,我如何检查调用 git fetch
后更改的文件?
如果我这样做:
git fetch
git merge master origin/master
我得到这一行:
aa@DESKTOP-KQQ0A3T MINGW64 ~/..
$ git merge master origin/master
Merge made by the 'recursive' strategy.
src/main.js | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
我喜欢 src/main.js
中的差异是如何描述的,但该信息仅在我合并时出现,所以我的问题是,我应该使用什么命令来查看关于差异的相同信息但是在做合并之前?
此命令将帮助您:
git diff master:src/main.js
看起来这个问题与这个主题有部分重复:
git: diff between file in local repo and origin
获取后你想做的事:
git diff ..origin/master
这里 rholmes 的回答更加详细:
How to check real git diff before merging from remote branch?
当您知道自己触摸了哪些文件时要快速查看,您还可以尝试:
git log —name-status HEAD..origin/master
这将使您快速了解 co-workers 提交以及在该提交中修改了哪些文件。如果您注意到修改的文件之一也是您正在处理的文件,那么您可以继续比较文件:
git diff master:src/main.js
在我回答之前,请注意:
git merge master origin/master
请不要这样做:您只需要 git merge origin/master
,而不是 git merge master origin/master
。 (幸运的是,当你 运行 这个时候你是 on master
,所以 Git 最终忽略了 master
部分。如果它有不,你会看到 Merge made by the octopus strategy
.)
先回答这部分:
I like how the diff in src/main.js
is described in that way, but that info appears only when I merge, so my question is, what command should I use to see the same info about the diff but before doing merge?
看看 git merge
会说什么(假设你的 work-tree 是 "clean" 因为 git status
会说 "nothing to commit"),运行:
git diff --stat HEAD...HEAD@{upstream}
生成摘要的是 --stat
。让我们暂时搁置 git diff
的争论;但请注意(因为这很重要)这假设一个简单的普通 single-merge-base-commit 合并,或一个 fast-forward 操作(这些很有可能)。
how do I check the files changed in after calling git fetch
?
这个问题本身揭示了一些混乱(自然的混乱,因为 Git 非常混乱 :-))。具体来说,git fetch
没有更改任何文件。 git fetch
所做的是获得新的 提交 。每个提交都是一个快照——所有文件的副本,就像你制作快照时一样——而快照本身并不是一个 change.
同时,如果您查看带有 git show
或 git log -p
的快照,Git 将 显示 变化.如果快照是快照,而不是变更集,Git 怎么能显示 变更? 那么,经过一番思考,答案显而易见。就像其中之一 "spot the difference" pictures / quizzes:
- 查看上一个快照。
- 然后看这个快照。
- 发生了什么变化?
这就是 git show
向您显示 change-set 的方式,即使提交是快照。该提交有一个 parent commit 并且 Git 只是与 git diff
进行比较,父 <em>hash</em> ~1
或 <em>hash</em>^1
,提交的哈希为 hash
。 (~1
和 ^1
后缀在 Git 图中都后退了一个 first-parent。)
关于 git diff
及其参数
git diff
命令非常复杂,因此它不仅可以做这些,但初步估计,它只是 比较两个完整的快照 。不管你怎么命名它们:
git diff origin/master master
例如, 将找到 origin/master
命名的提交(哈希 ID)和 master
命名的提交,然后比较两者。输出是一组指令:这是如何更改第一个提交,使其看起来像第二个提交。
你可以这样写:
git diff origin/master..master
如果你愿意的话。当您使用 git log
执行此类操作时,您通常会看到许多提交,而不仅仅是两个。 git diff
命令不同:它只查看 那两个 提交。实际上,它丢弃了 ..
部分(当然,它们用于分隔两个名称)。
说到合并,还有另一种特殊的 git diff
语法:git diff A...B
表示 git diff $(git merge-base A B) B
。这就是我们上面使用的。通常,three-dot 语法具有不同的含义; git diff
将其更改为这个特定的 "tell me what a merge would do" 意思,而不是。
(这不完全是 git merge
运行 在 after 完成合并后的结果,因为合并完成后,合并基础已经改变了。并且,如果合并基础不仅仅是单个提交,git diff A...B
语法无论如何都会选择一个单个提交,并比较这两个提交,而 git merge
将默认为更复杂的策略。因此,在一个true-merge完成后,Git可以运行git diff --stat HEAD^ HEAD
,这就是它的作用。对于fast-forwardnot-really-a-merge"merge",Git可以运行git diff --stat HEAD@{1} HEAD
.)
有关 three-dot 表示法的正常和特殊 Git-diff-only 含义的更多信息,请参阅 the gitrevisions documentation and the git diff
documentation。
如果两个人在 github 上的同一个存储库和同一个分支主管上工作。然后说 A 将他们的更改推送给 master,而我作为 B,我如何检查调用 git fetch
后更改的文件?
如果我这样做:
git fetch
git merge master origin/master
我得到这一行:
aa@DESKTOP-KQQ0A3T MINGW64 ~/..
$ git merge master origin/master
Merge made by the 'recursive' strategy.
src/main.js | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
我喜欢 src/main.js
中的差异是如何描述的,但该信息仅在我合并时出现,所以我的问题是,我应该使用什么命令来查看关于差异的相同信息但是在做合并之前?
此命令将帮助您:
git diff master:src/main.js
看起来这个问题与这个主题有部分重复:
git: diff between file in local repo and origin
获取后你想做的事:
git diff ..origin/master
这里 rholmes 的回答更加详细: How to check real git diff before merging from remote branch?
当您知道自己触摸了哪些文件时要快速查看,您还可以尝试:
git log —name-status HEAD..origin/master
这将使您快速了解 co-workers 提交以及在该提交中修改了哪些文件。如果您注意到修改的文件之一也是您正在处理的文件,那么您可以继续比较文件:
git diff master:src/main.js
在我回答之前,请注意:
git merge master origin/master
请不要这样做:您只需要 git merge origin/master
,而不是 git merge master origin/master
。 (幸运的是,当你 运行 这个时候你是 on master
,所以 Git 最终忽略了 master
部分。如果它有不,你会看到 Merge made by the octopus strategy
.)
先回答这部分:
I like how the diff in
src/main.js
is described in that way, but that info appears only when I merge, so my question is, what command should I use to see the same info about the diff but before doing merge?
看看 git merge
会说什么(假设你的 work-tree 是 "clean" 因为 git status
会说 "nothing to commit"),运行:
git diff --stat HEAD...HEAD@{upstream}
生成摘要的是 --stat
。让我们暂时搁置 git diff
的争论;但请注意(因为这很重要)这假设一个简单的普通 single-merge-base-commit 合并,或一个 fast-forward 操作(这些很有可能)。
how do I check the files changed in after calling
git fetch
?
这个问题本身揭示了一些混乱(自然的混乱,因为 Git 非常混乱 :-))。具体来说,git fetch
没有更改任何文件。 git fetch
所做的是获得新的 提交 。每个提交都是一个快照——所有文件的副本,就像你制作快照时一样——而快照本身并不是一个 change.
同时,如果您查看带有 git show
或 git log -p
的快照,Git 将 显示 变化.如果快照是快照,而不是变更集,Git 怎么能显示 变更? 那么,经过一番思考,答案显而易见。就像其中之一 "spot the difference" pictures / quizzes:
- 查看上一个快照。
- 然后看这个快照。
- 发生了什么变化?
这就是 git show
向您显示 change-set 的方式,即使提交是快照。该提交有一个 parent commit 并且 Git 只是与 git diff
进行比较,父 <em>hash</em> ~1
或 <em>hash</em>^1
,提交的哈希为 hash
。 (~1
和 ^1
后缀在 Git 图中都后退了一个 first-parent。)
关于 git diff
及其参数
git diff
命令非常复杂,因此它不仅可以做这些,但初步估计,它只是 比较两个完整的快照 。不管你怎么命名它们:
git diff origin/master master
例如, 将找到 origin/master
命名的提交(哈希 ID)和 master
命名的提交,然后比较两者。输出是一组指令:这是如何更改第一个提交,使其看起来像第二个提交。
你可以这样写:
git diff origin/master..master
如果你愿意的话。当您使用 git log
执行此类操作时,您通常会看到许多提交,而不仅仅是两个。 git diff
命令不同:它只查看 那两个 提交。实际上,它丢弃了 ..
部分(当然,它们用于分隔两个名称)。
说到合并,还有另一种特殊的 git diff
语法:git diff A...B
表示 git diff $(git merge-base A B) B
。这就是我们上面使用的。通常,three-dot 语法具有不同的含义; git diff
将其更改为这个特定的 "tell me what a merge would do" 意思,而不是。
(这不完全是 git merge
运行 在 after 完成合并后的结果,因为合并完成后,合并基础已经改变了。并且,如果合并基础不仅仅是单个提交,git diff A...B
语法无论如何都会选择一个单个提交,并比较这两个提交,而 git merge
将默认为更复杂的策略。因此,在一个true-merge完成后,Git可以运行git diff --stat HEAD^ HEAD
,这就是它的作用。对于fast-forwardnot-really-a-merge"merge",Git可以运行git diff --stat HEAD@{1} HEAD
.)
有关 three-dot 表示法的正常和特殊 Git-diff-only 含义的更多信息,请参阅 the gitrevisions documentation and the git diff
documentation。