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工作区与版本库示意图:

0

图片来源:廖雪峰的博客

  • 常用术语

  • 工作区与版本库:工作区是一个包含.git子目录(内含版本库)中的目录。可以使用init命令在当前目录中创建版本库

  • 版本提交:一次版本提交通常定义了版本库中所有文件的一个版本,它详细说明了版本所含数据,用add命令来确定哪些文件将被纳入下一次提交,用commit命令创建新的版本提交

  • 查看信息,用status命令,查看哪些文件已被本地修改,以及哪些修改将纳入下次提交。log命令可用来显示提交历史,diff命令可以用来显示两个版本之间的差异。

  • 克隆:对用clone命令创建某一版本库的副本,称为该版本库的克隆体。

  • 推送与拉回:pushpull命令可用于在本地和远程版本库之间共享版本提交。

  • 提交:通过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命令可以从远程版本的分支上获取提交。

  • 远程跟踪分支:可以指定远程版本库中分支的位置,例如clonefeaturea。然后用fetchpull命令去更新该远程跟踪分支

  • pull = fetch + merge:pull命令是两种操作的组合。

  • 推送:push命令可将本地分支中的提交传送给远程版本库

  • 创建标签:用tag来创建标签。

  • 推送:push命令可以只用来传送那些被明确指定的标签,例如git push origin1.2.3.4,如果使用 --tags 参数就不用指定标签。

  • 拉回与获取:pullfetch都会自动获取其所涉及分支中的所有标签,除非在命令中使用 --no-tags 参数

  • 显示所有标签:通过git tag -l命令来完成

  • 在日记中显示标签:可以使用git log --decorate命令

  • 共享标签中的提交:想要知道某一标签中是否包含了某一提交,可以用带 --contains 参数的tag命令。

  • 嵌入子模块:可以通过submodule addsubmodule init命令来嵌入一个子模块

  • 克隆包含子模块的项目:可以在克隆该项目后,对其调用submodule initsubmodule update命令

  • 选择子模块中的某个新版本:通过checkout命令查看,并选择在子模块目录中的新提交,然后在主版本库中对其做一次提交

  • 同时处理模块版本库与主版本库:现在模块版本库中执行提交,然后在主版本库中执行提交。必须各自执行push命令。

  • 嵌入子树:通过subtree add命令来嵌入子树

  • 选择子树中的某个新版本:通过subtree pull命令来将模块目录更新到所需的分支或标签上。

  • 提取模块目录中的修改:通过subtree split命令创建一个单独的分支,用于包含模块目录的修改。然后使用merge命令将修改进行合并,用push推送。

posted @ 2021-06-03 23:08  zonkidd  阅读(101)  评论(0编辑  收藏  举报