Git 常用操作命令(基础版 + 进阶版)

目录

 

基础版

查询用户名

查询邮箱

修改全局用户名

修改全局邮箱

添加所有更改到暂存区​​​​​​

提交暂存区内容

查询本地分支

查询远程分支

切换分支

创建并切到该分支

删除指定分支

修改最后一次提交备注(*注意是 最后一次 提交)

合并多条commit记录

强制版本回退(*注意此操作会强制删除提交,慎用)

查询所有git操作(*此操作会展示每一步操作的hashId)

回退到任意一步git操作之前

合并分支场景一(注:记得加上 --no-ff,不加会采用fast-forward方式合并,以后可能会产生各种问题。)

合并分支场景二(注:记得加上 --squash。)

合并其他分支上的某条commit到当前分支上

使用 stash 相关命令,将代码暂存起来

进阶版

使用 git rebase 合并代码(注:它和merge的区别:merge合并的时候回新增一个(多个)commit,并且指向两个(多个)父级(不是一条直线);而rebase合并的时候会在另一个分支上新增一个(多个)commit,并且指向一个父级(是一条直线))

分离HEAD指针

^ 和 ~

git cherry-pick 的使用方法

git rebase -i 的使用方法

git tag 的用法

reset 和 revert

fetch 和 pull

pull 和 pull --rebase



 

基础版

 

查询用户名

git config user.name

查询邮箱

git config user.email

修改全局用户名

git config --global user.name "用户名"

修改全局邮箱

git config --global user.email "邮箱"

添加所有更改到暂存区​​​​​​

git add -A

提交暂存区内容

git commit -m"此次提交备注"

查询本地分支

git branch

查询远程分支

git branch -r

切换分支

两种方式:

  1. git switch 分支名(新命令)
  2. git checkout 分支名

创建并切到该分支

git switch -c"分支名"(新命令)

删除指定分支

git branch -d"分支名"    ( 注:-D 会强制删除,慎用! )

