Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Need to reset git branch to origin version

Tags:

git

I was accidentally working on a branch I shouldn't have been for a while, so I branched off of it giving it the appropriate name. Now I want to overwrite the branch I shouldn't have been on to the version from origin (github). Is there an easy way to do this? I tried deleting the branch and then resetting up the tracking branch, but it just gives me the version I was working on again.

like image 754
Brad Herman Avatar asked Feb 15 '12 21:02

Brad Herman


People also ask

How do I reset origin branch head?

Also, you go for reset the current branch of origin to HEAD . How it works: git fetch origin downloads the latest from remote without trying to merge or rebase anything. Then the git reset resets the <branch_name> branch to what you just fetched.

What does git reset -- hard origin branch do?

git reset --hard origin/master works only as a full wipe out if you are in a local branch. If you are in the master branch instead, and if you have made changes, you can only drop all of the files that you made or changed. You cannot drop the folders that you added.

What does resetting a branch do?

Resets the index and updates the files in the working tree that are different between <commit> and HEAD , but keeps those which are different between the index and working tree (i.e. which have changes which have not been added).


1 Answers

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:\Users\vonc\git\git>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 
like image 77
VonC Avatar answered Sep 30 '22 17:09

VonC