工作实践中遇到了许多很有用的参数,在这里记录一下。
全局
--git-dir.git目录(默认为当前路径)- 一般我们都是
cd到相应的代码库目录下进行操作,设置该参数即可从任何位置进行git操作。 --git-dir传入的一定是git的路径,也就是用git init --bare创建的目录,或者.git目录。- 对应的环境变量:
GIT_DIR,可以在脚本中使用。
- 一般我们都是
--work-tree工作目录(默认为当前路径)- 这个命令配合
git checkout命令,可以方便的在生产环境导出不带.git目录的生产代码目录。 - 对应的环境变量:
GIT_WORK_TREE,可以在脚本中使用。
- 这个命令配合
-q --quiet只输出错误信息。
git init
--bare创建一个空的git库。
如GIT_DIR未设置,则在当前目录创建。该选项创建的git库只包含git文件而不包含实际项目的源文件,所以不允许进行一般的git操作,会收到This operation must be run in a work tree的错误,可见并非工作目录。
所以一般远端仓库都是该命令初始化,可减少冲突。
git clone
--depth <depth>指定日志深度。
因为经常使用Could9 IDE,又因为硬盘免费空间只有1GB,所以经常因为.git目录过大导致无法使用。
git checkout
git log
--author按作者搜索--pretty优化输出格式 (可选参数:--oneline)--date指定日期的输出格式--since指定查询的起始时间(例如:--since="Thu Aug 18")--before指定查询的结束时间(例如:--before="Thu Aug 18")
实例1
1 | # 统计某作者的总提交天数 |
git push
--all推送所有本地分支到远程库,比如git push origin --all--delete删除远程分支,比如删除远程的test分支:
$ git push origin --delete test
等同于
$ git push origin :test
git reset
[<tree-ish>] <paths>切换所有<paths>文件或目录到<tree-ish>的状态。但并不会影响当前工作目录(working tree)或者当前分支。
配合git checkout命令,可以实现还原单个文件历史状态的目的。
git rm
--cached从track列表删除。当已经被跟踪的文件被写到.gitignore里时,依旧每次会继续跟踪。用这个命令即可。
.gitignore这个文件是用于 untracked 文件的忽略列表,用add将文件标记为 tracked 状态后 .gitignore就对其无效了
git blame
-L <start>,<end>指定查看的起始行和结束行。
git instalweb
创建一个gitweb。
git submodule
- 适用于git repo 嵌套或引用其他git repo库的情况
- 用法:git submodule add 仓库地址 路径
例如:git submodule add https://github.com/litten/hexo-theme-yilia.git themes/yilia - 初始化:
git submodule init - 更新:
git submodule update - 删除: 先在根目录的
.gitmodules文件中删除相应配置信息,然后执行git rm –cached。 - 注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone)
git update-index
--assume-unchanged把文件标记为 “没有变更”,把已经加入到版本库,但需要设置一些本地内容的文件设置为忽略,适用于数据库配置文件等。--no-assume-unchanged与上面的命令正好相反
git remote update
用于mirror库与原始库进行同步。
git reflog
可以查看所有分支的所有操作记录(包括(包括commit和reset的操作)
git revert commitid
撤销指定CommitId的
git ls-files
-v查看 ‘假设未改变的’ 文件(使用了git update-index --assume-unchanged命令)
git config –global pack.windowMemory 256m
- remote out of memery的解决办法
git update-server-info-info
- 以http或者https协议访问的git repo服务器才需要,其他(git、ssh等)不需要。
Bash中的git
git源码中有几个比较有用Shell脚本的插件,但是这些插件并不是默认打开的。
git-completion.bash该脚本可以通过键自动补全shell中的git命令。 git-prompt.sh该脚本可以自定义用户的Shell提示符(prompt),显示当前目录下的Git仓库信息。
这个非常有用,尤其是当我们在Shell中操作多个分支时,免驱不断重复用git status查看分支的烦恼。- 这些脚本的下载地址https://github.com/git/git/blob/master/contrib/completion/git-completion.bash
- 脚本的安装方法,点击这里。