赞
踩
这本来不是一个很严重的问题, 有很多办法可以处理, 但是对于Git新手来说, 会觉得非常可怕, 因为不知道怎么恢复之前的状态, 不知道当前状态上传上去会造成什么影响, 最怕的是影响到master之类的主分支, 然后把别人的工作搞丢, 那就完蛋了.
我刚开始接触Git的时候, 上级给了一份详细的文档让我按照步骤上传代码, 前面的更新本地master, 创建分支都没有什么问题, 但是好死不死我在修改本地分支内容之前忘记先把本地状态push到远端了, 因为本地需要rebase master, 然后通过push和远端同步, 如果不做这一步, 分支就会混乱, 于是我想把本地更新的东西移除掉, 然后再push. 由于不知道做了哪些更改, 就直接用了reset指令恢复之前的状态, 结果越搞越乱, 最后本地分支的log乱七八糟的, 我只好跟上级说, 能不能帮我解决这个问题, 上级过来看了以后, 一通上下翻飞操作就给我解决了, 我看了非常羡慕, 暗暗下决心我也要拥有这项技术.
我还是使用自己的代码仓库gitee来举例.
这个部分就是解决我之前说的问题, 就是我本地什么都不要了, 只要和远程完全一致就可以, 最狠的办法是重新找一个文件夹, 然后用git clone拉一次, 这样你的本地和远程就绝对完全一致了, 但是这个方法代价太大, 而且完整的git仓库动辄几个G甚至十几个G, 耗时太长, 以下有一些简单的方法可以参考.
指令一 切换到你的分支
git checkout your_branch
指令二 从远程拉取所有数据
git fetch origin
指令三 以远程分支为范本, 强制恢复本地分支
git reset --hard origin/remoteBranchName
指令1 切换到master:
git checkout master
指令2 删除本地分支:
git branch -D 本地分支
指令3 创建基于远程分支的本地分支
git checkout -b 本地分支 origin/远程分支
其中, 本地分支和远程分支不一定要同名,使用
git branch -vv
来对比本地分支和远程分支的对应关系
其中左边的是本地分支名, 右边的origin/之后的就是远程分支名
使用
git log -1
查看commit ID和远程是否一致,一致则没有问题
本地ID:
远程ID:
前7位一致即可.
git branch -r
查看远端分支有哪些
因为git是以commit ID为核心的版本管理工具, 所以commit操作就显得非常重要, 我们在判断一个版本是否最新时, 也会按照commit ID去确认, 然后如果操作有问题, 也需要通过commit ID去恢复, 所以补充一下这一块的内容.
参考
https://blog.csdn.net/qq_34238798/article/details/108003838
git reset --hard HEAD
回退/撤销。回退到最近一次的COMMIT版本上(即 【当前版本/撤销到倒数第1个COMMIT版本】);将工作区、暂存区和HEAD保持一致。
git reset --hard HEAD~1
或 git reset --hard HEAD^
回退/撤销。回退到上一次的COMMIT版本上(即 【上一版本/撤销到倒数第2个COMMIT版本】);将工作区、暂存区和HEAD保持一致。
git reset --hard HEAD~2
或 git reset --hard HEAD^^
回退/撤销。回退到上上次的COMMIT版本上(即 【上上版本/撤销到倒数第3个COMMIT版本】);将工作区、暂存区和HEAD保持一致。
…
git reset --hard HEAD~99
或 git reset --hard HEAD…(99个’^’)
回退/撤销。回退到上上次的COMMIT版本上(即 【撤销到倒数第100个COMMIT版本】);将工作区、暂存区和HEAD保持一致。
–hard删除工作空间改动代码,撤销commit,撤销git add . 注意完成这个操作后,就恢复到了上一次的commit状态。
这一步操作可以代替撤销本地修改,不管有没有commit,都可以用它恢复到老版本
git reset --soft HEAD~1
–soft 不删除工作空间改动代码,撤销commit,不撤销git add .
用soft,然后把原文件放回去,再add一次
–mixed 意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
这些问题不大, 自己试试即可, 懒得截图了.
撤销add
git reset HEAD .
撤销文件修改
git checkout .
reset虽然是一条很好用的指令, 但是随意reset也会导致一些麻烦的问题, 比如我一开始说的, 我用reset回退了太多版本, 导致找不到后面的版本了, 于是搞乱了本地, 如果这时候上传代码, 很可能会把别人的工作也弄丢, 所以如果想恢复reset的操作, 可以参考下面的代码.
git reflog -5
可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
例如执行 git reset --hard HEAD~1,退回到上一个版本,用git log则是看不出来被删除的commitid,用git reflog则可以看到被删除的commitid
git reset --hard xxxxxx
选择一条你想恢复的即可
在master执行相同的reset命令即可
git reset --hard XXXXX
git push -f
不多解释了, 希望大家不要有机会用上这个命令.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。