Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

Welcome to Software Development on Codidact!

Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.

Comments on How to revert main branch to an earlier commit in git?

Parent

How to revert main branch to an earlier commit in git?

+7
−0

How to move the main branch back to an earlier commit in git?

History
Why does this post require moderator attention?
You might want to add some details to your flag.
Why should this post be closed?

0 comment threads

Post
+7
−0

With git reset, but first, you may want to save the current state in another branch:

$ git switch main
$ git branch backup-of-main

Now the (perhaps messed up) state is safely stored in branch backup-of-main, and you can always just switch back to it and have another swing.

To move main to an earlier commit:

$ git switch main
$ git reset --hard <commit-hash>

You might still run into issues when pushing main to a remote that has already seen the more futuristic states. In this case, you need to force push:

$ git push --force

When you are absolutely sure that it worked out as you planned, you may consider removing the backup-of-main branch. See this question for how.

History
Why does this post require moderator attention?
You might want to add some details to your flag.

2 comment threads

Actually, this solution is not restricted to `main`, as it works for any branch. Regarding `push -... (7 comments)
Did you mean to add a footnote? I see `[1]` but no referent. Maybe you meant to add something about... (3 comments)
Actually, this solution is not restricted to `main`, as it works for any branch. Regarding `push -...
hkotsubo‭ wrote 5 months ago

Actually, this solution is not restricted to main, as it works for any branch.

Regarding push --force, just be aware of the risks before you do it.

Iizuki‭ wrote 5 months ago

Good points. I wonder if there's any way to avoid the force pushing after using reset?

hkotsubo‭ wrote 5 months ago

If the previous commits (the ones that got lost after reset) were already pushed, you can't avoid a forced push.

The only way to avoid it, AFAIK, is to not rewrite history that's already pushed (don't rebase/reset if it affects already-pushed commits). Instead, you could revert the commits, preserving history (example), which eliminates the need to force-push.

H_H‭ wrote 5 months ago

You could also go to the server and do there the same, that would avoid the need for a forced push.

hkotsubo‭ wrote 5 months ago

H_H‭ This doesn't eliminate the problem. Let's suppose the remote has 3 commits:

A <-- B <-- C (main)

And suppose that lots of people already pulled it (so they all have the 3 commits in their local repos).

If I reset main to commit A (either by force push or directly in the server), the remote will be like this:

A (main)

Commits B and C are lost (they're not part of main branch's history anymore). And anyone who tries to pull from this remote will have divergent histories, and will struggle to fix their local repos (imagine, for example, if someone is working on a local branch created from B or C).

The problem is not the forced push, but the consequences for anyone who still has the affected commits locally (and the problem will be the same if you do it in the server directly).

H_H‭ wrote 5 months ago

The problem is not the forced push

Iizuki‭ asked to avoid the forced push. That is sometimes possible. That was the only thing i addressed. If it solves any problem or not is a different story.

hkotsubo‭ wrote 5 months ago

H_H‭ You suggested an alternative that leads to the same problem, I just thought this was worth mentioning (not only for you, but for any future readers).

Otherwise, one could read this and think that your solution would avoid the problems caused by a forced push (which is not the case).