Git学习

本文围绕Git展开,介绍入门与进阶操作。入门部分涵盖提交记录、分支创建与切换、合并等操作,如git commit提交修改,git merge和git rebase合并分支;还介绍撤销变更、cherry - pick等操作。进阶部分针对远程分支变动、本地落后的场景给出解决办法。

入门篇

概念篇

git 首先要明白3个工作区

  • 下面这张图描述的很清楚,先简单过一下图中每个的功能
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/daa2f7c132924861b077933e7c308c21.png
    在这里插入图片描述在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/0ebc375d6438497c9ca28bb81fb9ca16.png

提交记录

git commit

这条命令是将本地的修改进行一次提交,将修改的记录放到本地的暂存区

创建分支

  • git branch

创建新的分支,但是HEAD指向并没有跳转到新的分支

切换分支

  • git checkout

将HEAD指向新的分支

创建分支并切换

  • git checkout -b

创建新的分支bugFix,并将HEAD指向该分支

分支合并

git merge方式合并

  • git merge

将bugFix分支合并到当前的分支
例如下图,当前HEAD指向main分支,现在将bugFix分支合并到main分支
未合并前

  • 执行git merge bugFix 后
    合并分支后

git rebase方式合并

  • git rebase

第二种合并分支的方法是 git rebase。Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。

  • 准备两个分支,当前HEAD指向的是bugFix分支
    未合并
  • 我们想要把 bugFix 分支里的工作直接移到 main 分支上。移动以后会使得两个分支的功能看起来像是按顺序开发,但实际上它们是并行开发的
  • 执行 git rebase main
    执行后
    现在 bugFix 分支上的工作在 main 的最顶端,同时我们也得到了一个更线性的提交序列

脱离HEAD

  • 实际上就是让当前HEAD指向具体某次提交,并不是让原来的HEAD指向最近提交记录的分支的最近一次提交
  • 下图就是未脱离HEAD前,HEAD是默认指向的是最近的提交main分支的C2
    未脱离HEAD当执行git checkout C3后,HEAD就脱离分支指向C3这次提交
    脱离分支

实际应用中都是通过hash值来切换到具体的某次提交
操作步骤:

  • git log

获取hash值,假如获取某次提交的hash值是fed2da64c0efc5293610bdd892f82a58e8cbc5d8

  • git checkout <hash值>

例如:git checkout fed2

将分支指定到某次提交

  • git branch -f

目的是将分支指向某次的具体提交

撤销变更

方式1 git reset

  • git reset
  • 图示当前main指向C2提交,我们想要撤回C2
    在这里插入图片描述
  • 执行 git reset HEAD~1
    Git 把 main 分支移回到 C1;现在我们的本地代码库根本就不知道有 C2 这个提交了。
    在这里插入图片描述

方式2: git revert HEAD

  • 虽然在你的本地分支中使用 git reset 很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!为了撤销更改并分享给别人,我们需要使用 git revert。来看演示:
  • 未撤销前
    在这里插入图片描述
  • 执行 git revert HEAD
    奇怪!在我们要撤销的提交记录后面居然多了一个新提交!这是因为新提交记录 C2’ 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。也就是说 C2’ 的状态与 C1 是相同的。
    revert 之后就可以把你的更改推送到远程仓库与别人分享啦
    在这里插入图片描述

git cherry-pick

  • git cherry-pick
  • 用于解决想把某几次修改提交到某次提交

如果你想将一些提交复制到当前所在的位置(HEAD)下面的话, Cherry-pick 是最直接的方式了。我个人非常喜欢 cherry-pick

  • 这里有一个仓库, 我们想将 side 分支上的工作复制到 main 分支,你立刻想到了之前学过的 rebase 了吧?但是咱们还是看看 cherry-pick 有什么本领吧

在这里插入图片描述

  • 执行 git cherry-pick C2 C4
  • 我们只需要提交记录 C2 和 C4,所以 Git 就将被它们抓过来放到当前分支下了。
    在这里插入图片描述

交互式rebase

当你知道你所需要的提交记录(并且还知道这些提交记录的哈希值)时, 用 cherry-pick 再好不过了 没有比这更简单的方式了。但是如果你不清楚你想要的提交记录的哈希值呢? 幸好 Git 帮你想到了这一点, 我们可以利用交互式的 rebase —— 如果你想从一系列的提交记录中找到想要的记录, 这就是最好的方法了.

  • 交互式 rebase 指的是使用带参数 --interactive 的 rebase 命令, 简写为 -i
  • 如果你在命令后增加了这个选项, Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。
  • 在实际使用时,所谓的 UI 窗口一般会在文本编辑器 —— 如 Vim —— 中打开一个文件。
    图示
    在这里插入图片描述
  • 执行git rebase -i HEAD~4 或者 git rebase -i
  • 下图就会去做选择哪些提交是需要rebase的,还可以决定顺序
    pick代表的是未选择,Omit是选择的在这里插入图片描述

进阶篇

远程分支变动,本地落后远程

  • 在这里插入图片描述

常用场景解决方法

场景1(落后远程分支)

  • 图示(远程分支是已经提交了C2,C3,而本地落后)
    在这里插入图片描述
  • 解决办法

将C3进行备份,然后撤销本地提交C3

  • 备份C3
  • 还原主分支:git reset --hard
  • 拉取最新分支: git pull
  • 解决冲突:将刚刚备份的修改进行合并
  • 修改完以后,git commit
  • 新建分支并跳转: git checkout -b new
  • 提交新的分支 :git push

在这里插入图片描述

  • 执行git reset --hard后
    在这里插入图片描述
  • 备份完
  • git pull
  • 合并
  • git commit
    在这里插入图片描述- 新建分支: git checkout -b newbranch

在这里插入图片描述

  • git push
    在这里插入图片描述
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值