本文所有命令均经过实战检验,请放心使用…

查看远程分支

$ git branch -a

显示:

* master
  remotes/origin/2015-08-04
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/branchName1
  remotes/origin/branchName2

删除远程分支

$ git push --delete origin branchName

显示:

To git@git.coding.net:user_name/project.git
 - [deleted]         branchName

清理本地在远程已不存在的分支

使用 git branch -a 命令可以查看所有本地分支和远程分支(git branch -r 可以只查看远程分支)
发现很多在远程仓库已经删除的分支在本地依然可以看到。
使用命令 git remote show origin,可以查看 remote 地址,远程分支,还有本地分支与之相对应关系等信息。
此时我们可以看到那些远程仓库已经不存在的分支,根据提示,使用 git remote prune origin 命令后显示:

Pruning origin
URL: https://xxx@xxx.xxx/xxx/xxx.git
 * [pruned] origin/develop
 * [pruned] origin/bug

这样就删除了那些远程仓库不存在的分支。

放弃本地修改,强制使用远程覆盖

$ git fetch --all
$ git reset --hard origin/master

还原项目到指定版本

使用 git status 命令,找到目标版本的commit id,如 37d5d5275591cb17928d155d12a8aecd993df718, 执行如下命令:

$ git reset --hard 37d5d5

--hard 选项会清除当前仓库所有修改,若当前仓库还有其他尚未提交的修改,建议先备份已修改内容,或直接备份整个项目,再执行上述命令。

将指定文件,还原到指定的历史版本

找到目标版本的commit id,例如将文件 abc.txt(不考虑该文件已被修改的情况) 还原到 37d5d5275591cb17928d155d12a8aecd993df718 版本,命令如下:

$ git reset 37d5d5 abc.txt

重复提示:Unlink of file ‘path/to/file’ failed. Show I try again? (y/n)

执行 git checkout origin/master -- path/to/file时报此异常:
输入y后依旧提示相同问题
此异常有可能是,需要更新的文件被某些进程占用,无法释放,导致文件不能更新。
找到占用此文件的进程,关闭后再更新即可。

导出指定分支的最新版本

git archive -o my_project.zip master

导出当前分支的指定版本

commit id 必须为全部,不能省略

git archive -o ../my_project.zip c163b0be54d9cd33af6bd7073b22185689e9c698

切换到指定版本

git checkout ${commit_id}

切回到最新版本

git checkout -

在历史记录中查找已删除的文件

如果不知道已删除文件的完整路径,可以使用下面的命令:

git log --all --full-history -- **/thefile.*

如果知道已删除文件的完整路径,可以使用下面的命令:

git log --all --full-history -- <path-to-file>

参考:Git: How to search for a deleted file in the project commit history? - Stack Overflow

导出干净的代码

有时需要将最新的项目代码打成干净的zip(或tar.gz)包,不包含版本控制信息,可以执行如下的命令:

git archive -o latest.zip HEAD

git archive 还有很多其他用法,可以查询相关资料了解一下。

比较不同分支上的文件的差异

git diff branch1 branch2 path-to-file

合并指定分支上指定的commit

比如要将分支 branch1 上的commit id 为 7ba30153b44d5fe49100ae3c7860632777d61ce8 的提交,合并到分支 branch2 上,只需要先切换到 branch2 上,然后执行如下命令即可

git cherry-pick 7ba30153b44d5fe49100ae3c7860632777d61ce8

git diff 统计代码更改数量

获取每个文件的修改行数,以及总的文件更改的个数、增加行数、删除行数:

$ git diff --stat

myproject/src/main/java/com/example/Demo1.java | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 
myproject/src/main/java/com/example/Demo2.java | 17 ++++++++++++-----
2 files changed, 60 insertions(+), 5 deletions(-)

以表格形式获取每个文件增加行数、减少行数:

$ git diff --numstat

48      0       myproject/src/main/java/com/example/Demo1.java
12      5       myproject/src/main/java/com/example/Demo2.java
About Me
后端开发工程师
GitHub Repos