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-optionfatal: 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”选项吗?的主要内容,如果未能解决你的问题,请参考以下文章
ssh链接git服务器,解决push pull要求输入密码问题
git fetch, git pull, git pull -rebase区别