【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分支:

相关推荐
但老师4 小时前
Git遇到“fatal: bad object refs/heads/master - 副本”问题的解决办法
git
秃头女孩y4 小时前
git创建分支
git
研究是为了理解9 小时前
Git Bash 常用命令
git·elasticsearch·bash
DKPT9 小时前
Git 的基本概念和使用方式
git
Winston Wood12 小时前
一文了解git TAG
git·版本控制
喵喵先森13 小时前
Git 的基本概念和使用方式
git·源代码管理
王解14 小时前
Jest项目实战(4):将工具库顺利迁移到GitHub的完整指南
单元测试·github
油泼辣子多加14 小时前
2024年11月4日Github流行趋势
github
xianwu54314 小时前
反向代理模块
linux·开发语言·网络·git
梓羽玩Python15 小时前
推荐一款用了5年的全能下载神器:Motrix!全平台支持,不限速下载网盘文件就靠它!
程序员·开源·github