代码管理工具使用技能shopeenew01

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

2018-12-13  本文已影响0人  Harely

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


查看提交记录

记录查看

提交

提交规范

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]

变基步骤:

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 状态变化,为变基状态 终端修改信息 SourceTree 状态改变

终端修改提交信息


修改注释信息

单分支上变基完成

变基完成



SourceTree 单分支变基


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

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


一分支提交合并到另一分支

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

【master】 分支部分提交记录

master 部分分支提交记录

【develop】分支提交记录

【develop】分支提交记录 变基前的分支状态

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

变基出现冲突了

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

处于游离态

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


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

上一篇 下一篇

猜你喜欢

热点阅读