Git

整理常用的 Git 操作。


常见操作

返回或者取消过去的某个 commit

这个牵涉到多种不同情况。

强制删除本地分支尚未 commit 的改动(恢复到最近一次的 commit)

这是你想要删除本地所有的改动,恢复到最近一次 commit 状态。此时直接 reset 到 HEAD commit 即可:

git reset --hard HEAD

注意:它会永久删除你尚未 commit 的改动,所以谨慎行之。

回到之前某一次 commit 并且强制删除所有改动

如果要回到之前某一次 commit,同时你确定要删除所有的改动。此时还是用 reset --hard

如果你知道你要回到的 commit ID(例如 0d1d7fc32),直接可以暴力

git reset --hard 0d1d7fc32

注意:这样会永久删除从 0d1d7fc32 开始到当前位置这中间的所有的 commit 改动。

如果要回到例如当前最近的 commit 之前第 2 个 commit,可以这样:

git reset --hard HEAD^2

注意:有关 ^~的用法比较 tricky,尤其是对于庞大的 commit graph 复杂的工程,因此个人建议,如果不是很确定,最好不要使用,而是尽可能使用 commit-id。参考:What’s the difference between HEAD^ and HEAD~ in Git?

回到之前某一次 commit 但是不删除改动

即,回到某一次过去的 commit(例如 0d1d7fc32),但是并不删除从 0d1d7fc32 到当前之间的改动,而是只删除 commit IDs。这通常是为了删除一些多余的 commit IDs 以便重新设置 commits,并且保留本地改动。

git reset --soft 0d1d7fc32

设置本地分支和 remote 分支一模一样

git fetch origin
git reset --hard origin/<branch-name>

注意:这样会抛弃本地分支的所有改动,因此建议先备份一个新的分支。

从另一个分支中拷贝某一个文件覆盖到当前分支

在当前分支中,直接用:

git checkout <another-branch> -- <relative-file-path> 

注意中间的那个将分支和文件隔开的双虚线”–“。另外注意,这是从另一个本地分支中拷贝某个文件(即,你要确保那个分支中有你想要的文件)。如果你想从 remote 远程分支中拷贝,用:

git fetch
git checkout origin/<another-branch> -- <relative-file-path>

即,需要先 fetch 一下远程更新然后再拷贝,同时要加上 origin 关键字指代 remote 分支。

http://wholemeal.co.nz/blog/2010/06/11/no-changes-did-you-forget-to-use-git-add/

取消 add

取消(undo)刚刚添加的某个文件:

git reset <filename>

或者取消全部添加的文件:

git reset

Search

    Table of Contents