git commit撤销修改

背景

如果提交了代码,却发现有不需要提交的文件。这时候如何修改呢?可以用git reset指令。

git reset用法解释

git reset 命令用于回退版本,可以指定退回某一次提交的版本。

git reset 命令语法格式如下:

git reset [--soft | --mixed | --hard] [HEAD]

–mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。

git reset  [HEAD] 

实例:

$ git reset HEAD^            # 回退所有内容到上一个版本  
$ git reset HEAD^ hello.php  # 回退 hello.php 文件的版本到上一个版本  
$ git reset  052e           # 回退到指定版本

–soft 参数用于回退到某个版本:

git reset --soft HEAD

实例:

$ git reset --soft HEAD~3   # 回退上上上一个版本 

–hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:

git reset --hard HEAD

实例:

$ git reset --hard HEAD~3  # 回退上上上一个版本  
$ git reset –hard bae128  # 回退到某个版本回退点之前的所有信息。 
$ git reset --hard origin/master    # 将本地的状态回退到和远程的一样 

**注意:**谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。

HEAD 说明:

  • HEAD 表示当前版本
  • HEAD^ 上一个版本
  • HEAD^^ 上上一个版本
  • 以此类推…

可以使用 ~数字表示

  • HEAD~0 表示当前版本
  • HEAD~1 上一个版本
  • HEAD^2 上上一个版本
  • 以此类推…

操作实例

git reset --mixed

如下例子,我们在add a.txt和b.txt后,发现并不需要提交b.txt,就可以使用git reset b.txt命令来撤销提交该文件,且该文件内容保持不变,存在工作区

JiuWuyou@ABC MINGW64 /d/Code/test
$ git init
Initialized empty Git repository in D:/Code/test/.git/

JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ touch a.txt

JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ touch b.txt

JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git add a.txt b.txt

JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   a.txt
        new file:   b.txt

JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git reset b.txt

JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   a.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        b.txt

git reset --soft

如下例子,我们在提交c.txt后想撤销本地提交,同时保留本次提交的文件改动,就可以使用git reset --soft 0f6893dbb命令来撤销提交,并恢复c.txt到工作区,0f6893dbb为上一次commit的ID

JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git log
commit 0f6893dbbeebed8aee62e4ed5c5089420a08fff0 (HEAD -> master)
Author: JiuWuyou <JiuWuyou@dias.com.cn>
Date:   Mon Nov 4 11:02:23 2024 +0800

    提交a和b文件

JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ touch c.txt

JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git add c.txt 

JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   c.txt

JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git commit -m"提交c文件"
[master c00c6d7] 提交c文件
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 c.txt


JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git log
commit c00c6d78169835438da2c602d9dba9985ee6b18d (HEAD -> master)
Author: JiuWuyou <JiuWuyou@dias.com.cn>
Date:   Mon Nov 4 11:05:42 2024 +0800

    提交c文件

commit 0f6893dbbeebed8aee62e4ed5c5089420a08fff0
Author: JiuWuyou <JiuWuyou@dias.com.cn>
Date:   Mon Nov 4 11:02:23 2024 +0800

    提交a和b文件


JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git reset --soft 0f6893dbb

JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git log
commit 0f6893dbbeebed8aee62e4ed5c5089420a08fff0 (HEAD -> master)
Author: JiuWuyou <JiuWuyou@dias.com.cn>
Date:   Mon Nov 4 11:02:23 2024 +0800

    提交a和b文件

JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   c.txt


相比上述例子,如果不需要保留c.txt就可以使用git reset --hard 0f6893dbb命令。同时–mixed与–soft的区别是--soft 会保留所有更改在索引中,而 --mixed 会将更改保留在工作目录中,但不会保留在索引中。选择哪种模式取决于你想如何处理 HEAD 指向的提交之后的更改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

钢琴上的汽车软件

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

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

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

打赏作者

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

抵扣说明:

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

余额充值