是否有git pull --dry-run
这样的东西,看看在弄乱我的工作树之前它们将如何合并?
现在我正在做:
git fetch origin && git merge --no-commit --no-ff
我在手册页中没有看到与它相关的'git-pull'。
为了澄清,我只需要在Ant脚本中进行部署,以查看执行git pull
时是否存在冲突,然后退出构建退出,部署失败并使该目录树保持原样git pull
。
答案 0 :(得分:51)
如果合并失败,我一直依靠Git的固有能力让我回来。
要估计合并的发生方式,您可以像以下一样开始:
$ git fetch origin branch # Fetch changes, but don't merge
$ git diff HEAD..origin/branch # Diff your current head to the fetched commit
... personal judgement of potential merge conflicts ...
$ git merge origin/branch # merge with the fetched commit
如果事情没有按计划进行,请查看您的reflog
并重置回所需状态:
$ git reflog
...
abc987 HEAD@{0}: merge activity
b58aae8 HEAD@{1}: fetch origin/branch
8f3a362 HEAD@{2}: activity before the fetch
...
$ git reset --hard HEAD{2}
答案 1 :(得分:28)
您需要先获取以更新本地源/主
git fetch origin
然后你可以这样做:
git diff --name-only origin/master
将列出已更改的文件。
git diff origin/master directory_foo/file_bar.m
将逐行列出文件directory_foo / file_bar.m的行差异。
答案 2 :(得分:15)
您可以通过从当前分支创建新的分离分支并在那里执行git pull
来获得所需的效果。如果您对结果不满意,原始分支就完好无损。
答案 3 :(得分:8)
# fetch new commits from origin
$ git fetch
# check what are the differences and judge if safe to apply
$ git diff origin/master
# actually merge the fetched commits
$ git pull
答案 4 :(得分:5)
从 v2.27.0 开始,有一个 dry-run flag
答案 5 :(得分:2)
由于pull意味着合并,如果你的脚本检测到有任何冲突并且合并失败,我将继续运行git merge --abort
。
答案 6 :(得分:0)
在这个类似的问题中看到我的答案:
How to preview git-pull without doing fetch?
这将转到~/.gitconfig
文件:
[alias]
diffpull=!git fetch && git diff HEAD..@{u}