git命令注解

270 阅读7分钟

读完stormzhang大神写的Git的入门书《learn-github-from-zero》后写的个人笔记

Git 命令列表


usage: git [--version] [--help] [-C <path>] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)                  //启动一个工作区域
   clone      将存储库复制到新目录中
   init       创建一个空的Git存储库,或者重新初始化现有的库

work on the current change (see also: git help everyday)            //对当前更改的工作
   add        向索引添加文件内容
   mv         移动或重命名文件、目录或符号链接
   reset      将当前头重置到指定状态
   rm         从工作树和索引中删除文件

examine the history and state (see also: git help revisions)        //检查历史和状态
   bisect     使用二进制搜索来找到引入bug的提交
   grep       匹配模式的打印行
   log        显示提交日志
   show       显示各种类型的对象
   status     显示工作树状态

grow, mark and tweak your common history                            //成长,标记和调整你的共同历史记录
   branch     列出、创建或删除分支
   checkout   切换分支或恢复工作树文件
   commit     记录对存储库的更改
   diff       显示提交、提交和工作树之间的更改,等等
   merge      Join two or more development histories together       // 将两个或多个开发历史合并在一起
   rebase     重新应用于另一个基本技巧之上
   tag        创建、列表、删除或验证与GPG签名的标记对象

collaborate (see also: git help workflows)                          //协作(参见:git帮助工作流)
   fetch      Download objects and refs from another repository     //从另一个存储库下载对象和refs
   pull       从另一个库或本地分支获取并集成
   push       与相关对象一起更新远程refs

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.

简单首次提交过程

0、 git pull origin master 把远程新的代码更新到本地。一般我们在 push 之前都会先 pull ,这样不容易冲突。
1、先创建空的文件夹
2、创建 .md 文件 [可项目有忽略]
3、git init 初始化
4、git status 查看状态 (处理代码冲突时快速查看状态问题)
5、git add . 添加文件 --->等待被提交 可用 [ git rm --cached ] 清除该缓存
6、 git commit -m '提交说明' commit 是提交的意思,m 代表是提交信息,[ git log ]命令可以查看所有产生的 commit 记录
7、git push origin master 是把本地代码推到远程 master 分支




创建分支

8.1、git branch name git branch 查看当前分支,后面加上参数name就是创建名为name 的分支, '*' 代表当前使用的分支
8.2、git checkout name切换到name的分支上

  • [ git checkout -b name ] 一步同上8.1-8.2操作



合并分支

9.1、git checkout master 切换到主分支上
9.2、git merge name 合并name分支的代码



删除分支

10.1、git branch -d name 删除空的name分支
10.2、git branch -D name 强行删除非空的name分支
10.3、git push origin -d name 删除远程分支



版本控制

11.1、git tag 查看历史tag记录
11.2、git tag v1.0 当前创建标签V1.0
12、git checkout v1.0 切换到v1.1标签



SSH协议

Linux 与 Mac 都是默认安装了 SSH ,而 Windows 系统安装了 Git Bash 应该也是带了 SSH 的

1、ssh-keygen -t rsa //就是指定 rsa 算法生成密钥,接着连续三个回车键(不需要输入密码),然后就会生成两个文件 id_rsa 和 id_rsa.pub ,而 id_rsa 是密钥, id_rsa.pub 就是公钥

2、接下来要做的是把 id_rsa.pub 的内容添加到 GitHub 上,这样你本地的 id_rsa 密钥跟 GitHub 上的 id_rsa.pub 公钥进行配对,授权成功才可以提交代码。

2.1、先在 GitHub 上的设置页面,点击左侧 SSH and GPG keys
2.2、然后点击右上角的 New SSH key 按钮 需要做的只是在 Key 那栏把 id_rsa.pub 公钥文件里的内容复制粘贴进去就可以了,Title 那栏不需要填写,点击 Add SSH key 按钮就ok了。



git config


$ git config
用法:git config [<options>]

配置文件位置
    --global		                            使用全局配置文件
    --system		                            使用系统配置文件
    --local 		                            use repository配置文件
    -f,--file <file>	                        使用给定的配置文件
    --blob <blob-id>	                        从给定的blob对象读取配置

行动
    --get 			                            get value:name [value-regex]
    --get-all		                            获取所有值:key [value-regex]
    --get-regexp		                        获取regexp的值:name-regex [value-regex]
    --get-urlmatch		                        获取特定于URL的值:section [.var] URL
    --replace-all		                        替换所有匹配的变量:name value [value_regex]
    --add			                            添加一个新变量:name value
    --unset			                            删除变量:name [value-regex]
    --unset-all		                            删除所有匹配项:name [value-regex]
    --rename-section 	                        rename section:old-name new-name
    --remove-section	                        删除一个部分:name
    -l, --list 		                            list all
    -e,--edit 		                            打开一个编辑器
    --get-color		                            找到配置的颜色:slot [default]
    --get-colorbool		                        找到颜色设置:slot [stdout-is-tty]

