如何在git pull之前预览更改

5

我想要检查在运行git pull之后对文件所做的更改。我知道我们使用git fetch从远程仓库检索新对象而不更改本地仓库。但是如何在编辑器中查看这些更改呢?


1
很抱歉,我不明白这与https://dev59.com/RW025IYBdhLWcg3wwYz4#5818279有何不同。您只是想知道如果合并会发生什么。这很容易找到答案,并且以前已经有很好的解决方法了。 - matt
这个回答解决了你的问题吗?如何在Git中预览合并? - joanis
3个回答

7

假设您所有的本地修改都已提交,一种方法是执行以下操作:

git fetch origin

# To see local changes as the "new" version
git diff origin/yourbranch HEAD

# Or to see remote changes as the "new" version
git diff HEAD origin/yourbranch

这将比较你本地仓库(当前为HEAD)和远程内容origin/yourbranch


1
可能需要交换两个参数,这样在 HEAD 中但在 origin/yourbranch 中缺失的内容将显示为添加,而不是删除。 - chepner
1
@chepner 嗯,从问题的措辞来看,“将会执行什么操作”,也许最初的顺序可能更好?想象一下只能向前推进的情况,其中某些文件将被添加,某些文件将被删除。 - TTT
1
没错,如果有疑问,我已经编辑了两种可能性。 - Gaël J
我会使用以下命令:git diff HEAD...origin/yourbranch 或者 git difftool -D HEAD...origin/yourbranch 或者 git log HEAD...origin/yourbranch - Marek R
1
如果您尚未提交文件,则 git fetch 后跟 git diff origin/yourbranch 也可以工作。 - joanis

4

想要查看在运行 git pull 后对文件所做的更改,最简单的方法就是直接运行并查看!首先,确定你所处的位置:

% git show --oneline --no-patch
bf1908d ...

现在执行 pull 操作,然后执行 diff 命令以查看你刚刚做的修改:
% git pull
% git diff bf1908d

这就是你所询问的内容:在运行git pull后对文件所做的更改。
如果你喜欢这些更改,那就什么都不要做。如果你不喜欢这些更改,并希望从未进行过这次拉取操作,则执行git reset --hard bf1908d,你就会回到拉取之前的状态,没有任何损失。

4
完全正确。git rev-parse @git show --oneline --no-patch 的更短、更直接的版本,但你甚至不需要这样做。如果你想要查看差异,可以使用 git pull; git diff @{1} 命令,如果你不喜欢看到的内容,可以使用 git reset --hard @{1} - jthill
聪明。是的,我总是忘记@{1}表示“我刚才所在的位置”。 - matt
我一开始并不喜欢使用git pull,但我仍然喜欢这个想法,它简单而有效。警告:如果您的沙盒有未提交的本地更改,请勿执行此操作,git reset --hard @{1}将销毁它们。请注意,最好在拉取之前提交或隐藏您的本地更改,但Git不要求这样做,因此我认为值得注意。 - joanis

1
一旦完成git fetch,你就有了一个完整的本地数据库,其中包含你刚刚获取的远程所有更改的记录,因此你可以使用Git的所有功能来探索这些更改。
  • git log origin/branch将显示提交列表
  • git log -p origin/branch将按提交显示更改。
  • git diff origin/branchgit diff HEAD origin/branch(请参见@Gaël J的答案)

如果你的本地更改已经提交,你也可以检出origin/branch进行尝试,然后再回到自己的分支。

git checkout origin/branch  # go to the fetched state from origin
# explore stuff
git checkout branch  # go back to your own branch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接