我只是克隆了一个git存储库,并签出了一个分支。我对它进行了修改,然后决定删除所有局部更改,因为我想要原始副本。

简而言之,我必须执行以下两个命令来删除本地更改

git checkout .

git clean -f

我的问题是,

(1)这是去除局部变化的正确方法吗,否则请告诉我正确的方法。

(2)我们什么时候使用git重置——即使没有这个命令,我也能重置

谢谢

*解决方案:重要修改:3月26日:* 用git专用术语替换了许多模糊的术语 (跟踪/无足迹的/策划/ unstaged]

当我们进行本地更改时,只能有三类文件:

1型。阶段性跟踪文件 2型。未分级跟踪文件 类型3。unstaging UnTracked files,又名UnTracked files

staging -那些被移动到staging区域/添加到索引的数据 跟踪-修改文件 UnTracked -新文件。总是unstaged。如果是阶段性的,那就意味着他们被跟踪了。

每个命令的作用:

Git结帐。-仅删除未分期的跟踪文件[类型2] git clean -f -删除unstage UnTracked文件[Type 3] git reset——hard -只删除阶段性跟踪和非阶段性跟踪文件[类型1,类型2] git stash -u删除所有更改[类型1,类型2,类型3]

结论:

很明显,我们可以用任何一个

(1) combination of `git clean -f` and `git reset --hard` 

OR

(2) `git stash -u`

达到预期的结果。

注意:Stashing,这个词的意思是“将(某物)安全秘密地存放在指定的地方”。这总是可以检索使用git stash流行。 因此,在上述两个选项中做出选择是开发者的决定。

谢谢克里斯托夫和弗雷德里克·舍宁。

编辑:03/27

我认为值得注意的是get clean -f

Git clean -f

没有回头路了。使用-n或——dry-run预览将造成的损害。

如果你也想删除目录,运行git clean -f -d

如果你只想删除被忽略的文件,运行git clean -f -X

如果你想删除被忽略的文件以及非被忽略的文件,运行git clean -f -x

参考:更多关于git清洁:如何从当前git工作树中删除本地(未跟踪)文件?

编辑:05/20/15

丢弃该分支上的所有本地提交[删除本地提交]

为了丢弃此分支上的所有本地提交,使本地分支相同 到这个分支的“上游”,只需运行git reset——hard @{u}

参考:http://sethrobertson.github.io/GitFixUm/fixup.html

或者做git重置-hard origin/master[如果本地分支是master]

注意:06/12/2015 这不是另一个被标记为重复的SO问题的重复。这个问题涉及如何删除本地GIT更改[删除添加的文件,删除添加到现有文件的更改等各种方法;在其他SO线程中,只有地址如何删除本地提交。如果您添加了一个文件,并且您想单独删除它,那么其他SO线程不会讨论它。因此这不是另一个的复制品]

编辑:06/23/15

如何恢复已推送到远程存储库的提交?

$ git revert ab12cd15

编辑:09/01/2015

从本地分支和远程分支删除之前的提交

案例:您刚刚向本地分支提交了一个更改,并立即推送到远程分支, 突然意识到,哦不!我不需要这种改变。现在做什么?

git reset——hard HEAD~1[用于删除本地分支的提交]

git push origin HEAD——force[两个命令都必须执行。用于从远程分支删除]

什么分支?它是当前签出的分支。

编辑09/08/2015 -删除本地git合并:

我在主分支和合并的主分支与一个新的工作分支阶段2

$ 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

or

$ git reset --hard HEAD~8

or

$ git reset -hard 9a88396f51e2a068bb7 [sha提交代码-这是在所有合并提交发生之前出现的代码]


当前回答

首先检查你的重要更改是否被保存:

哥!

比 试一试

$ git重置——很难 它会将分支重置为默认值

但如果你需要撤销:

$ edit (1) $ git添加frotz.c Filfre.c $ mailx (2) $ git重置 (3) $ git拉git://info.example.com/ nitfol


阅读更多>> https://git-scm.com/docs/git-reset

其他回答

选项1:放弃跟踪和未跟踪的文件更改

放弃对阶段性和非阶段性文件所做的更改。

$ git reset --hard [HEAD]

然后完全丢弃(或删除)未跟踪的文件。

$ git clean [-f]

选择2:藏匿

您可以先隐藏您的更改

$ git stash

然后根据你想做的事情,把它放下或弹出。见https://git-scm.com/docs/git-stash # _synopsis。

选项3:手动恢复文件到原始状态

首先我们切换到目标分支

$ git checkout <branch-name>

列出所有更改过的文件

$ git status

手动将每个文件恢复到原始状态

$ git restore <file-path>

最好的方法是检查变化。

在一个名为project-name的项目中修改pom.xml文件,你可以这样做:

git status

# modified:   project-name/pom.xml

git checkout project-name/pom.xml
git checkout master

# Checking out files: 100% (491/491), done.
# Branch master set up to track remote branch master from origin.
# Switched to a new branch 'master'

首先检查你的重要更改是否被保存:

哥!

比 试一试

$ git重置——很难 它会将分支重置为默认值

但如果你需要撤销:

$ edit (1) $ git添加frotz.c Filfre.c $ mailx (2) $ git重置 (3) $ git拉git://info.example.com/ nitfol


阅读更多>> https://git-scm.com/docs/git-reset

与git中的所有东西一样,有多种方法来实现它。您使用的两个命令是一种方法。你可以做的另一件事是简单地用git stash -u隐藏它们。-u确保新添加的文件(未跟踪的)也包括在内。

git stash -u的便利之处在于

这可能是实现你的目标最简单的(唯一的?)单一命令 如果你改变了你的想法之后,你得到你所有的工作与git stash pop(这就像删除电子邮件在gmail,你可以撤销,如果你改变了你的想法之后)

至于你的另一个问题,git reset -hard不会删除未跟踪的文件,所以你仍然需要git clean -f。但藏个少不更事的人可能是最方便的。

1. 当您根本不想保留本地更改时。

git reset --hard

该命令将从本地存储库中完全删除所有本地更改。这是在pull命令期间避免冲突的最佳方法,只有在您根本不想保留本地更改的情况下。

2. 当您希望保留本地更改时

如果您希望从远程获取新更改,并希望忽略 在拉扯过程中局部的变化,

git stash

它会保存所有的本地更改,现在你可以提取远程更改,

git pull

现在,你可以通过,

git stash pop