Is there a "git pull --dry-run" option in Git?
GitGit PullGit Problem Overview
Is there such a thing as git pull --dry-run
to see how stuff will be merged before it messes up my working tree?
Right now I am doing:
git fetch origin && git merge --no-commit --no-ff
I did not see anything in the man page for 'git-pull' related to it.
To clarify, I just need it in an Ant script for deployment to see if there are conflicts when doing git pull
, then back off exit out of build, fail deployment and leave that directory tree the same it was before git pull
.
Git Solutions
Solution 1 - Git
I have always relied on the inherent abilities of Git to get me back if a merge fails.
To estimate how the merge might occur, you can start like you did with:
$ 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
If things did not go as planned, look at your reflog
and reset back to your desired state:
$ 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}
Solution 2 - Git
You will need to fetch first to update your local origin/master
git fetch origin
Then you can do:
git diff --name-only origin/master
Will list the files that have changed.
git diff origin/master directory_foo/file_bar.m
Will list the line by line diff of file directory_foo/file_bar.m.
Solution 3 - Git
You can get the effect you want by creating a new throw-away branch from your current one and doing the git pull
there. If you're unhappy with the results, the original branch is intact.
Solution 4 - Git
# 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
Solution 5 - Git
Since v2.27.0 there is a dry-run flag
Solution 6 - Git
Since pulling implies merging, I'd go with running git merge --abort
if your script detects there were any conflicts and merging failed.
Solution 7 - Git
See my answer in this similar question:
this goes to the ~/.gitconfig
file:
[alias]
diffpull=!git fetch && git diff HEAD..@{u}
Solution 8 - Git
OliverE is spot-on: git pull
has a dry-run
option, so I recommend git pull --dry-run -v
to achieve the OP's purpose -- simple and direct. pull
did not always have a dry-run option but in previous (and current) versions of git, fetch
did (and does) have a dry-run option. Thus, an alternative approach is to do a git fetch --dry-run -v
before you do your pull. Always better to check on an action before executing it, than having to spend time reverting.
Solution 9 - Git
Without pulling:
[ "$(git fetch;git diff | wc -l)" != "0" ] && (
echo there are updates
echo do your stuff here
)
or without touching anything:
[ "$(git pull --dry-run | wc -l)" != "0" ] && (
echo there are updates
echo do your stuff here
)