Git版本控制 —— 常用命令速查
Git版本控制 —— 常用命令速查
啊哼哼 发表于3个月前
Git版本控制 —— 常用命令速查
  • 发表于 3个月前
  • 阅读 6
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

git init (初始化版本库)

此命令用于创建一个git版本库。执行此命令的目录下会多出一个“.git”隐藏目录。git版本库信息就存储在这个目录下。

git init

 

“.git”目录中的文件结构如下

$ ls
config  description  HEAD  hooks/  info/  objects/  refs/
config git配置文件
description 仓库的描述信息,主要给gitweb等git托管系统使用
HEAD 这个文件包含了一个档期分支(branch)的引用
hooks/ 这个目录存放一些shell脚本,可以设置特定的git命令后触发相应的脚本;在搭建gitweb系统或其他git托管系统会经常用到hook script
info/ 包含仓库的一些信息
objects/ 所有的Git对象都会存放在这个目录中,对象的SHA1哈希值的前两位是文件夹名称,后38位作为对象文件名
refs/ 这个目录一般包括三个子文件夹,heads、remotes和tags,heads中的文件标识了项目中的各个分支指向的当前commit

 

git clone (克隆项目)

此命令用于将远程版本库克隆到本地。

git支持https和ssh协议进行项目的克隆操作

git clone https://git.oschina.net/imlichao/git-example.git
git clone git@git.oschina.net:imlichao/git-example.git

 

git status(查看文件状态)

此命令用于查看更改过的文件当前的状态,也就是说文件目前在哪个区域内有没有提交等信息。

git status

下面介绍一下几类文件的状态提示

没有加入到git版本管理的文件提示

目前在工作区的文件提示

目前在暂存区的文件提示

文件已提交但是没推送到远程版本库时的提示

文件已推送将不再提示

 

.gitignore(忽略提交)

有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,每次git status都会显示Untracked files ...,有强迫症的童鞋心里肯定不爽。

好在Git考虑到了大家的感受,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

此例子忽略了idea和maven相关的工作目录和文件。

# IDEA
.idea/
*.iml

# maven
target/

 

git add(保存到暂存区)

此命令用于将工作区修改的文件保存到暂存区(包括修改文件、新增文件和删除文件)

git add <file name>

指定文件保存,需要输入文件名

git add src/main/java/pub/lichao/test/Application.java

将当前目录下的所有文件保存,使用“.”作为通配符

git add .

 

git commit(提交文件)

将文件从暂存区全部提交到分支,提交说明必须要填。(不填写提交说明是个非常坏的习惯,所以省略命令这里不介绍)

git commit -m "commit explain"

 

git diff(差异比较)

此命令用于查看不同区域和分支之间的差异。

比较工作区与暂存区文件差异

git diff <file name>

当file name指定了文件名则展示这个文件的差异,当不指定file name时展示所有文件差异。

比较工作区与分支差异

git diff <branch name> <file name>

branch name 代表分支名称。HEAD为当前分支、master为本地主分支、origin/master为远程主分支。

比较暂存区与分支差异

git diff --cached <branch name> <file name>

比较分支之间的差异

git diff <branch name1> <branch name2> <file name>

 

git log (提交日志)

查看提交日志

git log

增加--pretty=oneline参数可以查看精简版日志

git log --pretty=oneline

查看分支合并图

git log --graph

 

git reset(版本回退)

已经提交到分支的文件可以进行版本回退。

HEAD代表当前分支,一个“^”符号回退一个版本,三个就回退三个版本。

git reset --hard HEAD^

我们可以指定回退到某一次提交,其实准确的说应该是根据提交编号,跳转到某次提交。因为只要有提交编号也可以向前跳。

git reset --hard db779694ccfd556b5110dcda64db9dec0f5706cd

 

git reflog(操作日志)

此命令用于查看操作日志。git所有的操作在这里都能找到。

git reflog

如果我们将已提交代码进行了回退但是,发现回退错了。这时候在 git log中是无法找到记录的。这是我们就可以使用reflog命令查找到那次提交记录,然后用reset命令指定到回退前的提交编号。

如下图:

git checkout -- (撤销工作区修改)

此命令用于撤销工作区的修改。特别要注意checkout 后面的“--”如果没有就变成切换分支的命令了。

撤销后会恢复到 最后一次add或commit的状态,也就是说在工作区编辑完的内容没有保存到暂存区的,可以通过此命令全部退回。

撤销指定文件的修改

git checkout -- src/main/java/pub/lichao/test/Application.java

撤销全部工作区修改

git checkout -- .

 

git reset HEAD(撤销暂存区修改)

提交到暂存区的修改可以使用reset HEAD进行撤销。撤销后暂存区内容将被清空。

撤销某一个文件

git reset HEAD src/main/java/pub/lichao/test/Application.java

撤销所有文件

git reset HEAD .

 

git rm (删除文件)

此命令用于删除文件。此操作会自动保存在暂存区(不需要add),所以删除后的文件需要使用git reset HEAD从暂存区撤销,再用git checkout -- 恢复工作区文件。

如果已经提交可以使用git reset进行回退。

git rm pom.xml

 

git branch(分支操作)

此命令用于查看或创建一个新的分支。

查看本地分支

* 号代表当前分支

git branch

 

- a 参数可以看到所有分支,包括远程分支

- v 参数可以看到分支最后一次提交

-vv 可以看到分支对应的远程分支

创建分支

git branch <branch name>

删除分支

git branch -D <branch name>

添加对应关系

添加本地分支和远程分支的对应关系

git branch --set-upstream <branch name> origin/<branch name>

此命令必须用在clone、fetch、pull等命令拉取分支之后才能用

如果本地分支不存在则新建本地分支并关联对应关系。

 

