git学习记录4-----更改提交操作

回溯历史版本

回溯到feature-A之前

命令git reset
&emps;&emps;&emps;&emps;借助分散仓库的优势,可以在不影响其他仓库的前提下对历史版本进行操作。在这里,为了让各位熟悉对历史版本的操作,我们先回溯历史版本,创建一个名为 fix-B 的特性分支,如下图:
回溯到==feature-A之前,创建fix-B分支==
&emps;&emps;&emps;&emps;要让仓库的 HEAD、暂存区、当前工作树回溯到指定状态,需要用到 git rest --hard命令

需要注意的是回到某个时间点,需要那个时间的哈希值,这个可以通过上一节的笔记git log --graph查询到,如下

R@R MINGW64 ~/gitlearn (master)
$ git log --graph
*   commit e1e5b99846f148f04f0cc87a0a75bbf442937f3f (HEAD -> master)
|\  Merge: 0bffe81 6c64c8c
| | Author: RR <xxxxxxxxx@qq.com>
| | Date:   Mon Oct 24 20:01:18 2022 +0800
| |
| |     Merge branch 'feature-A'
| |
| * commit 6c64c8c35152e33e478a24fed2e3851ffb7d6577 (feature-A)
|/  Author: RR <xxxxxxxxx@qq.com>
|   Date:   Mon Oct 24 19:37:37 2022 +0800
|
|       Add -feature-A
|
* commit 0bffe81fd4a24b84f11b05515962211229b65ae1
| Author: RR <xxxxxxxxx@qq.com>
| Date:   Mon Oct 24 10:41:15 2022 +0800
|
|     add a title to README.md
|
* commit d07f69bc0e3f3d4268bd377f9585e80718756c62
  Author: RR <xxxxxxxxx@qq.com>
  Date:   Sat Oct 22 18:15:55 2022 +0800

可以看到在我创建feature-A之前的master的哈希值0bffe81fd4a24b84f11b05515962211229b65ae1

R@R MINGW64 ~/gitlearn (master)
$ git reset --hard 0bffe81fd4a24b84f11b05515962211229b65ae1
HEAD is now at 0bffe81 add a title to README.md

现在我们查看一下README.md是否回到了初始的状态
回到了feature-A之前的状态

创建fix-B

使用以前提到的命令
git checkout -b fix-B

R@R MINGW64 ~/gitlearn (master)
$ git checkout -b fix-B
Switched to a new branch 'fix-B'

R@R MINGW64 ~/gitlearn (fix-B)
$

现在的状态如下:

当前的状态
我们修改一下当下的README.md做个标记
添加一行fix-B

R@R MINGW64 ~/gitlearn (fix-B)
$ git status
On branch fix-B
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

R@R MINGW64 ~/gitlearn (fix-B)
$ git add README.md

R@R MINGW64 ~/gitlearn (fix-B)
$ git commit -m "fix-B"
[fix-B f311c00] fix-B
 1 file changed, 3 insertions(+), 1 deletion(-)

进行提交

推进至feature-A后的状态

如下图:
目标状态

使用git log 命令只能看到以当前为止的日志

看不见feature-A分支的日志
如下:

R@R MINGW64 ~/gitlearn (fix-B)
$ git log --graph
* commit 0bffe81fd4a24b84f11b05515962211229b65ae1 (HEAD -> fix-B, master)
| Author: RR <97416032@qq.com>
| Date:   Mon Oct 24 10:41:15 2022 +0800
|
|     add a title to README.md
|
* commit d07f69bc0e3f3d4268bd377f9585e80718756c62
  Author: RR <97416032@qq.com>
  Date:   Sat Oct 22 18:15:55 2022 +0800

      my first commit

&emps;&emps;&emps;&emps;要想看到当前仓库的操作日志需要git reflog命令,找到回溯之前的哈希值,调用==git reset --hard 哈希值 ==回到回溯之前

R@R MINGW64 ~/gitlearn (fix-B)
$ git reflog
f311c00 (HEAD -> fix-B) HEAD@{0}: commit: fix-B
0bffe81 (master) HEAD@{1}: checkout: moving from master to fix-B
0bffe81 (master) HEAD@{2}: reset: moving to 0bffe81fd4a24b84f11b05515962211229b65ae1
e1e5b99 HEAD@{3}: merge feature-A: Merge made by the 'ort' strategy.
0bffe81 (master) HEAD@{4}: checkout: moving from feature-A to master
6c64c8c (feature-A) HEAD@{5}: checkout: moving from master to feature-A
0bffe81 (master) HEAD@{6}: checkout: moving from feature-A to master
6c64c8c (feature-A) HEAD@{7}: commit: Add -feature-A
0bffe81 (master) HEAD@{8}: checkout: moving from master to feature-A
0bffe81 (master) HEAD@{9}: commit: add a title to README.md
d07f69b HEAD@{10}: commit (initial): my first commit

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

