可能吗
基本上,有一个远程存储库,我可以使用它来提取:
git pull
现在,我想预览一下此拉动将发生的变化(差异),而无需碰到我这边的任何东西。原因是我要拉的东西可能不是“好”,并且我希望其他人在将存储库设置为“脏”之前对其进行修复。
可能吗
基本上,有一个远程存储库,我可以使用它来提取:
git pull
现在,我想预览一下此拉动将发生的变化(差异),而无需碰到我这边的任何东西。原因是我要拉的东西可能不是“好”,并且我希望其他人在将存储库设置为“脏”之前对其进行修复。
Answers:
执行完之后git fetch
,请执行a git log HEAD..origin/master
以显示您的最后一个公共提交和源的master分支之间的日志条目。要显示差异,请使用git log -p HEAD..origin/master
来显示每个色块,或git diff HEAD...origin/master
(三个点而不是两个点)来显示单个差异。
通常有没有任何需要撤消取,因为做一个只获取更新远程分支,没有的你的分支机构。如果您不准备在所有远程提交中进行拉取和合并,则可以git cherry-pick
用来仅接受所需的特定远程提交。稍后,当您准备好获取所有内容时,a git pull
将合并在其余的提交中。
更新:我不确定您为什么要避免使用git fetch。git fetch所做的全部工作就是更新远程分支的本地副本。此本地副本与您的任何分支都没有任何关系,并且与未提交的本地更改没有任何关系。我听说有人在Cron工作中运行git fetch,因为它很安全。(不过,通常我不建议您这样做。)
git diff ...@{u}
就像git diff HEAD...origin/master
原点/母版是上游分支一样
我认为git fetch是您想要的。
它将拉出更改和对象,而无需将其提交到本地存储库的索引中。
以后可以使用git merge合并它们。
编辑:进一步的解释
直接来自Git- SVN速成课程 链接
现在,您如何从远程存储库获得任何新更改?您获取它们:
git fetch http://host.xz/path/to/repo.git/
此时,它们已在您的存储库中,您可以使用以下方法检查它们:
git log origin
您也可以比较更改。您还可以使用git log HEAD..origin来查看分支中没有的更改。然后,如果要合并它们-请执行以下操作:
git merge origin
请注意,如果您未指定要提取的分支,它将方便地默认为跟踪远程服务器。
老实说,阅读手册页将使您对选项以及如何使用它有最好的了解。
我只是想通过示例和记忆来做到这一点,我目前没有一个可以测试的盒子。您应该看一下:
git log -p //log with diff
可以使用git reset --hard(link)撤消获取,但是树中所有未提交的更改以及已获取的更改都将丢失。
git reset --soft
还是--mixed
?检查联机帮助页。
您可以从远程仓库中获取内容,查看差异,然后进行合并。
这是一个称为远程回购origin
和一个称为master
跟踪远程分支的分支的示例origin/master
:
git checkout master
git fetch
git diff origin/master
git pull --rebase origin master
我创建了一个自定义的git别名来为我做这件事:
alias.changes=!git log --name-status HEAD..
这样,您可以执行以下操作:
$git fetch
$git changes origin
这将为您提供一个不错的,简便的方法,让您可以在预览之前预览更改merge
。
我使用这两个命令,可以看到要更改的文件。
首先执行git fetch,它给出这样的输出(输出的一部分):
... 72f8433..c8af041开发->起源/开发 ...
此操作为我们提供了两个提交ID,第一个是旧的提交ID,第二个是新的提交ID。
然后使用git diff比较这两个提交
git diff 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的行。
我可能迟到了聚会,但这太让我烦恼了。以我的经验,我宁愿要查看哪些更改尚待处理,而不是更新我的工作副本并处理这些更改。
这在~/.gitconfig
文件中:
[alias]
diffpull=!git fetch && git diff HEAD..@{u}
它获取当前分支,然后在工作副本和此获取的分支之间进行区分。因此,您应该只看到随之而来的更改git pull
。
HEAD..@{u}
吗?它更简单,并且不需要将远程命名为“ origin”或将您的分支命名为与远程上相同的名称。
git pull
如果您不喜欢合并的内容,则应该可以中止合并的一部分。因此,我不确定这样做的用例是什么。
git pull
稍后再做。我也认为那是op的问题。
如果您不希望git-fetch更新本地.git,只需将本地回购复制到temp dir并在其中进行拉取。这是一个简单的手:
$ alias gtp="tar -c . | (cd /tmp && mkdir tp && cd tp && tar -x && git pull; rm -rf /tmp/tp)"
例如:
$ 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)