修改最后一次提交备注(*注意是 最后一次 提交

git commit --amend

合并多条commit记录

git rebase -i HEAD~要合并的记录的个数(其实这块也可以写为git rebase -i commitId,但是合并时,并不会包含此commitId的commit记录)

注意1:在执行完此命令后,会转到vim编辑,按下 i 后,进入编辑状态,把将要被合并掉的记录前面的 pick 改为 s ,一般情况下只剩下最早一次(通常是第一行)提交的 pick,其他的都改为 s。然后 wq保存,进入修改备注的步骤,按下 i 进入编辑状态,更改备注,wq保存,OK。

注意2:如果这个过程中有操作错误,可以使用 git rebase --abort来撤销修改,回到没有开始操作合并之前的状态。

强制版本回退(*注意此操作会强制删除提交,慎用

git reset --hard"commitId"

查询所有git操作(*此操作会展示每一步操作的hashId

git reflog

回退到任意一步git操作之前

git reset --hard"hashId"

合并分支场景一(注:记得加上 --no-ff,不加会采用fast-forward方式合并,以后可能会产生各种问题。

git merge 要合并的分支名 --no-ff

注意:此操作会将要合并分支上的所有与本条分支不同的commit全部合并过来。经常要解决冲突。解决完冲突别忘了保存后add和commit。

合并分支场景二(注:记得加上 --squash。

git merge 要合并的分支名 --squash

注意: --squash 是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用--squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并。

合并其他分支上的某条commit到当前分支上

git cherry-pick "commitId"

注意:此操作仅仅会将目标commitId这一条提交上所修改的内容合并到当前分支上。所以慎用。

使用 stash 相关命令,将代码暂存起来

使用场景:开发中,经常有这种情况:正在分支1开发功能,但是需求提了一个紧急bug要马上处理。此时分支1的工作才进行了一半,必须要切到其他分支去处理bug,但此时你却不想commit,那么stash就派上用场了,它可以将已修改的代码暂存起来。下面看看怎么使用它(本文只说有关stash的常用命令,不常用的不提):

  • 第一步(当前在分支1):git add -A (注意:这步很重要,如果不add,新增的文件是不能放到暂存区的
  • 第二步:git stash save "备注"(注意:备注很重要,为了以后方便的找到想要的暂存记录
  • 第三步:切到其他分支进行bug或紧急需求的处理,直到处理完毕到第四步。
  • 第四步:从其他分支切回 分支1
  • 第五步:git stash apply (注意:这里使用apply命令,它的作用是,将stash list(暂存列表)中的最新一条取出来或者说是复制出来,因为apply命令并不会将最新的一条暂存记录从stash list中删除。这里要区别一下git stash pop命令,pop也是取出stash list中最新的一条暂存记录,但是pop命令会删除stash list中最新的一条暂存记录。建议使用apply命令!!!

好了,上面这五个步骤,就可以解决上面提出的场景了

 

有关stash的其他几条命令:

  • git stash list:查看stash list(暂存列表),这里会展示每个stash记录的序号。
  • git stash drop stash@{stash记录序号}:删掉指定序号的暂存记录。
  • git stash clear:删掉所有的暂存记录(慎用)。

 

 

进阶版

 

使用 git rebase 合并代码(注:它和merge的区别:merge合并的时候回新增一个(多个)commit,并且指向两个(多个)父级(不是一条直线);而rebase合并的时候会在另一个分支上新增一个(多个)commit,并且指向一个父级(是一条直线)

命令解释:将 当前分支 合并到 分支1

  • git rebase "分支1"

命令解释:注意注意注意:将 分支2 合并到 分支1(顺序别搞反了)

  • git rebase "分支1" “分支2”

分离HEAD指针

通常情况下HEAD都是指向当前的分支的,并且会随着当前分支的指向变化而变化。特殊场景下可能会将HEAD指针和当前分支分离开来,直接使用命令:

  • git switch "commitId"    或   git checkout "commitId"

将HEAD指针指向某个commit

^ 和 ~

场景一:当前分支是一条直线

  • HEAD:代表当前HEAD指向的commitId
  • HEAD^: 代表当前HEAD指向的commitId的上一级(父级)
  • HEAD^^:  
  • HEAD^^^: 以此类推

场景二:当前分支是分叉的(假设HEAD有两个父级)

  • HEAD^1:代表当前HEAD指向的commitId的正对父级(同一条直线)
  • HEAD^2:代表当前HEAD指向的commitId的非正对父级(不在同一条直线)

场景三:

  • HEAD~1:代表当前HEAD指向的commitId的上一级(父级)
  • HEAD~2:代表当前HEAD指向的commitId的上两级(父父级)
  • HEAD~3:以此类推

git cherry-pick 的使用方法

命令解释:依次 将 "commitId3" "commitId1" "commitId2" 三条commit记录(这三条记录可以来自不同的分支)合并到当前分支。(注:此命令合并完是一条直线。并且重要的是它是按照顺序将commit记录合并到当前分支的

  • git cherry-pick "commitId3" "commitId1" "commitId2"

git rebase -i 的使用方法

命令解释:执行以下命令可进入一个编辑交互页面,页面依次列举了 commitId0 以下的所有提交,你可以根据需要,对commit记录进行重新排序等操作

  • git rebase -i "commitId0"

git tag 的用法

命令解释:给 commitId0 打上标签 v1,此命令常用语版本的标记

  • git tag v1 "commitId0"

 

reset 和 revert

命令解释:将当前的分支指向 commitId0。注意:此操作是直接改变了指针指向,使用此命令后,commitId0 之后的提交将消失。此处要说的是,也是reset和revert的重要区别:使用git reset 命令后,如果你想把当前的分支推向远程,可能就推不上去了,因为此时远程的分支比你本地的要新(本地已经回退到了旧的commitId)。

  • git reset ”commitId0“

命令解释:此命令比较神奇,下面操作的结果:新建一个commit(自动完成),这个commit是复制于commitId1的父级。也就是说revert命令同样可以进行版本回退,但它不是直接将指针直接指向旧的commit,而是复制一个新的commit,将指针指向新的commit。此时我们便可以将当前的分支推向远程了(本地的分支比远程的要新)。

  • git revert "commitId1"

此处必须说明一个容易踩到的重要重要重要:举个例子,一目了然:假设我们在当前分支有三个提交:commitId0 -> commitId1 -> commitId2(当前分支指向commitI2),现在我要用revert 命令回退到commit0,应该使用命令git revert commitId1 (注意注意注意:此处commitId1,不是commitId0)。此时,提交记录变为:commitId0 -> commitId1 -> commitId2 -> commitId0' (commitId0' 是复制于 commitId0 的)

fetch 和 pull

简单的说,git pull 是 git fetch 和 git merge 两步操作的简写。

如下两份命令,操作结果是一样的:(当前分支为master)

  • git pull 
  • 第一条命令:git fetch      第二条命令: git merge o/master

git fetch 命令会将远程仓库的所有分支更新到本地,但不合并,之后可以使用git merge (相当于git pull)或者 git rebase 等命令,将当前的分支与拉下来的最新远程分支进行合并。例如(当前分支为master):

    1. git fetch
    2. git merge o/master(将master与远程的最新master进行合并)
    1. git fetch
    2. git merge o/dev(将master与远程的最新dev进行合并)

pull 和 pull --rebase

  • git pull:相当于git fetch 和 git merge 两条命令的结合
  • git pull --rebase:相当于git fetch 和 git rebase 两条命令的结合

因此,这两条命令的区别就很明显了,其实本质上就是git merge 和 git rebase 的区别

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值