美文网首页代码管理工具使用技能shopeenew01
Git [提交记录查看、提交、变基](I)

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

作者: Harely | 来源:发表于2018-12-13 11:15 被阅读0次

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

相关文章

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

    Git 简易指南Git 参考手册Pro Git(中文版)Git教程 廖雪峰 查看提交记录 终端命令git log:...

  • git查看提交记录详情

    git 查看commit 提交记录详情 git log //查看所有的提交记录 git show //查看最新的提...

  • Git

    [TOC] 1.log (1)查看提交记录: (2)显示某次提交的内容: $ git show

  • git command help

    Git命令 查看、添加、提交、删除、找回,重置修改文件 查看文件diff 查看提交记录 Git 本地分支管理 查看...

  • git常见使用 场景

    给分支 标记tag git checkout branchName切换到 分支 git log查看分支 提交记录i...

  • git撤销与回滚

    git撤销已经push的提交 git log 查看提交记录 git reset --soft commit_id ...

  • Git使用记录

    本地Git撤回提交记录 使用git log查看提交的历史记录 使用git reset --soft head~1撤...

  • git使用笔记

    git log -p 文件名 查看提交指定文件提交记录以及改动 每次提交之前建议用 git diff HEAD 查...

  • 常用Git命令

    查看、添加、提交、删除、找回,重置修改文件 查看文件diff 查看提交记录 tig Git 本地分支管理 查看、切...

  • Git常用命令

    查看、添加、提交、删除、找回,重置修改文件 查看文件diff 查看提交记录 Git 本地分支管理 查看、切换、创建...

网友评论

    本文标题:Git [提交记录查看、提交、变基](I)

    本文链接:https://www.haomeiwen.com/subject/txyvhqtx.html