本文所有命令均经过实战检验,请放心使用…
查看远程分支
$ 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