Git 命令
设置与配置
1. git config
Git 有很多默认操作,其中大部分都可以更改,也可以指定成自己的偏好方式
该命令会读取并写入多个文件,可以全局设置或者针对某些仓库进行设置
2. git help
该命令用于显示Git自带的所有的命令文档,每条命令完整的可用选项,可以通过 git help <command>来查看
获取与创建项目
有两种方法可以得到一个Git仓库
一种是从网络或其他地方复制现有仓库,另一种方法是在目录中创建一个新的仓库
1. git init
可以将一个目录变成新的Git仓库并对其进行版本控制
2. git clone
该命令其实有些像是多条命令的包装器。它创建一个新目录,进入该目录并执行git init 来初始化一个空的新仓库
为指定的URL添加 (git remote add) 一个远程仓库 (默认名是origin),对远程仓库执行 git fetch,然后通过
git checkout 将最新的提交检出到工作目录
快照基础
对于暂存工作区内容然后提交至历史记录这种基本的工作流,只涉及少数基础命令
1. git add
该命令将工作目录中的内容添加到暂存区(或“索引”),以备下次提交。git commit 命令在执行时,默认只查看暂存区
因此 git add 执行结果与下次提交的快照一模一样
该命令在Git 中极为重要
2. git status
该命令可以显示出工作目录和暂存区中文件的不同状态。其中包括哪些文件已修改但未暂存,哪些已暂存但尚未提交
在正常的显示形式中,该命令还会包含一些有关如何在暂存区之间移动文件的提示
3. git diff
该命令可用于查看任何两棵树之间的差异。这种差异可以存在于工作环境与暂存区 之间(git diff),暂存区与最后
一次提交之间(git diff --staged) 或是两次提交之间(git diff master branchB)
4. git difftool
如果不想使用内建的git diff命令,可以选择git difftool命令,该命令只是运行一个外部工具来展示两棵树之间
的差异
5. git commit
该命令接受由 git add 暂存的所有文件内容,并在数据库中记录一份新的永久性快照,然后将当前分支的指针指向
它
6. git reset
该命令主要用于撤销操作,从命令中打的动词就能猜出大概。它能移动HEAD指针,更改索引或暂存区,如果使用的是
--hard ,那么还可以更改工作目录。最后一项功能如果使用不当,那么有可能会造成工作成果的丢失,所以在使用
前要确定完全理解其用法
7. git rm
该命令用于从Git的暂存区和工作目录中移除文件。与 git add类似,会暂存下一次提交的文件删除操作
8. git mv
该命令是一个便捷命令,可以移动文件,然后分别在新文件执行git add,在旧文件上执行git rm
9. git clean
该命令用于移除工作目录中不需要的文件。这些文件包括项目构建过程中产生的临时文件或是合并冲突文件
分支与合并
在Git中,少数命令实现了大部分的分支与合并功能
1. git branch
该命令实际上类似一个分支管理工具。它可以列出拥有的分支、创建新分支、删除分支以及重命名分支
2. git checkout
该命令用于切换分支并将内容检出到工作目录中
3. git merge
该命令用于将一个或多个分支合并到已检出的分支,然后将合并结果设为当前分支
4. git mergetool
可以启动一个外部合并助手工具
5. git log
该命令可以从最近的提交快照开始,向后显示项目的可访问历史记录。它默认值显示当前所在分支的历史记录
但也可以提供进行遍历的其他分支,甚至多个头部 或分支。该命令还经常用于显示两个或多个分支子提交层面
上的差异,可以使用-p 和 --stat 选项来获悉每次提交所以入的变化,使用--pretty 和 --oneline 选项
查看更简洁的历史记录,使用--decorate选项轻松实现分支指针位置可视化,--graph选项查看分叉历史等
6. git stash
该命令用于临时存储未提交的工作,这样做为的是在无需提交未完成工作的情况下清理工作目录
7. git tag
该命令可以给代码历史记录中某个历史点指定一个永久性的书签。通常用于发布相关的事项
项目共享及更新
在Git中,访问网络的命令并不多,基本上所有命令的操作对象都是本地数据库。也有几个命令可以用于处理远程仓库
1. git fetch
该命令与远程仓库通信,获取该仓库中尚未拥有的所有内容,并将其保存在本地数据库中
2. git pull
该命令基本上就是git fetch 和 git merge命令的组合,Git先从指定的远程仓库中获取内容,然后立刻尝试
将其合并入你所在的分支
3. git push
该命令能够与其他仓库通信,确定本地数据库与远程仓库在内容上存在的不同,然后将差异推送到其他仓库
这要求对这些仓库有写权限,因此通常需要进行身份验证,可以使用 --delete 来删除服务器上的分支
4. git remote
该命令可用于管理远程仓库记录。它可以将很长的URL保存成一个简短的句柄,比如origin,这样就不用总是输入
一长串内容了。可以拥有多个这样的句柄,并且可以使用该命令添加、更改和删除句柄
5. git archive
该命令用于创建项目特定快照的归档文件,可以用来共享
6. git submodule
该命令用于管理普通仓库中涉及的外部仓库。这些外部仓库可以用于库或其他类型的共享资源,该命令有若干子命令
(add update sync)等,可以管理这些资源
检视与比较
1. git show
该命令能够以一种简单易读的形式显示Git对象。通常可以使用该命令来显示标签或提交的相关信息
2. git shortlog
该命令用于归纳git log命令的输出。它使用的很多选项和git log相同,但该命令不会列出所有提交,而是展示
按作者进行分组的提交汇总信息
3. git describe
该命令可以接受任何能够解析为提交的内容,然后生成一个比较易读且不会改变的字符串。这可以用来获取提交的描述信息
与提交的SHA-1值一样,也是无歧义的,但更容易理解
调试
Git有一些命令可以帮助排除代码中存在的问题。从判断故障中找出故障的始作俑者
1. git bisect
一款有用的调试工具,通过自动二分查找来找出究竟哪一个提交引入了bug或造成了问题
2. git blame
该命令会标注文件中的行,标注内容包括文件中每一行最后的变更是哪一次提交引入的以及该提交的作者。
这有助于找出具体的人,询问有关特定代码的信息
3. git grep
该命令可以帮助开发者在源代码的所有文件,甚至是项目的旧版本中找到任意字符串
打补丁
Git中有少数命令将提交视为引入的变更,一连串提交就是一系列补丁,这些命令可以帮助以此种方式管理分支
1. git cherry-pick
该命令可以使用单个Git提交所引入的变更,并尝试将其作为当前分支上一个新提交重新引入。选择从分支中单独提取
一到两个提交,而不是将所有变更都合并到分支中
2. git rebase
该命令基本上就是一个自动化 git cherry-pick命令。它确定一系列提交,然后在别处以相同的顺序逐个对其挑拣
3. git revert
该命令的效果与git cherry-pick相反,它将所提交的变更以完全相反的方式应用,实际上就是将变更撤销或还原
电子邮件
包括Git本身在内的很多Git项目都是完全通过邮件列表维护的。无论是生成可以通过电子邮件轻松发送的补丁,还是
应用电子邮箱中的补丁,Git内建了大量的工具以简化这类操作过程
1. git apply
该命令可以应用由git diff或者甚至是GNU diff命令生成的补丁,除少数差异外,功能与git patch类似
2. git am
该命令可以应用电子邮箱中的补丁,特别是mbox格式化过的那些,可以轻松通过电子邮件接收补丁并将这些补丁应用到项目
3. git format-patch
该命令可用于生成一系列发送到邮件列表中的mbox格式的补丁
4. git imap-send
该命令可以将 git format-patch 生成的邮箱上传到IMAP草稿箱文件夹
5. git send-email
该命令可以利用电子邮件发送由 git format-patch生成的补丁
6. git request-pull
该命令只是用来生成待发送的电子邮件的正文实例
外部系统
Git有几个能够整个其他版本控制系统的命令
1. git svn
可作为客户端与SVN版本控制系统通信,这意味着可以使用Git从SVN服务中检出或是向其提交
2. git fast-import
对于别的版本控制系统或者其他格式的导入,都可以使用该命令快速地将不同的格式映射成Git易于记录的形式
管理
1. git gc
该命令会在仓库中执行垃圾回收,删除数据库中无用的文件,将余下的文件打包成一种更有效的格式
2. git fsck
该命令用于检查内部数据库存在的问题或不一致性
3. git reflog
该命令检查所有分支头部指针所在位置的日志,找出在重写历史记录时可能丢失的提交
4. git filter-branch
该命令可以根据一些模式来重写多个提交,例如删除所有位置上的某个文件,或是在仓库中国的某个子目录中提取一个项目
底层命令
......