Git(8)git已提交未推送内容的重置操作

假如仓库中有三次未推送的提交V1、V2、V3

        HEAD~        HEAD

            |                  |

            |                  v

            |              master

            |                  |

           v                  v

V1 <-  V2     <-       V3

本地仓库(HEAD)      暂存区(index)       工作区(working)                

commited状态           added状态              modify状态                        

        V3                           V3                          V3

一、重置整个版本

1、只移动HEAD,使HEAD指向V2

git reset --soft HEAD~    

        HEAD~        HEAD

            |                  |

            |                  v

            |              master

            |                 |

           v                 v

          V1     <-       V2     <-      V3
    
本地仓库(HEAD)      暂存区(index)       工作区(working)                

  commited状态          added状态            modify状态            

        V2                           V3                         V3

撤销上一次提交,不取消之前的暂存,可以继续暂存新的修改。此操作使本地仓库恢复到V2版本的状态,V3版本未提交已添加。

2、更新索引,使HEAD指向V2且索引为V2的状态

git reset [--mixed] HEAD~

       HEAD~        HEAD

            |                  |

            |                  v

            |              master

            |                  |

           v                 v

          V1     <-       V2     <-      V3

本地仓库(HEAD)        暂存区(index)        工作区(working)                

  commited状态            added状态              modify状态

        V2                            V2                            V3

撤销上一次提交,且取消上一次提交的所有暂存。此操作使暂存区和本地仓库恢复到V2版本的状态,V3版本未暂存已修改。

3、更新工作目录,使HEAD指向V2且索引和工作区均为V2的状态

git reset --hard HEAD~

       HEAD~        HEAD

            |                  |

            |                  v

            |              master

            |                  |

           v                 v

          V1     <-       V2     <-      V3

本地仓库(HEAD)        暂存区(index)        工作区(working)                

  commited状态            added状态              modify状态

        V2                            V2                            V2

        撤销上一次提交,取消上一次提交的所有暂存,抛弃上一次提交的所有暂存的修改,此操作销毁了数据,覆盖了工作区。在这种特殊情况下,我们的 Git 数据库中的一个提交内还留有该文件的 V3 版本, 我们可以通过 reflog 来找回它。但是若该文件还未提交,Git 仍会覆盖它从而导致无法恢复。此操作使工作目录、暂存区和本地仓库均恢复到V2版本的状态

二、通过路径来重置指定文件

       HEAD~        HEAD

            |                  |

            |                  v

            |              master

            |                  |

           v                  v

V1 <-  V2     <-       V3

本地仓库(HEAD)      暂存区(index)       工作区(working)                

commited状态           added状态              modify状态                        

        V3                           V4                          V4

1、文件file.txt的版本为V4且已暂存,执行如下命令:

git reset file.txt(git reset [--mixed] HEAD file.txt 的简写)

       HEAD~        HEAD

            |                  |

            |                  v

            |              master

            |                  |

           v                  v

V1 <-  V2     <-       V3

本地仓库(HEAD)      暂存区(index)       工作区(working)                

commited状态           added状态              modify状态                        

        V3                           V4                          V4

文件file.txt的版本变为V3
                
2、文件file.txt的版本为V4且已暂存,执行如下命令:

git reset HEAD~ file.txt

       HEAD~        HEAD

            |                  |

            |                  v

            |              master

            |                  |

           v                  v

V1 <-  V2     <-       V3

本地仓库(HEAD)      暂存区(index)       工作区(working)                

commited状态           added状态              modify状态                        

        V3                           V4                          V4

文件file.txt的版本变为V2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值