Xavier Álvarez codeWizard , , git stash . , git fetch git rebase (. Xavier), , rebase --autostash, , , git pull script. 1
, , . . , git stash save "force", git commit --allow-empty, . 2 , git stash save . , git stash save , , , . , . : git rev-parse SHA-1s "", git stash .
git rev-parse SHA-1:
$ git rev-parse refs/remotes/origin/master
2635c2b8bfc9aec07b7f023d8e3b3d02df715344
- , refs, SHA-1. : refs/heads/branch. , : refs/tags/tag, , , , origin/master, refs/remotes/origin/master.
stash script refs/stash, git rev-parse refs/stash. 3 git stash save, git stash save. , git stash save stash stash.
, ( , ), git rev-parse SHA-1:
$ git rev-parse refs/stash
fatal: ambiguous argument 'refs/stash': unknown revision or path not in
the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
, git rev-parse -q --verify refs/stash, , , script, :
oldsha=$(git rev-parse -q --verify refs/stash)
git stash -q save
newsha=$(git rev-parse -q --verify refs/stash)
if [ "$oldsha" = "$newsha" ]; then
made_stash_entry=false
else
made_stash_entry=true
fi
... all of your other code goes here ...
if $made_stash_entry; then git stash pop; fi
1 git pull git fetch, git merge, , , git fetch, - git rebase. , , , .
2 create store: , SHA-1, stash- , , . git, , , (, , stash, , , , git).
3 , git rev-parse stash stash. : ( --, ), , git , , , , .