如何回滚Git repo以首先提交并删除所有历史记录

Ale*_*kov 20 git repository git-revert

这几天我正在学习如何使用git,我不得不做很多命中和失误.因此,我需要删除并重新创建我的远程和本地存储库.有没有办法回滚到repo的第一次提交并删除之后的所有历史记录?基本上是一个干净的石板试验.

kjo*_*kjo 32

我不知道有什么方法可以完全按照你的要求进行操作(可以回滚到第一次提交,但不能删除所有历史记录,因为历史记录至少会包含初始提交.)

如果我是你,我只需要删除远程仓库和.git本地仓库的目录,然后重新开始git init.

我可以得到的最接近你要求的是除了第一次提交之外的所有回滚.为此,您首先要找到第一次提交的SHA1,例如:

% git rev-list --max-parents=0 --abbrev-commit HEAD
aa8119f
Run Code Online (Sandbox Code Playgroud)

......然后再跑

% git reset aa8119f
Run Code Online (Sandbox Code Playgroud)

...要么

% git reset --hard aa8119f
Run Code Online (Sandbox Code Playgroud)

...取决于您是要保留还是放弃自初始提交以来所做的所有更改.(以上假设您只有一个分支.如果没有,您还必须删除您拥有的任何其他分支git branch -d <BRANCHNAME>.)

最后,你跑了

% git push -f
Run Code Online (Sandbox Code Playgroud)

(我希望你git push -f每当你推动与他人分享的回购时,你就会意识到这是一个禁忌.)

不幸的是,正如已经解释过的,这种方法并没有删除所有历史记录.

如果这是你经常要做的事情,我建议git init你在之后立即运行

% git commit --allow-empty --allow-empty-message -m ''
% git tag -a -m '' ROOT
Run Code Online (Sandbox Code Playgroud)

这将在您的历史记录的根目录中放置一个空提交,并使用名为ROOT的标记对其进行标记.然后你可以做类似的事情

% git reset ROOT
Run Code Online (Sandbox Code Playgroud)

要么

% git reset --hard ROOT
Run Code Online (Sandbox Code Playgroud)

带你回到第一个空提交.

为了更好地处理是什么git reset,我建议阅读本文.

  • 回复:“这种方法不会删除所有历史记录”确实无法摆脱初始提交,但是在重置为第一次提交后,您可以使用`git rm *`完成清理文件(如果您修改了,请小心文件),然后`git commit --amend --allow-empty --reset-author --date= -m "Erased history"` 来清理第一次提交的信息。 (2认同)

GoZ*_*ner 9

.git您第一次提交签出后,只需将目录吹走即可.因此:

git checkout <first-commit-sha>
rm -rf .git
git init
git add -A
git commit -m 'Initial Commit'
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 8

您可以重置为第一次提交:

" 如何通过'git log'显示第一次提交? "描述了如何找到第一次提交:

git log --pretty=format:%H | tail -1
Run Code Online (Sandbox Code Playgroud)

(仅在没有多个根分支时有效)

git reset --hard yourFirstCommitSHA1
Run Code Online (Sandbox Code Playgroud)

请注意,在重置之后,要真正获得一个干净的平板,您可以只是git init一个新的repo并复制您刚重置的第一个提交的内容(并在该新的repo中添加和提交)


小智 5

结账至大师:

$ git checkout master
Run Code Online (Sandbox Code Playgroud)

显示日志:

$ git log
Run Code Online (Sandbox Code Playgroud)

重置为第一次提交:

$ git reset --hard <you first commit number>
Run Code Online (Sandbox Code Playgroud)

然后,将更改推送到远程:

$ git push --force origin
Run Code Online (Sandbox Code Playgroud)