git命令

在使用git之前,应该了解到git有四个区域,分别是 工作区、暂存区、本地版本库、远程版本库

命令解释
git init初始化工作区
git add .将改动的所有文件添加到暂存区
git commit -m “first commit”提交至本地版本库
git push origin master提交至远程版本库

一、reset 用法

## 撤销提交(commit)操作
```shell
# 撤销上一次的提交
git reset --X HEAD^

其中X有如下三种类型

  • mixed : 不删除工作空间改动代码,撤销commit,并且撤销git add . 操作(默认)
  • soft:不删除工作空间改动代码,撤销commit,不撤销git add .
  • hard:删除工作空间改动代码,撤销commit,撤销git add

画个表格方便记忆:

类型工作区改动内容addcommit
hard删除撤销撤销
mixed(默认)不删除撤销撤销
soft不删除不撤销撤销
# 恢复工作区到上一次提交时的状态(如果已提交本次工作区修改的内容)
git reset --hard head^
# 恢复工作区到上一次提交时的状态(如果未提交本次工作区修改的内容)
git reset --hard head
#拉取最近一次提交到版本库的文件到暂存区
git reset HEAD  -- <file>  

场景一:若我们使用reset之后,如何撤销reset?

首先查看所有分支的操作记录

git reflog 

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200511001053466.png可以看到第一个索引bdb6d0c中,使用了reset指令移动了head索引。那么我们此时再通过git reset --hard c5c560b即可撤销该reset操作。
再使用reset的时候,看到使用了head^,它的意思是重置到head的前向一个索引位置。有几个^就往前移动几次索引。

二、revert

# 回滚版本库的某一次的提交 version为某次提交的索引
git revert -n [versino]

git reset 和git revert的区别:
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进

三、恢复工作区内容(checkout)

# 恢复工作区的单个文件到上一次提交时的状态(暂存区覆盖工作区)
git checkout -- <file>
# 恢复工作区到上一次提交时的状态
git checkout .
# 恢复工作区到上一次提交的状态并清空暂存区未提交的内容
git checkout head .

删除

#从磁盘和暂存区删除
git rm -f a.txt
#仅从暂存区删除
git rm --cached a.tx

四、日志

#查看提交日志
git log
# 一行输出
git log --oneline
# 漂亮的格式
git log  --pretty=oneline
#查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
git reflog

五、分支

5.1 创建分支

#创建分支
git branch <branchname>

5.2 提交至远程仓库

# 推送本地分支至远程分支(本地分支与远程分支可以不一致)
git push origin <branchname>:<branchname>
# 如果本地分支与远程分支名字一致则直接使用
git push origin <branchname>

5.3 切换分支

#切换分支
git checkout <branchname>
#创建并切换到该分支
git checkout -b <branchname>
# 创建远程分支dev到本地dev并切换到dev(前提:远程仓库必须存在该分支)
git checkout -b dev origin/dev

有时候我们本地创建的分支没有与远程仓库的相关联,这时候push或者pull操作都会失败,那么我们需要先建立本地关联远程分支。

 #先切换到分支
 git checketout dev
 # 再做关联
 git branch --set-upstream-to=origin/dev

5.4 查看分支

# 列出所有分支
git branch
#查看本地和远程分支
git branch -a
#查看远程分支
git branch -r 

5.5 合并分支

# 将<branchname>分支合并到当前分支
git merge <branchname>

5.6 删除分支

# 删除本地分支
git branch -d <branchname>
# 删除远程分支<branchname>
git push origin  --delete <branchname>
# 删除远程分支<branchname>
git push origin :<branchname>

六、标签(tag)

给历史某次提交打上标签,已表示此次提交比较重要!

# 创建标签(名字为v1.0 可任意起名)
git tag v1.0
#创建标签并附加信息
git tag -a v1.0 -m "create func..."
# 查看目前有的标签
git tag
# 查看标签信息
git show v1.0
# 删除标签
git tag -d v1.0
# 推送标签至远程
git push origin v1.0
# 一次性推送所有标签至远程
git push origin --tags
# 删除远程标签
git push origin :refs/tags/v1.0

七、rebase

7.1 合并commit

我们可以使用rebase命令合并多次commit为一次。

git rebase -i  [startpoint]  [endpoint]

其中startpoint,endpoint即为编辑区间,效果相当于(startpoint,endpoint](前开后闭)。
eg:
现在我本地提交了很多次,而我想把红框框的三次合并为一次提交。如果[endpoint]不是head当前所指向 hash值,那么其后面 的提交将会被丢弃
所以我们也可以不指定[endpoint],这样就相当于合并[startpoint] 后面的所有提交了。

在这里插入图片描述
其实除了rebase,还有一种更为简单的方式,这里先说一下。
使用之前介绍reset命令:

git reset --hard b11326a
git commit -m "merga commit "

现在是介绍rebase,那我们还是使用如下命令合并红框中的三次提交。

git rebase -i b11326a^ d58574b

输入完命令后,弹出如下内容。
在这里插入图片描述
其中:

  • pick:保留该commit(缩写:p)
  • reword:保留该commit,但我需要修改该commit的注释(缩写:r)
  • edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
  • squash:将该commit和前一个commit合并(缩写:s)
  • fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
  • exec:执行shell命令(缩写:x)
  • drop:我要丢弃该commit(缩写:d)

此时键入i进入编辑模式,修改为如下内容:
在这里插入图片描述
意思即为:touch d,touch e的两次提交直接和touch c的提交合并。
此时键入ese,退出编辑模式,输入:wq保存即可。
然后进入如下界面:
在这里插入图片描述
这是进入合并后的注释修改界面,根据自己的需要改动提交信息即可。
最后查看日志,发现合并到一起了,果然把红框后面提交(3db910a)丢失了。
在这里插入图片描述

7.2 复制 commit 到其他分支

此时我们拥有两个分支,分别为master和develop,这时候想把develop的c,D,E三次提交平行复制到master分支上,直接使用命令:

# 切换分支
git checkout develop
git rebase   0152896   7d8c6a4  --onto  master

在这里插入图片描述
此时切换到master分支上再根据提示完成拷贝commit。

八、fetch

fetch看了很多大佬的介绍,个人也不是太理解,先这么理解吧。
fetch +merge = pull

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值