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


76

是否有东西git pull --dry-run可以看到东西在被我的工作树弄乱之前将如何被合并?

现在我正在做:

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

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

为了明确起见,我只需要在Ant脚本中进行部署即可查看是否存在冲突git pull,然后退出构建,退出部署失败,并使该目录树与之前相同git pull


1
为什么会有冲突?您的部署脚本是否进行本地提交,如果是,为什么?
CB Bailey 2013年

在查看这些响应时,我认为我们忽略了分布式源代码控制的主要区别-提取/获取将获取整个存储库,而不仅仅是一个分支。您必须指定各个分支,如以下几个答案所示。

@CBBailey ...当许多人在许多分支上工作(例如,不同的版本和功能)时,经常会出现重叠。事前检查使计划合并和以后的拉取请求变得更加容易。SVN的等效命令是:svn -q -u

Answers:


67

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


fatal: ambiguous argument 'HEAD..origin/branch': unknown revision or path not in the working tree.
绿色

@Green尝试git reset --hard HEAD @ {2}
Alex Shenfield '18

34

您需要先获取以更新您的本地来源/母版

git fetch origin

然后,您可以执行以下操作:

git diff --name-only origin/master

将列出已更改的文件。

git diff origin/master directory_foo/file_bar.m

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


1
感谢带有--name-only标志的提示
cw24 2014年

20

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


你的意思是git stash
WesternGun

4
不,git stash完全不同。这会将您的本地更改放到其他地方。
RichieHH

11
# 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

5
为什么要投票?我做了一个git diff this-answer/top-answer,没有发现重大错误。提交弃权票时,请考虑发表评论:git commit -m "why would you downvote, blah blah blah"
WesternGun

3

由于拉动意味着合并,因此git merge --abort如果脚本检测到存在任何冲突并且合并失败,我将继续运行。


如果您是针对远程分支进行此操作(git fetch origin branch首先),那是git merge --abort origin/branch对的吗?
Nick Devereaux 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.