Git中有“git pull --dry-run”选项吗?

Posted

技术标签:

【中文标题】Git中有“git pull --dry-run”选项吗?【英文标题】:Is there a "git pull --dry-run" option in Git? 【发布时间】:2013-06-17 19:54:12 【问题描述】:

有没有像git pull --dry-run 这样的东西来查看在弄乱我的工作树之前将如何合并内容?

现在我在做:

git fetch origin && git merge --no-commit --no-ff

我在“git-pull”的手册页中没有看到任何与之相关的内容。

为了澄清,我只需要在 Ant 脚本中部署它以查看在执行 git pull 时是否存在冲突,然后退出构建,失败部署并保留该目录树与 @987654324 之前相同@。

【问题讨论】:

为什么会有冲突?您的部署脚本是否进行本地提交,如果是,为什么? 在查看这些响应时,我认为我们忽略了分布式源代码控制的一个主要区别——拉/取将获取整个存储库,而不仅仅是一个分支。您必须指定各个分支,如下面的几个答案所示。 @CBBailey ...当许多人在许多分支上工作时(例如不同的版本和功能),通常会有重叠。事先检查可以更轻松地计划您的合并和以后的拉取请求。与 SVN 等效的命令是:svn -q -u. 【参考方案1】:

您可以通过从当前分支创建一个新的一次性分支并在那里执行git pull 来获得所需的效果。如果您对结果不满意,则原始分支完好无损。

【讨论】:

你的意思是git stash? 不,git stash 完全不同。这会将您的本地更改放在其他地方。【参考方案2】:

如果合并失败,我总是依靠 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 HEAD2

【讨论】:

你也可以试试这个,因为拉取在某种程度上类似于合并http://***.com/questions/501407/is-there-a-git-merge-dry-run-option fatal: ambiguous argument 'HEAD..origin/branch': unknown revision or path not in the working tree. @Green 试试 git reset --hard HEAD@2 @Green 可能是这样的:git diff HEAD..origin/master【参考方案3】:

您需要先获取以更新您的本地源/主服务器

git fetch origin

那么你可以这样做:

git diff --name-only origin/master

将列出已更改的文件。

git diff origin/master directory_foo/file_bar.m

将逐行列出文件 directory_foo/file_bar.m 的 diff。

【讨论】:

感谢带有 --name-only 标志的提示【参考方案4】:

由于拉取意味着合并,如果您的脚本检测到存在任何冲突并且合并失败,我会运行 git merge --abort

【讨论】:

如果您是针对远程分支执行此操作(首先使用git fetch origin branch),那将是git merge --abort origin/branch 对吗?【参考方案5】:
# 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

【讨论】:

为什么投反对票?我做了一个git diff this-answer/top-answer,没有发现重大错误。请考虑在投反对票时发表评论:git commit -m "why would you downvote, blah blah blah"【参考方案6】:

在这个类似的问题中查看我的答案:

How to preview git-pull without doing fetch?

这转到~/.gitconfig 文件:

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

【讨论】:

【参考方案7】:

从 v2.27.0 开始有一个dry-run flag

【讨论】:

对!自 2020 年 6 月 1 日起,有一个用于拉动的空运行标志(但不是用于合并)【参考方案8】:

不拉:

[ "$(git fetch;git diff | wc -l)" != "0" ] && (
echo there are updates
echo do your stuff here
)

或不碰任何东西:

[ "$(git pull --dry-run | wc -l)" != "0" ] && (
echo there are updates
echo do your stuff here
)

【讨论】:

以上是关于Git中有“git pull --dry-run”选项吗?的主要内容,如果未能解决你的问题,请参考以下文章

git设置只允许pull

ssh链接git服务器,解决push pull要求输入密码问题

git pull之前要先commit

git fetch, git pull, git pull -rebase区别

差异:git clone , git fetch, git pull和git rebase

git fetch git pull 与 git pull --rebase