如何将Git存储库重置为新克隆的状态?

时间:2018-10-25 18:03:45

标签: git git-reset

是否存在与新的git克隆具有相同结果的git语句?

因此,即使有多余的分支,多余的文件,其他文件,本地标签等等……哪个命令可以完成此操作?

3 个答案:

答案 0 :(得分:4)

删除所有本地工件的最佳选择是重新制作clone

否则,您必须运行不同的命令来执行清理的各个组件。

要清除所有未跟踪的文件,请使用git clean,同时打开任意数量的标志以清除所有内容:

git clean -fd

现在将所有分支都保留为远程版本(git reset),如果它们是仅本地的(git branch),则将其删除:

git checkout master
git reset --hard origin/master

git branch -d local-branch

标签也一样。您可以像这样删除所有本地标签:

git tag -d $(git tag -l)

如果您知道自己在做什么,还可以通过操作.git文件夹的内容来手动执行很多这些操作。

如您所见,git clone是迄今为止最简单的选项。

答案 1 :(得分:3)

如果您真的要删除所有本地工作,我也认为克隆最简单的方法。如果存储库很大和/或网络很慢,则可以使用以下选项:

git clone --reference existing-clone -dissociate URL new-clone

答案 2 :(得分:2)

  

有时完成一些工作,某些事情提交一些,有些则没有,等等。然后几周不执行该项目,其他人继续工作..当您返回项目时,要开始清理无需弄清楚本地代码与远程代码的比较

如果只想更新本地分支机构,则可以解决此问题而无需清除存储库。假设您的存储库看起来像这样。

          D - F [feature]
         /
A - B - C [origin/master]
         \
          G - H [master]

尽管git log --graph --decorate --all是横向的,您仍可以得到非常相似的视图。

您对master和名为feature的新分支进行了一些更改。您已经具有远程工作的干净版本。 origin/master在远程master分支上跟踪远程工作。

这不会自动保持最新状态。您可以使用git fetch -p更新它以及所有其他远程跟踪分支(-p将修剪所有旧的远程分支)。

git fetch -p

          D - F [feature]
         /
A - B - C - I - J - K [origin/master]
         \
          G - H [master]

现在您的origin/master是最新的,您可以像查看其他分支一样查看它,以查看最新的作品。

您可以使用git rebase origin/master使其他任何本地分支机构保持最新状态。这将重播origin/master上的所有本地更改。例如,要更新feature分支...

git checkout feature
git rebase origin/master

                      D1 - F1 [feature]
                     /
A - B - C - I - J - K [origin/master]
         \
          G - H [master]

或者,如果您对分支不再感兴趣,可以将其删除。

git branch -D feature

A - B - C - I - J - K [origin/master]
         \
          G - H [master]

最后,如果您只是想放弃对master的更改,请使用git reset --hard强制master移至origin/master

git checkout master
git reset --hard origin/master

                      D1 - F1 [feature]
                     /
A - B - C - I - J - K [origin/master]
                      [master]

现在您是最新的了。


要回答有关清除存储库的问题...

Git存储库通常很小(如果不是,那会导致其他问题)。假设您的网络连接良好,确保真正干净的重置最简单的方法就是再次克隆它。

如果这不可能,那么下一个最佳选择是follow these instructions。但是,通过克隆新的存储库摆脱困境是一种不好的习惯。练习对存储库进行园艺。

克隆您现有的克隆并清除其本地分支和标签。这将确保重置.git/hooks.git/config之类的内容。

首先,克隆本地脏存储库。

git clone /path/to/the/dirty/repo /path/to/the/new/new_repo
cd /path/to/the/new/new_repo

然后删除所有本地分支和标签。

Git不允许您删除当前分支,因此请检出origin/master的上游版本master

git checkout origin/master

获取所有本地分支并将其删除。

git for-each-ref --format '%(refname:short)' refs/heads

获取所有本地标签并将其删除。

git for-each-ref --format '%(refname:short)' refs/tags | xargs git tag -d

master重新创建本地origin/master,然后将其签出。

git checkout -b master origin/master

将您的来源设置为原始存储库。您可以从脏存储库中的git remote -v中获取该信息。

git remote set-url origin <original origin url>

最后执行git pull以获取上游存储库及其分支的最新版本,并更新master

git pull

如您所见,将现有克隆克隆起来更容易。