If you haven't pushed to origin yet, you can reset your branch to the upstream branch with:
git checkout mybranch
git reset --hard origin/mybranch
(Make sure that you reference your latest commit in a separate branch, like you mention in your question)
Note that just after the reset, mybranch@{1}
refers to the old commit, before reset.
But if you had already pushed, see "Create git branch, and revert original to upstream state" for other options.
With Git 2.23 (August 2019), that would be one command: git switch
.
Namely: git switch -C mybranch origin/mybranch
Example
C:Usersvoncgitgit>git switch -C master origin/master
Reset branch 'master'
Branch 'master' set up to track remote branch 'master' from 'origin'.
Your branch is up to date with 'origin/master'.
That restores the index and working tree, like a git reset --hard
would.
As commented by Brad Herman, a reset --hard
would remove any new file or reset modified file to HEAD.
Actually, to be sure you start from a "clean slate", a git clean -f -d
after the reset would ensure a working tree exactly identical to the branch you just reset to.
This blog post suggests those aliases (for master
branch only, but you can adapt/extend those):
[alias]
resetorigin = !git fetch origin && git reset --hard origin/master && git clean -f -d
resetupstream = !git fetch upstream && git reset --hard upstream/master && git clean -f -d
Then you can type:
git resetupstream
or
git resetorigin
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…