Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
359 views
in Technique[技术] by (71.8m points)

repository - How to roll back Git repo to first commit and delete all history

I'm learning how to use git these days and I had to do many hit-and-misses. Thus I needed to delete and create anew my remote and local repos. Is there a way to roll back to the first commit of the repo and delete all history after that? Basically a clean slate to experiment on.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I don't know of any way to do exactly what you're asking (one can roll back to first commit, but not delete all history, since the history will at least contain that initial commit.)

If I were you I'd just delete the remote repo and the .git directory of the local repo, and start over with git init.

The closest that I can get to what you're asking for would be to rollback all but the first commit. To do that, you'd first find the SHA1 of the first commit, for example:

% git rev-list --max-parents=0 --abbrev-commit HEAD
aa8119f

...and then run either

% git reset aa8119f

...or

% git reset --hard aa8119f

...depending on whether you want to preserve or discard all the changes made since that initial commit. (The above assumes that you have only one branch. If not, you'll also have to delete any other branches you have with git branch -d <BRANCHNAME>.)

Finally, you'd run

% git push -f

(I hope that you realize that git push -f is a no-no whenever you're pushing to a repo that is shared with others.)

Unfortunately, as already explained, this approach does not delete all the history.

If this is something you'll want to do often, I'd recommend that, immediately after git init, you run something like

% git commit --allow-empty --allow-empty-message -m ''
% git tag -a -m '' ROOT

This will put an empty commit at the root of your history, and tag it with a tag named ROOT. Then you can do something like

% git reset ROOT

or

% git reset --hard ROOT

to bring you back to that first empty commit.

To get a good handle on what git reset does, I recommend reading this.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...