0
点赞
收藏
分享

微信扫一扫

GIT教程三:更改提交的操作

杏花疏影1 2022-04-17 阅读 84
git

GIT教程三:更改提交的操作

更改提交的操作

Git 的另一特征便是可以灵活操作历史版本。借助分散仓库的优势,可以在不影响其他仓库的前提下对历史版本进行操作。

回溯历史版本

下面,我们以在原始版本上建立一个分支 feature-B 来说明更改提交的操作(如下图所示)。
在这里插入图片描述

回溯到创建 feature-A 分支前

通过命令

git reset --hard *

回溯到 * 版本,如下图所示在这里插入图片描述

创建 feature-B分支

创建分支 feature-B,对 Readme.md 文件进行修改,并提交,如下图所示。
在这里插入图片描述
当前分支 feature-B 的状态如分支图所示。
在这里插入图片描述

推进至 feature-A 分支合并后的状态

git log 命令只能查看以当前状态为终点的历史日志。所以这里
要使用 git reflog 命令,查看当前仓库的操作日志。

执行

git reflog

查看仓库的操作日志,如下所示

(base) kevinkk@kevinkk:~/Desktop/new_study$ git reflog 
44b9963 (HEAD -> feature-B) HEAD@{0}: commit: feature-B version
d3c1eee (master) HEAD@{1}: checkout: moving from master to feature-B
d3c1eee (master) HEAD@{2}: reset: moving to d3c1eee54745357214151f53c2885c3b89b13f6a
d3c1eee (master) HEAD@{3}: reset: moving to d3c1eee54745357214151f53c2885c3b89b13f6a
135f04a HEAD@{4}: merge feature-A: Merge made by the 'recursive' strategy.
d3c1eee (master) HEAD@{5}: checkout: moving from feature-A to master
6dfa875 (feature-A) HEAD@{6}: checkout: moving from master to feature-A
d3c1eee (master) HEAD@{7}: checkout: moving from feature-A to master
6dfa875 (feature-A) HEAD@{8}: checkout: moving from master to feature-A
d3c1eee (master) HEAD@{9}: checkout: moving from feature-A to master
6dfa875 (feature-A) HEAD@{10}: commit: Add feature-A
d3c1eee (master) HEAD@{11}: checkout: moving from master to feature-A
d3c1eee (master) HEAD@{12}: commit (initial): Initial version

在日志中,我们可以看到 commit、checkout、reset、merge 等 Git 命令的执行记录。只要不进行 Git 的 GC(Garbage Collection,垃圾回收),就可以通过日志随意调取近期的历史状态,就像给时间机器指定一个时间点,在过去未来中自由穿梭一般。即便开发者错误执行了 Git 操作,基本也都可以利用 git reflog命令恢复到原先的状态。

切换回到 master 分支,并回溯到恢复回溯前的历史状态,

git checkout master
git reset --hard 83b0b94

如图所示。
在这里插入图片描述

合并 feature-B

接下来,我们合并 feature-B 分支。

消除冲突

执行

git merge --no-ff feature-B

后发现系统提示冲突信息

(base) kevinkk@kevinkk:~/Desktop/new_study$ git merge --no-ff feature-B
自动合并 Readme.md
冲突(内容):合并冲突于 Readme.md
自动合并失败,修正冲突然后提交修正的结果。

用编辑器打开 README.md 文件,就会发现其内容变成了下面这个样子。

master
<<<<<<< HEAD
feature-A

=======
feature-B
>>>>>>> feature-B

我们在编辑器中将其改成想要的样子。

master
feature-A
feature-B

日志信息如下所示在这里插入图片描述

修改提交信息

我们将上一条提交信息记为了 “Fix conflict”,但它其实是 feature-B 分支的合并,解决合并时发生的冲突只是过程之一,这样标记实在不妥。于是,我们要修改这条提交信息。

git commit --amend

执行上面的命令后,编辑器就会启动。

Fix conflict

# 请为您的变更输入提交说明。以 '#' 开始的行将被忽略,而一个空的提交
# 说明将会终止提交。
#
# 日期:  Sun Apr 17 10:25:37 2022 +0800
#
# 位于分支 master
# 要提交的变更:
#       修改:     Readme.md
#

将提交信息的部分修改为 Merge branch ‘fix-B’,然后保存文件,关闭编辑器。更改后的日志信息如下图所示。
在这里插入图片描述

参考文献:[1] (日本)大塚弘记. Github入门与实践[M]. 北京: 人民邮电出版社, 2015

举报

相关推荐

0 条评论