我刚刚克隆了一个git存储库并签出了一个分支。我处理了它,然后决定删除我所有的本地更改,因为我想要原始副本。
简而言之,我必须执行以下两个命令来删除我的本地更改
git checkout .
git clean -f
我的问题是,
(1)这是摆脱局部更改的正确方法吗,或者请让我知道正确的方法。
(2)我们什么时候使用git reset --hard
,因为即使没有这个命令我也可以重置
谢了
*解决方案:主要编辑:03/26:* 用git特定术语替换了许多模糊的术语 [已跟踪/未跟踪/暂存/未暂存]
当我们进行本地更改时,只能有三类文件:
类型1.分阶段跟踪文件
类型2.未分阶段跟踪文件
类型3.未暂存的未跟踪文件a. k. a未跟踪文件
每个命令做什么:
git checkout .
-仅删除未分阶段跟踪的文件[类型2]
git clean -f
-仅删除未暂存的未跟踪文件[类型3]
git reset --hard
-仅删除分阶段跟踪和未分阶段跟踪的文件[类型1,类型2]
git stash -u
-删除所有更改[类型1、类型2、类型3]
结论:
很明显我们可以用任何一个
(1) combination of `git clean -f` and `git reset --hard`
或
(2) `git stash -u`
以达到预期的结果。
注意:藏匿,因为这个词的意思是“将(某物)安全秘密地存储在指定的地方”。这总是可以使用git stash pop
检索。
所以在上述两个选项之间进行选择是开发人员的决定。
谢谢克里斯托夫和弗雷德里克·施宁。
编辑:03/27
我认为值得把“当心”音符放在git clean -f
上
git clean -f
没有回头路。使用-n
或--dry-run
预览你将造成的伤害。
如果您还想删除目录,请运行git clean -f -d
如果您只想删除被忽略的文件,请运行git clean -f -X
如果您想删除忽略和非忽略的文件,请运行git clean -f -x
参考:更多关于git clean
:如何从当前Git工作树中删除本地(未跟踪)文件?
编辑:05/20/15
丢弃此分支上的所有本地提交[删除本地提交]
为了丢弃此分支上的所有本地提交,使本地分支相同
到这个分支的“上游”,只需运行git reset --hard @{u}
参考:http://sethrobertson.github.io/GitFixUm/fixup.html
或者git reset --hard origin/master
[如果本地分支是master
]
注:06/12/2015 这是没有另一个SO问题的副本,被标记为重复。这个问题解决如何删除本地GIT更改[删除添加的文件,删除添加到现有文件的更改等以及各种方法;在另一个SO线程中的哪里只解决如何删除本地提交。如果你添加了一个文件,并且你想单独删除它,那么另一个SO线程不会讨论它。因此这不是另一个的副本]
编辑:06/23/15
如何恢复已推送到远程存储库的提交?
$ git revert ab12cd15
编辑:09/01/2015
从本地分支和远程分支删除先前的提交
case:您刚刚向本地分支提交了更改,并立即推送到远程分支, 突然意识到,哦,不!我不需要这个改变。现在做什么?
git reset --hard HEAD~1
[用于从本地分支删除该提交]
git push origin HEAD --force
[必须执行这两个命令。从远程分支删除]
分支是什么?它是当前签出的分支。
Edit 09/08/2015-删除本地git合并:
我在master
分支并将master
分支与新工作的分支phase2
合并
$ git status
# On branch master
$ git merge phase2
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 8 commits.
问:如何摆脱这种合并?
尝试git reset --hard
和git clean -d -f
两者都不起作用
工作唯一的东西是以下任何一个:
$ git reset --hard origin/master
或
$ git reset --hard HEAD~8
或
$ git reset --hard 9a88396f51e2a068bb7
[sha提交代码-这是在所有合并提交发生之前存在的代码]