先回到master !!!

R@R MINGW64 ~/gitlearn (fix-B)
$ git checkout master
Switched to branch 'master'

R@R MINGW64 ~/gitlearn (master)
$ git reset --hard e1e5b99
HEAD is now at e1e5b99 Merge branch 'feature-A'

这时我们查看一下README.md是否回到了feature-A与master合并后的状态
回到之前的状态

合并fix-B

合并fix-B

R@R MINGW64 ~/gitlearn (master)
$ git merge --no-ff fix-B
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

&emps;&emps;&emps;&emps;这时,系统告诉我们 README.md 文件发生了冲突(Conflict)。系统在合并 README.md 文件时,feature-A 分支更改的部分与本次想要合并的 fix-B 分支更改的部分发生了冲突。不解决冲突就无法完成合并,所以我们打开 README.md 文件,解决这个冲突。

查看冲突部分并将其解决

查看冲突
======== 以上的部分是当前 HEAD 的内容,以下的部分是要合并的 fix-B 分支中的内容。我们在编辑器中将其改成想要的样子
解决好的样子
&emps;&emps;&emps;&emps;如上所示,本次修正让 feature-A 与 fix-B 的内容并存于文件之中。但是在实际的软件开发中,往往需要删除其中之一,所以各位在处理冲突时,务必要仔细分析冲突部分的内容后再行修改。

提交解决后的结果

R@R MINGW64 ~/gitlearn (master|MERGING)
$ sublime README.md

R@R MINGW64 ~/gitlearn (master|MERGING)
$ git add README.md

R@R MINGW64 ~/gitlearn (master|MERGING)
$ git commit -m "fix conflict"
[master a0ff067] fix conflict

修改提交信息

要修改上一条提交信息,可以使用 git commit --amend命令

R@R MINGW64 ~/gitlearn (master)
$ git commit --amend
hint: Waiting for your editor to close the file...

自动打开编辑器
将其修改为merge branch ‘fix-B’

R@R MINGW64 ~/gitlearn (master)
$ git commit --amend
[master 8bce967] merge branch 'fix-B'
 Date: Tue Oct 25 21:08:44 2022 +0800

使用git log --graph查看一下现在的分支情况

R@R MINGW64 ~/gitlearn (master)
$ git log --graph
*   commit 8bce9671a0f731b93c79d953e3152b58f98de379 (HEAD -> master)
|\  Merge: e1e5b99 555b9ec
| | Author: RR <xxxxxxxx2@qq.com>
| | Date:   Tue Oct 25 21:08:44 2022 +0800
| |
| |     merge branch 'fix-B'
| |
| * commit 555b9ec58987a460414e4fd3b164f3fcfba1263c (fix-B)
| | Author: RR <xxxxxxxx@qq.com>
| | Date:   Tue Oct 25 20:53:38 2022 +0800
| |
| |     fix-B
| |
* |   commit e1e5b99846f148f04f0cc87a0a75bbf442937f3f
|\ \  Merge: 0bffe81 6c64c8c
| |/  Author: RR <xxxxxxxx@qq.com>
|/|   Date:   Mon Oct 24 20:01:18 2022 +0800
| |
| |       Merge branch 'feature-A'
| |
| * commit 6c64c8c35152e33e478a24fed2e3851ffb7d6577 (feature-A)
|/  Author: RR <xxxxxxxx@qq.com>
|   Date:   Mon Oct 24 19:37:37 2022 +0800
|
|       Add -feature-A
|
* commit 0bffe81fd4a24b84f11b05515962211229b65ae1
| Author: RR <xxxxxxxx@qq.com>
| Date:   Mon Oct 24 10:41:15 2022 +0800
|
|     add a title to README.md
|
* commit d07f69bc0e3f3d4268bd377f9585e80718756c62
  Author: RR <xxxxxxxx@qq.com>
  Date:   Sat Oct 22 18:15:55 2022 +0800

      my first commit

下次见!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

广阔天地,大有可为

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值