这可能吗?

基本上,有一个远程存储库,我只需要使用:

git pull

现在,我想在不接触任何东西的情况下预览一下这个拉力会改变什么(一个差异)。原因是我正在拉取的东西可能不是“好的”,我希望其他人在使我的存储库“脏”之前修复它。


当前回答

我创建了一个自定义的git别名来为我做这件事:

alias.changes=!git log --name-status HEAD..

你可以这样做:

$git fetch
$git changes origin

这将为您提供一个在进行合并之前预览更改的好方法。

其他回答

如果你不想让git-fetch更新你的本地。git,只要复制你的本地repo到一个临时目录,并在那里做一个pull。这里有一个简写:

$ alias gtp="tar -c . | (cd /tmp && mkdir tp && cd tp && tar -x && git pull; rm -rf /tmp/tp)"

Ex.:

$ git status
# On branch master
nothing to commit (working directory clean)

$ gtp
remote: Finding sources: 100% (25/25)
remote: Total 25 (delta 10), reused 25 (delta 10)
Unpacking objects: 100% (25/25), done.
From ssh://my.git.domain/reapO
   32d61dc..05287d6  master     -> origin/master
Updating 32d61dc..05287d6
Fast-forward
 subdir/some.file       |    2 +-
 .../somepath/by.tes    |    3 ++-
 .../somepath/data      |   11 +++++++++++
 3 files changed, 14 insertions(+), 2 deletions(-)

$ git status
# On branch master
nothing to commit (working directory clean)

$ git fetch
remote: Finding sources: 100% (25/25)
remote: Total 25 (delta 10), reused 25 (delta 10)
Unpacking objects: 100% (25/25), done.
From ssh://my.git.domain/reapO
   32d61dc..05287d6  master     -> origin/master

$ git status
# On branch master
# Your branch is behind 'origin/master' by 3 commits, and can be fast-forwarded.
#
nothing to commit (working directory clean)

我想git fetch就是你要找的。

它将拉出更改和对象,而不将它们提交到本地回购的索引中。

它们可以稍后用git merge进行合并。

手册页

编辑:进一步解释

直接从Git- SVN速成班链接

Now, how do you get any new changes from a remote repository? You fetch them: git fetch http://host.xz/path/to/repo.git/ At this point they are in your repository and you can examine them using: git log origin You can also diff the changes. You can also use git log HEAD..origin to see just the changes you don't have in your branch. Then if would like to merge them - just do: git merge origin Note that if you don't specify a branch to fetch, it will conveniently default to the tracking remote.

阅读手册页可以让您更好地理解选项以及如何使用它。

我只是想通过例子和记忆来做这个,我目前没有一个盒子来测试。你应该看看:

git log -p //log with diff

获取可以通过git reset (hard)来撤销,但是你的树中所有未提交的更改都会丢失,你已经获取的更改也会丢失。

在其他地方克隆repo,并在真正的checkout和新的克隆上执行git log,看看是否得到了相同的东西。

在做一个git取回之后,做一个git log HEAD..Origin /master显示您的最后一次公共提交和原点的主分支之间的日志条目。要显示差异,使用git log -p HEAD..origin/master显示每个补丁,或者git diff HEAD…原点/母点(三个点而不是两个点)显示单个差异。

通常不需要撤销获取,因为执行获取只更新远程分支,而不更新您的任何分支。如果您不准备在所有远程提交中执行拉取和合并操作,您可以使用git选择性地只接受您想要的特定远程提交。稍后,当您准备好获取所有内容时,git拉取将在其余提交中合并。

更新:我不完全确定为什么你要避免使用git获取。所有git获取所做的是更新远程分支的本地副本。这个本地副本与您的任何分支都没有任何关系,也与未提交的本地更改没有任何关系。我听说有人在cron作业中运行git fetch,因为它非常安全。(不过,我通常不建议这样做。)

我可能迟到了,但这件事已经困扰我太久了。 根据我的经验,我更希望看到哪些更改正在等待,而不是更新我的工作副本并处理这些更改。

这是~/。gitconfig文件:

[alias]
    diffpull = !git fetch && git diff HEAD..@{u}

它获取当前分支,然后在工作副本和这个获取的分支之间做一个差异。因此,您应该只看到git pull带来的更改。