Git [提交记录查看、提交、变基](I)

Git 简易指南
Git 参考手册
Pro Git(中文版)
Git教程 廖雪峰



查看提交记录

  • 终端命令
    • git log:列出历史提交记录;
记录查看
  • git log --oneline:查看历史记录的简洁的版本;
    简洁记录查看

提交

提交规范

  • feat: 新功能
  • fix: 修复问题
  • docs: 修改文档
  • style: 修改代码格式,不影响代码逻辑
  • refactor: 重构代码,理论上不影响现有功能
  • perf: 提升性能
  • test: 增加修改测试用例
  • chore: 修改工具相关(包括但不限于文档、代码生成等)
  • deps: 升级依赖
    例如
git commit -m 'fix:修复xxxbug'


  • 第一次提交
cd /Users/harleyhuang/Documents/Gitee/SourceTreeTest
git add -A
git commit -m "第一次提交"
git push
//第一次提交需要输入用户名和密码,这个用户名和密码对应着GitHub、Gitee的用户名和密码
Username for 'https://gitee.com': [xxx@qq.com(用户名)]
Password for 'https://harelysoa@qq.com@gitee.com': [xxxxxx(密码)]
  • 第二次提交
//第二次提交
git add -A
git commit -m "第二次提交"
git push
SourceTree 效果图



工作流

  • 第三次提交
//添加到缓存区
git add -A
由未缓存文件变为缓存文件
//改动已经提交到了 HEAD,但是还没到你的远端仓库
git commit -m "第三次提交"
已经提交到了 HEAD,但是还没到你的远端仓库
//状态改变,没有需要推送到远端的
 git push
推送到远端




rebase 变基:单分支合并多次commit

注意:不要通过rebase对任何已经提交到公共仓库中的commit进行修改。

 当我们在本地仓库中提交了多次,在我们把本地提交push到公共仓库中之前,为了让提交记录更简洁明了,我们希望把如下分支B、C、D三个提交记录合并为一个完整的提交,然后再push到公共仓库。



终端命令变基

rebase 流程图

rebase 之前状态

现在我们在master分支上添加了5次提交,我们的目标是把最后三个提交合并为一个提交:


终端6次提交,第一次提交是master的初始化

变基命令:
git rebase -i [startpoint] [endpoint]

  • -i: 意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作;
  • [startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。

变基步骤:

  • 输入命令:
git rebase -i 073ea5e //第三次提交ID

//上面等同如下命令
git rebase -i HEAD~3
rebase 交互图

命令说明

pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)

SourceTree 状态变化,为变基状态
  • 修改提交内容

    编辑提交内容

  • esc 键,然后输入:wq 进行保存,变成如下图:

    SourceTree 状态改变

终端修改信息
  • 然后 esc 键,然后输入:wq 进行保存,变成如下图:
SourceTree 状态改变

终端修改提交信息


修改注释信息
  • 最后 esc 键,然后输入:wq 进行保存,如下图:
    提交记录合并完成

单分支上变基完成

变基完成



SourceTree 单分支变基

  • 选中变基到的开区间位置


    选中区间变基
  • 变基信息修改


    变基信息修改
  • 完成变基


    完成变基后并进行了提交




rebase 变基:一分支提交合并到另一分支上

  当我们项目中存在多个分支,有时候我们需要将某一个分支中的一段提交同时应用到其他分支中,就像下图:


一分支提交合并到另一分支
  • 初始SourceTree状态图:


    分支变基图

我们希望将develop分支中的cc、dd、ee部分复制到master分支中,这时我们就可以通过rebase命令来实现(如果只是复制某一两个提交到其他分支,建议使用更简单的命令:git cherry-pick)。

  • 在实际模拟中,我们创建了【master】和【develop】两个分支:

【master】 分支部分提交记录

master 部分分支提交记录

【develop】分支提交记录

【develop】分支提交记录

  • rebase 命令格式
    git rebase [startpoint] [endpoint] --onto [branchName]
    [startpoint] [endpoint]仍然和上一个命令一样指定了一个编辑区间(前开后闭),--onto的意思是要将该指定的提交复制到哪个分支上。
    所以,在找到cc 提交(a69e8fbb1)ee 提交(3e75b2d52)的提交id后,我们运行以下命令:
变基前的分支状态

git rebase a69e8fbb1 3e75b2d52 --onto master
出现冲突了:

变基出现冲突了

  • 解决冲突,输入:
    git rebase --continue
    又出现了冲突,如下图:

    变基出现冲突

  • 继续解决冲突并提交,终端输入:
    git rebase --continue
    git add -A
    git commit -m "解决变基冲突"

    变基继续并提交,注意:此时是游离态 HEAD

注意:当前HEAD处于游离状态,实际上,此时所有分支的状态应该是这样:

处于游离态

  • 查看master分支提交日志:


    变基后的日志

所以,虽然此时HEAD所指向的内容正是我们所需要的,但是master分支是没有任何变化的,git只是将cc 提交~ee 提交部分的提交内容复制一份粘贴到了master所指向的提交后面,我们需要做的就是将master所指向的提交id设置为当前HEAD所指向的提交id就可以了,即:

  • 切换到master 分支
    git checkout master

    切换到master分支

    这时你会发现,变基的内容不见了,怎么办?别急,看下面:

  • 修改提交ID
    git reset --hard c8bb979

    这时变基彻底完成了




git checkout

解析:

① git checkout 实际上是修改HEAD文件的内容,让其指向不同的branch。HEAD文件指向的branch就是当前branch。

② git checkout最简单的用法,显示工作区,暂存区和HEAD的差异

$ git checkout
M   x
Your branch is ahead of 'origin/master' by 1 commit.//意思是我本地仓库比远程仓库领先一个提交操作。




git branch

① git branch用-a 参数,可以看到很多branch,包括远程的branch。

git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/issue_193
  remotes/origin/issue_210
  remotes/origin/master






参考资料:
Git&GitLab

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,941评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,397评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,345评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,851评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,868评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,688评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,414评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,319评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,775评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,945评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,096评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,789评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,437评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,993评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,107评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,308评论 3 372
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,037评论 2 355

推荐阅读更多精彩内容