【Git】常用的Git操作集合

常用的Git操作集合

  • [1. 分支操作](#1. 分支操作)
    • [1.1 查看本地所有分支](#1.1 查看本地所有分支)
      • [`git branch`](#git branch)
    • [1.2 查看所有分支(包含本地+远程仓库)](#1.2 查看所有分支(包含本地+远程仓库))
      • [`git branch -a`](#git branch -a)
    • [1.3 切换分支](#1.3 切换分支)
      • [`git checkout test`](#git checkout test)
  • [2. 常用基本操作](#2. 常用基本操作)
    • [2.1 查看 `git` 各存储区内(文件)状态](#2.1 查看 git 各存储区内(文件)状态)
      • [`git status`](#git status)
    • [2.2 查看工作区与暂存区文件差异](#2.2 查看工作区与暂存区文件差异)
      • [`git diff`](#git diff)
    • [2.3 临时存储/取消临时存储](#2.3 临时存储/取消临时存储)
      • [`git stash`](#git stash)
      • [`git stash pop`](#git stash pop)
    • [2.4 查看 `git` 记录](#2.4 查看 git 记录)
      • [`git log`](#git log)
      • [`git log --oneline`](#git log --oneline)
  • [3. 撤销操作](#3. 撤销操作)
    • [3.1 撤销add](#3.1 撤销add)
      • [`git reset <fileName>`](#git reset <fileName>)
    • [3.2 撤销commit](#3.2 撤销commit)
      • [`git reset --soft HEAD^`](#git reset --soft HEAD^)
      • [`git reset --mixed HEAD^`](#git reset --mixed HEAD^)
      • [`git reset --hard HEAD^`](#git reset --hard HEAD^)
      • [`git reset --hard HEAD~n`](#git reset --hard HEAD~n)
    • [3.3 撤销push到远程仓库的commit](#3.3 撤销push到远程仓库的commit)
      • [3.3.1 先确定要取消的commit](#3.3.1 先确定要取消的commit)
      • [3.3.2 取消本地仓库commit](#3.3.2 取消本地仓库commit)
      • [3.3.3 将本地仓库的更改同步到远程仓](#3.3.3 将本地仓库的更改同步到远程仓)
  • [4. 合并 `commit`](#4. 合并 commit)
    • [4.1 确定要合并的commit的前一个commitId 值](#4.1 确定要合并的commit的前一个commitId 值)
    • [4.2 执行 `git rebase -i <commitId>` 命令](#4.2 执行 git rebase -i <commitId> 命令)
    • [4.3 执行 `git log` 命令查看commit合并情况](#4.3 执行 git log 命令查看commit合并情况)
  • [5. 将已提交的commit修改复制到另一个分支上](#5. 将已提交的commit修改复制到另一个分支上)
    • [5.1 使用 `cherry-pick` 复制单个commit](#5.1 使用 cherry-pick 复制单个commit)
      • [`git cherry-pick <commitId>`](#git cherry-pick <commitId>)
    • [5.2 使用 `cherry-pick` 复制多个commit](#5.2 使用 cherry-pick 复制多个commit)
      • [`git cherry-pick <commitId1> <commitId2> ...`](#git cherry-pick <commitId1> <commitId2> ...)

1. 分支操作

1.1 查看本地所有分支

git branch

* 标识的分支就是当前代码所在的分支,图示表明当前在 develop 分支。

1.2 查看所有分支(包含本地+远程仓库)

git branch -a

1.3 切换分支

git checkout test

切换到本地的test分支。

git checkout origin master: 切换到远程仓库的master分支。

2. 常用基本操作

2.1 查看 git 各存储区内(文件)状态

git status

2.2 查看工作区与暂存区文件差异

git diff

git diff 命令还可以通过指定HEAD指针、版本、文件名等进行更具体的比较。

2.3 临时存储/取消临时存储

有时,在开发过程中,需要切换分支改BUG,但是当前功能又没开发完,也不适合提交,此时就可以将当前修改临时存储起来,切换分支后再去改BUG。

git stash

我们先使用git status看下git各区域的变更状态:

然后,我们执行git stash 命令后再执行git status观察下git各区域变更状态:

可以看到,差异只是在工作区,git stash 命令,将工作区的修改隐藏了,临时存储在一个特殊容器里面。

git stash pop

git stash pop命令取消git stash操作,将隐藏的对工作区内的修改进行复原。

2.4 查看 git 记录

git log

输入git log 命令会进入一个git提交记录显示窗口,可以上下翻页查找,输入q退出。

git log --oneline

跟上面的功能一样,只是显示的信息更加的简约、紧凑,我个人更喜欢这样用。

3. 撤销操作

3.1 撤销add

git reset <fileName>

撤销已经从工作区添加到暂存区,但是还没commit的文件。

我们可以看到,执行git reset 命令之后,已经add的文件又从暂存区回到了工作区。

我们也可以执行git reset . 取消所有在暂存区文件的add操作。

3.2 撤销commit

git reset --soft HEAD^

撤销commit操作,但是不撤销add操作。

可以看到,执行完git reset --soft HEAD^命令之后,已提交的修改回到了暂存区。

git reset --mixed HEAD^

撤销commit操作,同时撤销add操作,但是将修改保留在工作区。

可以看到,执行完git reset --mixed HEAD^命令之后,已提交的修改回到了工作区。

git reset --hard HEAD^

撤销commit操作,并撤销add操作,同时工作区也不保留修改。


可以看到,执行完git reset --hard HEAD^命令之后,已提交的修改没了,最新的commit也没了。

git reset --hard HEAD~n

撤销最近n次的commit操作,并撤销add操作,同时工作区也不保留修改。

可以根据我们的需求选择--hard, --soft 或者 --mixed选项,下面我们以n取2为例。

可以看到,执行完该命令后,我们提交的最新的2个commit完全消失了。

3.3 撤销push到远程仓库的commit

撤销push到远程仓库的commit的操作可分为以下3步:

3.3.1 先确定要取消的commit

git log --oneline

确定哪几个commit需要取消。

现在我要取消最新的2个commit,让commit哈希值为bd04cbb的commit成为最新的commit。

3.3.2 取消本地仓库commit

git reset --soft <commitId>

我们的commitId值取上一步确定的值,执行命令,结果如下。可以看到最新的2个commit记录没了。

根据我们的需求,--soft 选项也可以换成--hard 或者 --mixed,具体区别见3.2.

3.3.3 将本地仓库的更改同步到远程仓

git push origin <branchName>

此处branchName选择本地分支对应的远端分支,将对本地仓内该分支的修改同步到远程仓库。

--force 选项也可以直接简写成 -f

4. 合并 commit

4.1 确定要合并的commit的前一个commitId 值

使用git log --oneline 确定那些commit需要合并,我们这里要合并前2个commit。因此,我们要取第3个commitID为bd04cbb的值。

4.2 执行 git rebase -i <commitId> 命令

这里的 <commitId> 为上一步确定的 bd04cbb

执行完该命令进入到一个vim编辑界面:

在前面未注释的部分的行首,我们只保留第一行的pick,其他行都改为s(代表squash,表示对应的commit被压缩)。退出编辑模式,输入wq! 保存退出。进入另一个vim 编辑框如下。该编辑框的内容为要合并的所有commit的message,我们现在需要将所有的commit message合并为一个。

修改如下后保存退出。

4.3 执行 git log 命令查看commit合并情况

此时我们使用git log 命令查看可以看到原来的2个commit已经被合并为一个新的commit。

5. 将已提交的commit修改复制到另一个分支上

我们在上一步在 test 分支提交了一个 commit(添加注释)。

此时我们切换到了 develop 分支上,现在我们要把在 test 分支上的改动,复制到 develop 分支上,此时我们就需要使用 cherry-pick 命令。

5.1 使用 cherry-pick 复制单个commit

git cherry-pick <commitId>

我们当前在 develop 分支上,对test分支上的commitId 为e5ac3d4 的commit 进行 cherry-pick

我们从上图可以看到,其它分支上的修改被复制了过来,在develop分支上产生的新commit有新的commitId。

5.2 使用 cherry-pick 复制多个commit

git cherry-pick <commitId1> <commitId2> ...

我们现在在develop分支上,想把该分支上最新的2个commit复制到test分支上(3个及以上个commit也是同理)。

先切换到test分支上,在test分支上执行命令git cherry-pick a313ca3 9b2284e

此时,我们再来看下commit 日志,看到多个commit已经被复制到test分支:

相关推荐
yg_小小程序员32 分钟前
鸿蒙开发(16)使用DevEco Studio上的Git工具进行多远程仓管理
git·华为·harmonyos
布兰妮甜1 小时前
使用GitHub Pages部署静态网站:简易指南
github·pages
董厂长1 小时前
VS2022 无法使用GitHub账户登录/无法使用copilot 解决方案
github·copilot
油泼辣子多加1 小时前
2024年12月25日Github流行趋势
github
每天八杯水D5 小时前
Git完整使用经历
git
uhakadotcom6 小时前
代码人生-精选文章周刊
前端·后端·github
xianwu5437 小时前
反向代理模块。开发
linux·开发语言·网络·c++·git
前端_库日天9 小时前
部署自己的git托管平台
git·ubuntu·docker
小华同学ai10 小时前
vue-office:Star 4.2k,款支持多种Office文件预览的Vue组件库,一站式Office文件预览方案,真心不错
前端·javascript·vue.js·开源·github·office