Git常用命令及术语
主要为了方便查找使用
- 简单命令集合
用处 | 命令 |
---|---|
工作区和版本库 | |
初始化工作目录 | git init |
把文件添加到暂存区(stage) | git add file.txt |
查看当前暂存区状态 | git status |
撤销add(取消暂存) | git reset HEAD |
取消暂存区的某个文件 | git reset HEAD file.txt |
提交当前暂存区中的所有修改 | git commmit -m “备注” |
查看修改内容 | git diff file.txt |
版本回退 | |
查看提交历史 | git log |
查看所有命令历史 | git reflog |
回退到某个版本 | git reset --hard xxxx(版本号) |
git reset --hard HEAD^ (有几个^就是回退几个版本) | |
放弃当前修改,恢复到最新版本(最近一次commit或add的状态) | git checkout -- file.txt |
远程仓库 | |
关联一个远程库 | git remote add origin git@server -name:path/repo-name.git |
关联后第一次提交本地master | git push -u origin master(-u即将本地master和远程master关联起来) |
提交本地master | git push origin master |
克隆 | git clone git@server-name:path/repo-name.git |
本地与服务器同步 | git pull |
分支管理 | |
查看分支 | git branch |
创建分支 | git branch |
删除分支 | git branch -d |
切换到分支 | git check out |
创建并切换到新分支 | git checkout -b |
合并某分支到新分支 | git merge |
查看分支图 | git log --graph |
- Git工作区与版本库示意图:
图片来源:廖雪峰的博客
-
常用术语
-
工作区与版本库:工作区是一个包含.git子目录(内含版本库)中的目录。可以使用init命令在当前目录中创建版本库
-
版本提交:一次版本提交通常定义了版本库中所有文件的一个版本,它详细说明了版本所含数据,用add命令来确定哪些文件将被纳入下一次提交,用commit命令创建新的版本提交
-
查看信息,用status命令,查看哪些文件已被本地修改,以及哪些修改将纳入下次提交。log命令可用来显示提交历史,diff命令可以用来显示两个版本之间的差异。
-
克隆:对用clone命令创建某一版本库的副本,称为该版本库的克隆体。
-
推送与拉回:push与pull命令可用于在本地和远程版本库之间共享版本提交。
-
提交:通过commit命令可以创建一次提交。一次提交通常保存了项目的某种确定状态,其中包含了该项目中所有文件的情况。
-
选择性提交:可以用add命令来指定哪些文件将会被存储在快照中,其余所有文件将保持不变。
-
代码段选取:可以通过 --interactive选项来逐行或逐段选取自己所需要的修改。
-
查看状态:status命令可以显示哪些文件被纳入了下次提交。
-
重置暂存区:通过git reset HEAD命令将所有文件重置到当前的HEAD版本
-
.gitignore文件:可以在这个文件中列出不需要被Git管理的文件目录
-
储藏:通过stash命令在工作区和暂存区中当前所做的修改储藏起来。之后用git stash pop命令将其恢复。
-
对象数据库:所有提交中的文件、目录以及相关的元数据都将被存储在该数据库中。
-
SHA1散列值:可以通过一个SHA1散列值从对象数据库中捡取相关对象。SHA1散列值是一种针对文件内容的加密校验值。
-
Blob对象:文件内容将会被存储在相应的blob对象中。
-
Tree对象:目录将被存储在相应的tree对象中,一个tree对象中通常会包含一份文件名列表,包含这些文件名和存储在blob或tree对象中内容的SHA1散列值。
-
提交图:提交对象会沿着各自的tree和Blob对象,形成一个提交图
-
重命名检测:文件的重命名和移动操作在提交之前无须报备。
-
可以通过blame命令来确定某几行代码的来源。
-
创建分支:通过branch命令来新建分支
-
Checkout:用checkout命令切换到另一个分支上
-
Reflog:git会记录我们在每次提交中对分支指针所做的所有修改。
-
垃圾处理:可以用gc命令进行清理。
-
分支合并:使用merge命令可进行分支的合并。
-
变基操作:git能将提交复制到提交图中的其他地方。尽管其中的修改与元数据将保持不变,但该复制结果会有一个新的提交散列值。可以通过rebase命令以多种方式对提交图进行重构
-
理顺历史:如果在并行式开发的过程中使用merge命令解决了其中的冲突,会得到一部经历了多次分岔与合并的历史。
-
rebase**的 --onto 选项:可以将某一分支移动到提交图中另外一个完全不同的位置。
-
获取:fetch命令可以从远程版本的分支上获取提交。
-
远程跟踪分支:可以指定远程版本库中分支的位置,例如clone、featurea。然后用fetch和pull命令去更新该远程跟踪分支
-
pull = fetch + merge:pull命令是两种操作的组合。
-
推送:push命令可将本地分支中的提交传送给远程版本库
-
创建标签:用tag来创建标签。
-
推送:push命令可以只用来传送那些被明确指定的标签,例如git push origin1.2.3.4,如果使用 --tags 参数就不用指定标签。
-
拉回与获取:pull和fetch都会自动获取其所涉及分支中的所有标签,除非在命令中使用 --no-tags 参数
-
显示所有标签:通过git tag -l命令来完成
-
在日记中显示标签:可以使用git log --decorate命令
-
共享标签中的提交:想要知道某一标签中是否包含了某一提交,可以用带 --contains 参数的tag命令。
-
嵌入子模块:可以通过submodule add和submodule init命令来嵌入一个子模块
-
克隆包含子模块的项目:可以在克隆该项目后,对其调用submodule init和submodule update命令
-
选择子模块中的某个新版本:通过checkout命令查看,并选择在子模块目录中的新提交,然后在主版本库中对其做一次提交
-
同时处理模块版本库与主版本库:现在模块版本库中执行提交,然后在主版本库中执行提交。必须各自执行push命令。
-
嵌入子树:通过subtree add命令来嵌入子树
-
选择子树中的某个新版本:通过subtree pull命令来将模块目录更新到所需的分支或标签上。
-
提取模块目录中的修改:通过subtree split命令创建一个单独的分支,用于包含模块目录的修改。然后使用merge命令将修改进行合并,用push推送。