一、目的
Git的熟练使用是一个加分项,本文将对常用的Git命令做一个基本介绍,看了本篇文章,再也不会因为不会使用git而被嘲笑了。
二、设置与配置
在第一次调用Git到日常的微调和参考,用得最多的就是config和help命令。
2.1 git config
Git有很多默认操作,其中大部分都可以更改,也可以指定成你的偏好方式。这涉及方方面面的设置,从告诉git你的姓名到特定的终端颜色或使用的编辑器。该命令可以选择全局配置或者针对某些仓库进行设置。可以将配置变量储存在三个不同的位置。
1)/etc/gitconfig文件
包含系统中所有用户及其仓库的值。如果你向git config传入--system选项,会专门从该文件中读写配置变量。
2)~/.gitconfig
针对的是你自己,可以传入--global选项是git专门从该文件中读写配置变量。
3).git/config
针对单个仓库。 每一级都会覆盖上一级中的设置,因此.git/config中的值优于/etc/gitconfig中的值。
2.2 用户身份
安装好Git后的第一件事就是设置用户名和电子邮件地址。因为git的每一次提交都需要用到这些信息,而且还会被设置到所创建的提交中,不可更改。设置命令如下:
git config --global user.name "xxx"
git config --global user.email "xxx"
2.3 个人编辑器
设置好身份之后就可以配置默认的文本编辑器了,当git需要输入消息的时候会用到这个编辑器。如果没有设置,会使用系统默认的编辑器。
git config --global core.editor "xxx"
2.4 检查个人配置
如果想查看你的设置,可以通过下面的命令查看:
git config --list
git config <key>
你可能会多次看到同一个键值的输出,这是因为git会从不同文件(/etc/gitconfig和~/.gitconfig)中读取相同的键。可以通过下面命令查看每个键的值。
2.5 获取帮助
如果在使用git的过程中需要帮助,有两种方法可以查看帮忙。
git help <verb>
git <verb> --help
三、获取与创建项目
建立git项目的方法有两种。一种是把现有的项目或者目录导入到git中,另一种是从服务器上克隆现有的git仓库。
3.1 git init
要在现有目录中初始化git仓库,只需进入项目并输入:
git init
这会创建一个.git的子目录。这个子目录包含了构成git仓库骨架的所有必需文件。
3.2 git clone
如果需要获取现有仓库的一个副本,可以使用:
git clone [url]
git clone命令其实有些像是多条命令的组合。它创建一个新目录,进入该目录并执行git init来初始化一个空的新仓库,为指令的URL添加一个远程仓库,对远程仓库执行git fetch,然后通过git checkout将最新的提交检出到工作目录。
四、快照基础
对于暂存工作内容然后提交至历史记录这种基本的工作流,只设计少说基础命令。
4.1 git add
git add 命令将工作目录中的内容添加到暂存区(或"索引"),以备下次。git commit命令在执行时,默认只查看暂存区,因此git add的执行结果与下次提交的快照一模一样。
git add
4.2 git status
此命令可以显示出工作目录和暂存区中文件的不同状态。其中包含哪些文件已修改但未暂存,哪些已暂存但尚未提交。在正常的显示中,该命令还会包含一些有关如何在暂存区之间移动文件的提示。
git status
4.3 git diff
git diff 命令可英语查看任意两棵树之间的差异。这种差异可以存在于工作环境与暂存区之间(git diff)、暂存区与最后一次提交之间(git diff --cached或git diff --staged)或是两次提交之间(git diff master branchB)。
git diff
git diff --cached
git diff --staged
git diff master branchB
4.4 git commit
git commit命令接受由git add暂存的所有文件能内容,并在数据库中记录一份新的永久性快照,然后将当前分支的指针指向它。如果相对对上一次的提交进行修改,使用git commit --amend
git commit
git commit --amend
4.5 git reset
git reset命令主要用户撤销操作,从命令中的动词就能猜出个大概。它能够移动HEAD指针,更改索引或暂存区,如果你使用--hard,还可以更改工作目录。最后一项功能如果使用不当,有可能会造成工作成果的丢失,所以在使用前要确定自己完全理解了用法。
git reset
git reset --hard
4.6 git rm
git rm命令用于从git的暂存区和工作目录中移动文件。与git add类似,它会暂存下一次提交的文件删除操作。
git rm
4.7 git mv
git mv是一个便捷命令,它可以移动文件,然后分别在新文件上执行git add,在旧文件上执行git rm。
git rm
4.8 git clean
git clean命令用于移除工作目录中不需要的文件。这些文件包含项目构建过程中产生的临时文件或者冲突文件。
git clean
五、分支与合并
在git中,少数命令实现了大部分的分支与合并功能。
5.1 git branch
git branch实际上类似一个分支管理工具。它可以列出你拥有的分支、创建新分支、删除分支以及重命名分支。
git branch
5.2 git checkout
git checkout命令用于切换分支并将内容检出到工作目录中。
git checkout 已有分支
git checkout -b 新分支
5.3 git merge
git merge命令用于将一个或多个分支合并到已检出的分支,然后将合并结果设为当前分支。
git merge <branch> // 要合入分支的名字
5.4 git log
git log命令可以从最近的提交快照开始,向后显示项目的可访问历史记录。它默认只显示当前所在分支的历史记录,但是也可以提供进行遍历的其他分支。该命令还经常用于显示两个或多个分支在提交层面上的差异。
git log
-p和--stat项目来熟悉每次提交所引入的变化。 --pretty和--oneline选项查看更简洁的历史记录。 --decorate选项轻松实现分支指针位置可视化,还可以利用--graph选项来查看分叉历史究竟是什么样子。
5.5 git stash
git stash命令用于临时存储未提交的工作,这样做为的是无需提交未完成工作的情况下清理工作目录。
git stash
git stash pop
5.6 git tag
git tag命令可以给代码历史记录中的某个历史点指定一个永久性的书签。它通常用于发布相关的事项。
git tag -a
六、项目共享及更新
在git中,访问网络的命令并不多,基本上所有命令的操作对象都是本地数据库。如果你打算共享工作成果或是从别处拉去拉取变更,有几个命令可以用处理远程仓库。
6.1 git fetch
git fetch命令与远程仓库通信,获取该仓库中尚未拥有的所有内容,并将其保存在本地数据库中。
git fetch
6.2 git pull
git pull命令基本上就是git fetch和git merge命令的组合,git先从指定的远程仓库中获取内容,然后立刻尝试将其合入你所在的分支。
git pull
6.3 git push
git push命令能够与其他仓库通信,确定本地数据库与远程仓库在内存上存在的不同,然后将差异推送到其他仓库。
git push
6.4 git remote
git remote命令可用于管理远程仓库记录。可以将很长的URL保存成一个简短的句柄,比如origin,这样就不用总是输入一串内容了。你可以拥有多个这样的句柄,并且可以使用git remote命令添加、更改和删除句柄。
git remote
6.5 git submodule
git submodule命令用于管理普通仓库中设计的外部仓库。这些外部仓库可以用于库或其他类类型的共享资源。该命令有若干子命令(add、update、sync等),可以管理这些资源。
git submodule udpate --init
git submodule udpate --recursive // 递归更新子仓库
七、检视与比较
7.1 git show
git show命令能够以一种简单易读的形式显示Git对象。通常可以使用该命令来显示标签或提交的相关信息。
git show
7.2 git shortlog
git shortlog命令用于归纳git log命令的输出。它使用的很多选项与git log命令一样,但是该命令并不会列出所有提交,而是展示按作者进行分组的提交汇总信息。
git shortlog
7.3 git describe
git describe命令可以接受任何能够解析为提交的内容,然后生成一个比较易读且不会改变的字符串。它可以用来获取提交的描述信息,与提交的SHA-1值一样,它也是无歧义的。
git describe
八、调试
git 有一些命令可以帮忙排除代码中存在的问题。从判断故障源到找出故障的始作俑者,不一而足。
8.1 git bisect
git bisect是一款极为有用的调试工具,他通过自动二分查找来找出究竟是哪一个提交首先引入了bug或造成了问题。
git bisect
8.2 git blame
git blame命令会标注文件中的行,标注内容包括文件中每一行最后的变更是哪一次提交引入的以及该提交的作者。这有助于找出具体的个人,以便询问有关特定代码的详细信息。
git blame
8.3 git grep
git grep命令可以帮助你在源代码的所有文件,甚至是项目的旧版本找到任意字符串。
git grep
九、打补丁
Git 中有少数命令将提交视为引入的变更,一连串提交就是一系列补丁。这些命令可以帮助你以此种方式管理分支。
9.1 git cherry-pick
git cherry-pick命令可以使用单个git提交所引入的变更,并尝试将其作为当前分支上的一个新提交重新引入。选择从分支中单独提取一到两个提交,而不是将所有变更都合并到分支中,这种做法还是有用处的。
git cherry-pick
9.2 git rebase
git rebase命令基本上就是一个自动化的git cherry-pick命令。它确定一系列提交,然后再以相同的顺序逐个对其挑拣。
git rebase
9.3 git revert
git revert命令的效果与git cherry-pick命令相反。它将你提交的变更以完全相反的方式应用,实际上就是将变更撤销或还原。
git revert
9.4 git apply
git apply命令可以应用由git diff命令生成的补丁。
git apply
一个专注于“嵌入式知识分享”、“DIY嵌入式产品”的技术开发人员,关注我,一起共创嵌入式联盟。