【问题标题】:How to preview changes before git pull如何在 git pull 之前预览更改
【发布时间】:2021-08-21 21:40:21
【问题描述】:

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

【问题讨论】:

标签: git github git-fetch


【解决方案1】:

假设您所有的本地修改都已提交,一种方法是:

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 进行比较。

【讨论】:

  • 可能想要交换两个参数,以便 HEAD 中但 origin/yourbranch 中缺少的内容显示为添加,而不是删除。
  • @chepner 嗯,基于“将要做什么”这个问题的措辞,也许原始顺序可能是首选?想象一个快进拉动,其中一些文件将被添加,一些文件将被删除。
  • 也对。毫无疑问,我已经用两种可能性进行了编辑。
  • 我愿意:git diff HEAD...origin/yourbranchgit difftool -D HEAD...origin/yourbranchgit log HEAD...origin/yourbranch
  • 如果您还没有提交文件,git fetch 后跟 git diff origin/yourbranch 也可以。
【解决方案2】:

检查运行git pull后将对文件所做的更改

那么最简单的解决方案就是运行它并查看!首先,弄清楚你在哪里:

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

现在拉,然后 diff 看看你刚刚做了什么:

% git pull
% git diff bf1908d

这准确地显示了您的要求:运行 git pull 后对文件所做的更改。

如果您喜欢这些更改,请什么也不做。如果您不这样做,并且希望您从未进行过此拉动,那么 git reset --hard bf1908d 并且您会回到拉动之前的位置,不会造成任何伤害。

【讨论】:

  • 绝对这个。 git rev-parse @git show --oneline --no-patch 的更短、更直接的版本,但您甚至不需要这样做。 git pull; git diff @{1} 如果你不喜欢你看到的 git reset --hard @{1}
  • 聪明。是的,我总是忘记 @{1} 是“我刚刚在哪里”。
  • 一开始我不是一个使用 git pull 的人,但我仍然喜欢这个想法,它简单有效。警告:如果您的沙箱有未提交的本地更改,请不要这样做,git reset --hard @{1} 将销毁它们。请注意,最好在拉取之前提交或存储本地更改,但 Git 不需要它,所以我认为值得一提。
【解决方案3】:

完成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

【讨论】:

    猜你喜欢
    • 2010-09-15
    • 2012-03-16
    • 2014-02-10
    • 2021-09-12
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    相关资源
    最近更新 更多