GIT如何在没有提交的情况下重置


GIT how to reset without a commit

假设我使用以下命令创建一个空的git repo:

1
# git init

然后我开始添加远程存储库:

1
2
3
# git remote add remote1 ........
# git remote add remote2 ........
# git remote add remote3 ........

和提取:

1
# git fetch --all

最后,我将需要的所有远程分支合并到本地回购中:

1
2
3
# git merge remote1/branchX
# git merge remote2/branchY
# git merge remote3/branchZ

现在,假设我必须在所有合并之前重置本地回购;自然的解决方案似乎只是创建一个新的空存储库。但问题是:获取我的远程存储库需要很长时间(几个小时),所以我想避免再次感染。

我不能执行"Git重置",因为在所有合并之前没有提交。


一个不错的欺骗方法是在设置存储库时执行git init && git commit --allow-empty -m 'Initial commit.',这至少减轻了不存在HEAD的症状。

但是,由于您已经获取了所有的远程设备,因此您不需要为了创建一个新的空/不相关的分支而炸掉存储库,如果这更符合您的需求:

1
git symbolic-ref HEAD refs/heads/new-branch

然后,当您提交/合并EDOCX1上的任何内容时,git将为您填写新的分支。一旦你有了另一个现有的分支,你就可以硬重置master或者做任何你想耍的花招。


我认为这个线程:签出旧的提交并使其成为新的提交提供了一些可能性。在合并之前签出一个以前的提交,或者重置到该点。如果发生了mutliple提交,我将首先在合并之前查找sha值并使用该值。