Uninote
Uninote
用户根目录
common
guanjin
programming
docs
后端试题
问题讨论

视频教程

不想看文档,这里也有视频教程:http://video.dajxyl.com/video_play.html?video_url=https://admin.bb.uninote.com.cn/oss?path=video/upload/202109/20210915_224351.mp4

背景

有时我们需要将多个提交重新整理,比如按任务拆分成独立的若干个提交,比如这个例子,六个“优化”提交,其实包含了三个任务。

很简单,只要用好 reset 命令就行。可以将以下命令保存为 shell 脚本,比如取名为 cs(commit splitter 的简写),方便后面使用:

#!/bin/bash
### commit splitter
git reset --hard $1
git reset --soft HEAD@{1}

开始拆分

注意,这里的 src 和 base 是我自己加的 tag,如果照着命令敲,注意也在自己的项目中的相应位置加上这两个标签。

第一步,将当前分支(master) 重置到 base,这是我们要重新整理的开始。

git reset base

第二步,执行刚才保存的脚本(tag src只是为了说明需要,其实只需要直接复制 commit hash 值即可):

$ cs src
HEAD is now at e4df33f 优化

看下当前工作空间的状态,总共添加了三个文件,改了两个(这就是我们所有任务合并在一起的修改):

我们第一个任务包含的images/dir.png,以及 listshow.php 中的部分修改:

此时最简单的做法,就是在比较软件中撤销掉不需要的修改,保留需要的:

取消掉不需要提交的文件选中状态:

然后提交,一个 commit 就拆分出来了:

重复第二步,直到全部提交拆分完成...

补充说明

  • 在第二步时,我们查看工作空间的状态,可以发现,少了一个文件,并且 showlist.php 这个文件的修改行数变少了(因为减少的改动被包含到了上次提交中):
  • 这里只讨论拆分,基础的 git 操作就不赘述了
  • 使用 TortoiseGit 来说明,只是为了简介明了,完全用命令行,也能实现
  • 完成后历史变成了这个样子:
  • 完成后比较 master 和 src,内容上应该没有任何不同(命令无任何输出):
  • 如果不想被 git 困扰,建议这篇文章认真读一读:https://git-scm.com/book/en/v2/Git-Tools-Reset-Demystified

2021-4-2

axios

TODO

点赞(0) 阅读(420) 举报
目录
标题