Git命令总结
Git的基本配置
查看当前所有配置项
命令:git config --list
或 git config -l
配置姓名和邮箱
命令:
git config --global user.name "your name"
git config --global user.email "your email"
说明:你每次commit的时候,Git都需要记录是谁提交的,因此需要全局配置一下姓名和邮箱,这样才能commit。
Git管理本地仓库
基本操作
新建仓库(init)
命令:git init [目录名称]
说明:
git init
后面如果不跟目录名的话,执行这个命令之后,当前文件夹(pwd查看到的当前路径)就会变成Git可以管理的仓库,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时候都可以追踪历史,或者在将来某个时刻可以“还原”。指令git init
命令后当前目录下会多一个.git
目录,这个目录就是Git用来跟踪管理仓库的。
git init
后面如果跟目录名的话,如果存在该目录,就将该目录管理起来,如果不存在该目录,就新建一个目录并将那个目录管理起来。
将文件从工作区提交到暂存区(add)
命令:git add
说明:在Git中,在提交修改的文件之前,需要把它们添加到暂存区。如果该文件是新创建的,可以执行git add
将该文件添加到暂存区,但是,即使该文件已经被追踪了,也就是说,曾经使用过git add
命令将该文件提交到了暂存区,之后你又修改了它,仍然需要执行git add
将新更改的文件添加到暂存区。
补充:可以使用git add .
一次性提交所有修改的文件到暂存区。
将暂存区的文件保存为快照(commit)
命令:git commit
参数:-m,作用是对本次提交的描述信息
参数:-a,作用是跳过git add
直接将工作区保存为快照
说明:使用git add
命令之后你只是将你修改的内容保存到了暂存区里面,但是你还没有保存快照,即你还没有记录下来,如果要保存快照,就要执行命令git commit
。你每次提交的时候,Git都会记录提交者的名字和邮箱,因此在使用git commit
之前要配置你的名字和邮箱:
git config --global user.name 'your name'
git config --global user.email 'your email'
如果你漏掉了-m
选项,Git会尝试为你打开一个编辑器以填写提交信息。如果Git在你对它的配置中找不到相关信息,默认会打开vim
。
查看工作区与暂存区的状态(status)
命令:git status
参数:-s,short的意思,只得到少量描述信息
说明:
git status -s
?? demo1.txt
A demo2.txt
AM demo3.txt
D demo4.txt
MM demo5.txt
以上是简短输入可以输出的信息,有两栏,第一栏是暂存区的,第二栏是工作区的。
??:表示这个文件尚未追踪,意思就是Git无法管理这个文件,这是一个新文件
A :表示这个文件已经被add到了暂存区
AM:表示这个文件已经被add到了暂存区,然后还在工作区做了修改
D:表示这个文件在工作区被删除了
MM:表示这个文件已经add到了暂存区,并且在暂存区和工作区都做了修改(其实就是比较到了工作区和暂存区,暂存区和快照有不同)。
A标志一般只出现在该文件还未保存过快照。
比对内容(diff)
工作区 VS 暂存区
命令:git diff <filename>
说明:比对文件在工作区和暂存区的内容,如果缓存区中没有该文件,则比对文件现在的内容和上次add的内容。
也可以比对和另一分支的内容:
命令:git diff <branch> <filename>
说明:
暂存区 VS 快照
命令:git diff --cached <filename>
说明:表示查看已经add进暂存区但是尚未commit的内容同最新一次commit时的内容的差异,可以指定快照版本:
git diff --cached <commit> <filename>
工作区 VS 快照
命令:git diff <commit> <filename>
说明:查看工作目录和快照的区别,快照可以用<commit>
指定版本
快照 VS 快照
命令:git diff <commit> <commit>
说明:查看任意两个版本的快照之间的区别
以上命令可以不指定<filename>
,则对全部文件操作
以上命令中的commit
命令是用来指定快照版本的,书写方式如下:
HEAD
,最近一次commit
HEAD^
,上次commit
HEAD~100
,上100次commit
可以用每次提交产生的哈希值代替HEAD
参数:–stat
参数说明:显示摘要而不是整个diff,和其他参数一起使用。
撤销修改(reset)
命令:git reset HEAD --file
,–可以省略
说明:如果你缓存了你不想缓存的文件,并不想将它提交到HEAD中,就可以使用这个命令撤销缓存,表示直接从缓存中删除某个文件。
将文件从缓存中移除(rm)
命令:git rm file
说明:默认情况下,git rm file
会将文件从缓存区和硬盘中删除,如果要在工作区保留该文件,可以使用git rm --cached file
移动或重命名文件(mv)
命令:git mv <source> <destination>
说明:该指令相当于三个指令
git rm --cached orig
mv orig new
git add new
分支管理
列出所有分支
命令:git branch
说明:这是git branch
没有参数的时候,会列出在本地的所有分支,你所在的分支的行首会有个星号作标记。在git init
的时候,默认情况下Git会创建一个master分支。(其实master并没有什么意思,只是默认的一个而已)
创建分支
命令:git branch (branchname)
说明:创建一个新的分支,和当前分支在指向同一个位置(提交).
切换分支
命令:git checkout (branch)
说明:切换到某一分支
创建并切换到该分支
命令:git checkout -b (branchname)
说明:创建一个新分支,并切换到该分支上面
删除分支
命令:git branch -d (branchname)
说明:删掉一个分支
合并分支
命令:git merge (branchname)
说明:将一个分支合并到你当前的分支
合并冲突
当两个分支同时修改同一个文件的同一段代码时,合并时就会出现合并冲突,这个时候如果执行git merge
,就会提示合并冲突,并在原来的文件中插入一些标志告诉你是哪里冲突了,这个时候你就可以按照他的提示修改代码从而合并冲突,修改完后执行git status -s
命令会看到工作区和暂存区的状态都是U,可以执行git add
和git commit
将修改后的文件提交,这样就合并冲突了。
查看历史记录
命令:git log [<branch>]
参数:无参数
参数说明:查看每次提交的详细记录,branch是可选项,不加默认显示当前分支的记录。可以使用^
来去掉某一分支的记录
参数:--oneline
说明:查看历史记录紧凑简洁的版本
参数:--graph
说明:查看历史中什么时候出现了分支、合并
标签管理
查看所有标签
命令:git tag
创建标签
命令:git tag <name> [-a] [SHA]
参数:-a
说明:-a
选项意为创建一个带注解的标签,从而使你为标签添加注解。绝大部分时候都会这么做,不用-a
选项也可以执行,但它不会记录这标签是什么时候打的,谁打的,也不会让你添加标签的注解。
SHA是你某次提交的哈希code,可以在以后某个时刻追加标签,当然也可以使用HEAD
.
查看标签
命令:git log --decorate
说明:查看历史所打的所有标签
删除标签
命令:git tag -d <name>
说明:删除一个本地标签
Git管理远程仓库
查看所有远程仓库
命令:git remote
说明:如果没有任何参数,Git会列出它存储的所有远端仓库的别名,默认情况下,如果你的项目是克隆的,Git会自动将你克隆的项目的仓库添加到列表中,并取名origin
,如果执行时加上-v
参数,还可以看到每个别名的实际链接地址。
添加远端仓库
命令:git remote add [alias] [url]
说明:此命令将[url]
以[alias]
的别名添加为本地的远端仓库。
删除远端别名
命令:git remote rm [alias]
从远端仓库下载最新分支与数据
命令:git fetch [alias] [--all]
从远端仓库提取数据并尝试合并到当前分支
命令:git pull
说明:该命令就是在git fetch
之后紧挨着git merge
远端分支到你所在的分支。
推送新分支与数据到远端仓库
命令:git push [alias] [branch]
克隆一个远端仓库到本地
命令:git clone [url]
推送本地标签
命令:git push [alias] <tagname> [--tags]
说明:可以不指定名字,直接使用--tags
推送所有未推送过的标签
删除一个远端标签
首先在本地删除,然后在远程删除,命令是:
git push [alias] :ref/tags/<tagname>