git checkout (切换分支)

此命令用于切换本地分支

切换分支

git checkout <branch name>

切换并创建分支

git checkout -b <branch name>

切换并使用远程分支创建分支

git checkout -b <branch name> origin/<branch name>

此命令必须用在clone、fetch、pull等命令拉取分支之后才能用

这没创建的本地分支和远程分支是有对应关系的

 

git merge(合并分支)

此命令用于合并分支

 

自动合并

将指定分支合并到当前分支

git merge <branch name>

可以使用 --no-ff参数来禁用Fast forward模式。

 

手动解决冲突

当两个分支存在冲突时需要手动解决冲突。

git merge <branch name>

执行合并后如果存在冲突则会提示

这时我们再查看冲突文件时,会增加<<<<<<< HEAD、=======、>>>>>>> dev2

手动处理冲突后,重新提交冲突文件

我们可以使用 git log --graph --pretty=oneline 命令查看冲突解决的的过程

 

git rebase(变基)

此命令用于使用编辑的方式来合并分支。

操作涉及到两个分支一个是提取补丁的分支我们暂且叫“补丁分支”,另一个是执行补丁的分支我们暂且叫“目标分支”。我们首先要将分支切换到“补丁分支”

git checkout dev

然后在“补丁分支”中执行变基命令指定“目标分支”

git rebase master

变基过程中有可能会有冲突,处理冲突后我们需要选择继续、终止或跳过这次变基

 git rebase (--continue | --abort | --skip)

变基完成后要切换到“目标分支”

git checkout master

最后进行一次快进合并

git merge dev

看一下日志“补丁分支”的提交已经都在“目标分支”上执行了一次

 

git stash(储藏场景)

此功能用于储藏当前场景。在我们开发某功能到一半的时候,突然要求临时修复一个bug,这时我们可以将当前代码储藏起来(当工作区或暂存区有未提交代码时不允许切换分支),待bug修复完成后再恢复继续进行工作。

储藏当前场景

git stash

带注释的储藏

git stash save "stash注释"

 

查看储藏的场景

git stash list

在这里我们看到,git可以存储多次。最新的在最上面,也就是越新的序号越小。

 

恢复并删除场景

git stash pop --index <stash@{id}>

--index 代表同时恢复暂存区内容,否则只恢复工作区

stash@{id} 为储藏编号 如果不指定默认恢复最新的也就是stash@{0}那条

 

恢复不删除场景

git stash apply --index <stash@{id}>

--index 代表同时恢复暂存区内容,否则只恢复工作区

stash@{id} 为储藏编号 如果不指定默认恢复最新的也就是stash@{0}那条

 

删除单个场景

git stash drop <stash@{id}>

stash@{id} 为储藏编号 如果不指定默认删除最新的也就是stash@{0}那条

 

清空整个储藏区

git stash clear

 

git remote(查看远程仓库)

git remote -v

-v参数可以查看更详细的信息

这里展示了抓取(fetch)和推送(push)的地址,如果没有推送权限则没有下面这一条。

 

 

git push(推送分支)

此命令用于将本地仓库变更推送到远程仓库中。远程仓库默认名称为origin。

 

当前分支代码推送

推送本地当前分支变更的代码,到远程仓库对应的分支

git push

我们可以使用 git branch -vv命令查看本地分支与远程分支的对应关系(参数是两个v不是w)

 

指定分支代码推送

git push origin <branch name>

origin为远程仓库名 master为本地分支名,这里不需要指定远程分支,因为会推送到对应的分支中。

这里需要解释一下。他的意思是推送本地分支变更branch name到远程分支branch name。如果没有本地branch name将会报错。如果没有远程branch name,那么会在远程新建,但是又不会创建对应关系。再就是只要本地和远程的branch name一致即使没有对应关系也能推送成功(当使用无参数push的时候没有对应关系是推不上去的)。

 

创建远程分支

将本地创建的分支推送到远程仓库

git push -u origin <branch name>:<origin branch name>

-u 这个参数很重要,加上他在远程创建分支后会创建与本地分支的对应关系,没有这个关系是无法push代码的。

如果需要向远程分支push代码<branch name>和<origin new branch name>名称就必须一直。

 

创建对应关系(并创建远程分支)

git push --set-upstream origin <branch name>

为本地拥有的分支和远程分支创建关联关系,branch name必须一致。

如果branch name不存在则会在远程创建这个分支。

 

删除远程分支

git push origin :<origin new branch name>

 

推送指定标签

 git push origin <tag name>

 

推送全部标签

 git push origin --tags

 

删除远程标签

git push origin :<origin tag name>

 

git pull(拉取分支自动合并)

此命令会将远程分支的变更拉取到本地,并和本地对应分支进行合并。

拉取所有远程分支到对应本地分支

git pull

 

拉取远程分支到当前分支

git pull origin <branch name>

 

git fetch(拉取分支不合并)

此命令会将远程分支的变更拉取到本地,但是并不和本地分支进行合并。需要合并时使用git merge命令将远程分支和对应的本地分支进行合并。

git fetch

 

git tag(标签)

标签记录了某一时刻的分支状态,不能前进也不能后退。

查看标签

git tag -n

-n 参数可以看到对应的注释

创建标签

创建当前分支当前提交的标签

git tag <name>

创建当前分支某一次提交的标签

git tag <name><commit code>

commit code为提交编号,使用git log可以查询到编号

创建带说明的标签

git tag -a v1.1 -m "标签说明"

删除标签

git tag -d <name>

 

git show(查看信息)

此命令可以查看分支或标签的详细信息

git show <name>

 

共有 人打赏支持
粉丝 3
博文 37
码字总数 39375
×
啊哼哼
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: