How can I change which commit master points to in git?

  1. Stash your uncommitted changes: git stash
  2. Create a new branch: git branch new_branch
  3. Reset master to origin/master: git reset --hard origin/master
  4. Check out the new branch again: git checkout new_branch
  5. Unstash your changes: git stash pop

Stash/unstash is not necessary if your working tree is clean. Just make sure there are no changes in your working tree, because those will be removed when you reset --hard


Another possibility (faster, and without the need to stash and reset):

  1. Check out a new branch: git checkout -b new_branch master
  2. Create a 'new' master branch and point it to origin/master's commit: git branch -f master origin/master

$ git checkout master
$ git reset --hard <commit-id-for-master-to-sit-at>

for example try this

$ mkdir example; cd example
$ git init
$ vi testFile.txt
(now add "test commit 1" to line 1 of file)
$ git add *
$ git commit
(add message "(+) 1st commit" to git commit)
$ vi testFile.txt
(now add "test commit 2" to line 1 of file)
$ git add *
$ git commit
(add message "(+) 2nd commit" to git commit)
$ vi testFile.txt
(now add "test commit 3" to line 1 of file)
$ git add *
$ git commit
(add message "(+) 3rd commit" to git commit)
$ git tag final_head
$ git reset --hard HEAD~1

this example shows moving the master to a different commit. Note here that the tag allows us to save the old master, in case :)


Checkout a new branch where branch main is, then delete branch main, then create branch main anew where main was intended to be (e.g., at origin/main):

git checkout -b new_branch_where_main_was
git branch -d main
git branch main origin/main

Note that this does not change anything in the working directory: HEAD remains unchanged, uncommitted changes remain where they are. No stashing needed, no checkouts needed, no resets needed.

Tags:

Git