git撤销各种状态下的操作

简介: 使用Git时会出现各种各样的问题,下面是几种情况下怎么反悔的操作一,未加入缓存区,撤销文件修改     git checkout -- file二,已加入缓存区,撤销文件提交     git reset HEAD file     或git rm --cached file三,已...

使用Git时会出现各种各样的问题,下面是几种情况下怎么反悔的操作

一,未加入缓存区,撤销文件修改

     git checkout -- file

二,已加入缓存区,撤销文件提交

     git reset HEAD file

     或git rm --cached file

三,已提交到本地,回滚提交

     git reset --HARD commit_id/HEAD^n

四,已push到远程

1,git revert的方式

      1)git revert commit_id   //将要撤销的提交revert为一次新的提交,这样不仅提交被撤销了,而且本地分支也比远程分支多一次提交

      2)git push origin master //推送到远程

      这种方式是最方便的,但缺点是多了2次无用的commit,使整个分支的commit不再整洁。

2,如果远程仓库不是使用git init --bare建立的裸仓库(裸仓库无法回滚提交),而是一个普通仓库(通过git init建立),那么你可以登录到远程服务器,然后回滚远程分支,然后再把本地分支回滚。

      

3,可删除远程分支,然后回滚本地分支,然后将本地分支push到origin

          1)git branch xxx_backup                                //创建备份分支

          2)git push origin xxx_backup:xxx_backup  //将备份分支推送到origin

          3)git checkout  xxx                                           //切回要撤销修改的分支

          4)git reset --hard commit_id                          //撤销本地commit

          5)git push origin :xxx                                      //删除远程xxx分支

          6)git push origin xxx:xxx                                //将本地撤销修改后的xxx分支推送到origin

          7)git branch -d xxx_backup                          //删除本地备份分支

                git push origin :xxx_backup                      //删除远程备份分支

          上述步骤5执行时可能会出现错误,如下:

          

         尤其是远程仓库是在github或oschina上时,因为这些网站中将某分支设置成了当前分支,而删除当前分支是不允许的,所以要在这些网站的设置中切换当前分支为其它分支,然后再此执行步骤5.

4,方法3中,如果是自己建立的仓库,默认分支是master,我没找到修改默认分支的办法,master分支也就无法删除,方法4也就没用了。但有另一种方法可以解决问题

      1)登录服务器,备份中央仓库

            mv demo.git demo_backup.git

      2)新建一个空的demo.git       

            git init --bare demo.git

      3)通过回滚,修复本地提交到正常状态

            git reset --hard 提交id

      4)推送本地的master分支到服务器的demo.git

            git push remote master:master

      这样的做法,可以保存之前的提交记录,是比较好的修复方式;这种方法比较适合修复出现代码覆盖的情况

如果中间出现问题,请通过demo_backup.git找回中央仓库


错误的做法

1,直接reset本地提交,然后push到origin

          这种做法是错误的,git会报错,原因是远程仓库中该分支比本地分支多n次commit,只能先pull,再push。而如果先pull的话,那本地又变成和远程一样了,是解决不了问题的。

相关文章
|
2月前
|
开发工具 git
记IDEA Git版本回退并push到远程操作
记IDEA Git版本回退并push到远程操作
65 1
记IDEA Git版本回退并push到远程操作
|
2月前
|
开发工具 git 开发者
|
2月前
|
开发工具 git
web后端-IDEA的Git操作
web后端-IDEA的Git操作
|
2月前
|
Linux 网络安全 开发工具
Git拉取代码的完整示例操作
Git拉取代码的完整示例操作
128 0
|
1天前
|
Ubuntu 开发工具 git
git 超实用教程【人人必会!】(含大厂的 git 操作规范)
git 超实用教程【人人必会!】(含大厂的 git 操作规范)
6 0
|
28天前
|
开发工具 git
idea的git reset current branch to here操作详解
idea的git reset current branch to here操作详解
26 1
|
2月前
|
开发工具 git 开发者
【专栏】探讨了 Git 中的 `git rebase` 操作,它用于重新应用提交到另一分支,改变历史顺序
【4月更文挑战第29天】本文探讨了 Git 中的 `git rebase` 操作,它用于重新应用提交到另一分支,改变历史顺序。与 `git merge` 不同,rebase 重写提交历史,提供简洁线性的历史记录。文章介绍了 rebase 的基本操作、应用场景,如整理提交历史、解决冲突和整合分支,并强调了使用注意事项,如避免在公共分支上操作。尽管 rebase 可以带来整洁的历史和冲突解决便利,但其潜在的风险和可能导致的历史混乱需谨慎对待。理解并恰当使用 `git rebase` 可以提升开发效率和代码质量。
|
2月前
|
开发工具 git 开发者
掌握常见Git操作:技巧与实践
掌握常见Git操作:技巧与实践
|
2月前
|
Linux 开发工具 数据安全/隐私保护
【Linux】git操作 - gitee
【Linux】git操作 - gitee
【Linux】git操作 - gitee