类型
    --bool			                            值为“true”或“false”
    --int			                            值是十进制数
    --bool-or-int		                        值为--bool或--int
    --path			                            值是路径(文件或目录名称)
    --expiry-date		                        值是一个到期日

其他
    -z,--null		                            用NUL字节终止值
    --name-only		                            仅显示变量名称
    --includes 		                            包含查找指令
    --show-origin		                        显示配置的起源(文件,标准输入,blob,命令行)


友情提醒,在提交代码之前先要设置下自己的用户名与邮箱,这些信息会出现在所有 的 commit 记录里,执行以下代码就可以设置:
git config —global user.name "你的名字" 
git config —global user.email "你的邮箱"

----------------别名----------------
git config --global alias.psm 'push origin master' 
git config --global alias.plm 'pull origin master'
//常用到的git push origin master 和 git pull origin master 直接就用 git psm 和 git plm 代替

git log 查看
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)% d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative" // 别名 git lg 



其他配置

有些人纳闷我的终端怎么有各种颜色,自己却不是这样的,那是因为你们没有开启给 Git 着 色,输入如下命令即可:
git config --global color.ui true
还有些其他的配置如:
git config --global core.quotepath false 设置显示中文文件名
以上基本所有的配置就差不多了,默认这些配置都在 ~/.gitconfig 文件下的,你可以找到这个文件查看自己的配置,也可以输入 git config -l 命令查看。



git diff

git diff 只能比较当前文件和暂存区[还没有执行 git add 的文件]之间文件差异, 当然跟暂存区做比较之外,他还可以有其他用法,如比较两次 commit 之间的差异。

比较两个分支之间的差异,比较暂存区和版本库之间的差异等,具体用法如下:
git diff <$id1> <$id2> 比较两次提交之间的差异
git diff <branch1>..<branch2> 在两个分支之间比较
git diff --staged 比较暂存区和版本库差异



checkout

我们知道 checkout 一般用作切换分支使用,比如切换到 develop 分支,可以执行:

git checkout develop

但是 checkout 不只用作切换分支,他可以用来切换tag,切换到某次commit,如: git checkout v1.0 git checkout ffd9f2dd68f1eb21d36cee50dbdd504e95d9c8f7 后面的一长串是commit_id,是每次commit的SHA1值,可以根据 git log 看到。

除了有“切换”的意思,checkout 还有一个撤销的作用,举个例子,假设我们在一个分支开发 一个小功能,刚写完一半,这时候需求变了,而且是大变化,之前写的代码完全用不了了, 好在你刚写,甚至都没有 git add 进暂存区,这个时候很简单的一个操作就直接把原文件还 原:
git checkout a.md

这里稍微提下,checkout 命令只能撤销还没有 add 进暂存区的文件。



stash

正在一个新的分支做新的功能时,需要修改其他分支的代码,暂时切到别的分支,修复完bug再切回来,而且代码也能保留,并且要在我们的代码没有进行 commit ,哪怕你执行了 add 也没关系,我们先执行

1、git stash
2、git stash list 查看暂存区已经有了一条记录
3、git stash apply 还原之前的代码
4、git stash drop 把暂 存区的这次 stash 记录删除

  • 3-4、git stash pop 来代替 apply 命令,pop 跟 apply 的唯一区别就是 pop 不但会帮你把代码还原,还自动帮你 把这条 stash 记录删除,省的自己再 drop 一次了,为了验证你可以紧接着执行 git stash list 命令来确认是不是已经没有记录了。

5、git stash clear 清空所有暂存区的记录,drop 是只删除一条,当然后面可以跟 stash_id 参数来删除指 定的某条记录,不跟参数就是删除近的,而 clear 是清空



merge & rebase

merge 分支是合并的意思,在一个 featureA 分支开发完了一个功能,需要合并到主分支 master 上去
git checkout master
git merge featureA

其实 rebase 命令也是合并的意思,上面的需求我们一样可以如下操作:
git checkout master
git rebase featureA

rebase 跟 merge 的区别
你们可以理解成有两个书架,你需要把两个书架的书整理到一起去,
第一种做法是 merge ,比较粗鲁暴力,就直接腾出一块地方把另一个书架的书全部放进去,虽然暴力,但是这种做法你可以知道哪些书是来自另一个书架的;
第二种做法就是 rebase ,他会把两个书架的书先进行比较,按照购书的时间来给他重新排序,然后重新放置 好,这样做的好处就是合并之后的书架看起来很有逻辑,但是你很难清晰的知道哪些书来自 哪个书架的。



Git分支管理

git branch name 创建分支
git checkout name 切换分支
[git checkout -b name] 以上两步合并,即新建并且自动切换到分支

git push origin name 把分支推送到远程仓库
git push origin name:name2 远程的分支想取名叫 name2

查看本地分支列表

git branch

查看远程分支列表

git branch -r

删除本地分支

git branch -d name
git branch -D name (强制删除)

删除远程分支

git push origin :name

如果远程分支有个 develop ,而本地没有,你想把远程的 develop 分支迁到本地:
git checkout develop origin/develop

同样的把远程分支迁到本地顺便切换到该分支:
git checkout -b develop origin/develop