这可能吗?
基本上,有一个远程存储库,我只需要使用:
git pull
现在,我想在不接触任何东西的情况下预览一下这个拉力会改变什么(一个差异)。原因是我正在拉取的东西可能不是“好的”,我希望其他人在使我的存储库“脏”之前修复它。
这可能吗?
基本上,有一个远程存储库,我只需要使用:
git pull
现在,我想在不接触任何东西的情况下预览一下这个拉力会改变什么(一个差异)。原因是我正在拉取的东西可能不是“好的”,我希望其他人在使我的存储库“脏”之前修复它。
当前回答
我想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)来撤销,但是你的树中所有未提交的更改都会丢失,你已经获取的更改也会丢失。
其他回答
如果你不想让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)
在其他地方克隆repo,并在真正的checkout和新的克隆上执行git log,看看是否得到了相同的东西。
我创建了一个自定义的git别名来为我做这件事:
alias.changes=!git log --name-status HEAD..
你可以这样做:
$git fetch
$git changes origin
这将为您提供一个在进行合并之前预览更改的好方法。
我可能迟到了,但这件事已经困扰我太久了。 根据我的经验,我更希望看到哪些更改正在等待,而不是更新我的工作副本并处理这些更改。
这是~/。gitconfig文件:
[alias]
diffpull = !git fetch && git diff HEAD..@{u}
它获取当前分支,然后在工作副本和这个获取的分支之间做一个差异。因此,您应该只看到git pull带来的更改。
我使用这两个命令,就可以看到要更改的文件。
首先执行git获取,它给出如下输出(输出的一部分): ... 72年f8433 . .C8af041 develop -> origin/develop ...
这个操作给了我们两个提交id,第一个是旧的,第二个是新的。
然后使用git diff比较这两个提交 Git差异72f8433..C8af041 | grep“diff—git”
这个命令将列出要更新的文件:
diff --git a/app/controller/xxxx.php b/app/controller/xxxx.php
diff --git a/app/view/yyyy.php b/app/view/yyyy.php
例如app/controller/xxxx.php和app/view/yyyy.php将被更新。
使用git diff比较两次提交会打印所有更新过的文件 更改了行,但是使用grep,它只搜索并获得行 从输出中包含diff——git。