撤消Git中的本地更改


Undo local changes in Git

我的情况:我克隆了一个存储库(内核的源文件)。然后签出一个分支,并构建内核。二进制文件已存储在工作树的子目录中。现在,我想放弃所有本地更改,包括构建的二进制文件,并恢复到克隆存储库的另一个分支。

特别是,我认为这个答案是有用的。在我看来,最好的方法是

1
git checkout -f <desired branch of the original cloned repository>

如果我理解正确,这将强制签出,放弃本地更改(如果我错了,请纠正我)。Git成功地签出了,但是我仍然在工作树的同一个子文件夹中找到以前构建的二进制文件。


因为您的构建生成的二进制文件不被Git跟踪,所以它们不被认为是本地更改。

git clean -xdf

应该很好地为你根除它们。


改编自丹·莫德尔和克尼特的回答

将分支设置为与远程分支完全匹配,包括清除未跟踪的文件,可以通过三个步骤完成:

1
2
3
git fetch origin
git reset --hard origin/<branch name>
git clean -f -d

说明:git fetch抓取存储库的最新版本。git reset放弃分支上对跟踪文件的任何本地更改。git clean从本地副本中删除任何未跟踪的二进制文件。

作为参考,如果您想让Git不跟踪您构建的二进制文件,您应该创建一个.gitignore文件。请参阅忽略文件以进行详细解释,但对于Java程序,您可以使用以下内容。

1
2
3
4
# Compiled files
bin/
*.class
*.jar


重置当前分支。签出到local/master,然后创建一个具有remote/branch历史的新分支。

1
2
3
4
5
6
7
8
9
$ git add .
$ git reset --hard HEAD

$ git checkout master
$ git fetch

$ git checkout -b <branch-name> origin/<remote-branch-name>

# replace <branch-name> = new local branch, <remote-branch-name> = remote desired branch name

现在重新构建二进制文件。