设为首页 收藏本站
查看: 1789|回复: 0

[经验分享] git 文件、版本回滚

[复制链接]
发表于 2018-9-17 06:15:44 | 显示全部楼层 |阅读模式
  TortoiseGit - 版本回退
  http://www.cnblogs.com/McKean/p/6083447.html
  1、show log

  2、点击左上角的master,选择远程的master分支

  3、右击需要回退到的目标点,选择 Reset "master" to this ...

  选择 Hard: Reset working tree and index (discard all local changes)

  4、处理完后,可以看到master分支已经跟orgin/HEAD orgin/master不在一个点上了

  git
git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态  
git stash #把所有没有提交的修改暂存到stash里面。可用git stash pop恢复。
  
git reset --hard HASH #返回到某个节点,不保留修改。
  
  git reset --hard HEAD~1    工作区、仓库区都回退到上一个版
  
  git reset --hard HEAD^     同 git reset --hard HEAD~1
  

  
git reset --soft HASH #返回到某个节点。保留修改,本地文件没有改变,需要 git checkout file再commit
  git回到上一版本命令
  git reset是指将当前head的内容重置,不会留log信息。
  git reset HEAD filename  从暂存区中移除文件
  git reset --hard HEAD~3  会将最新的3次提交全部重置,就像没有提交过一样。
  git reset --hard commit (38679ed709fd0a3767b79b93d0fba5bb8dd235f8) 回退到 38679ed709fd0a3767b79b93d0fba5bb8dd235f8 版本
  根据--soft --mixed --hard,会对working tree和index和HEAD进行重置:
  git reset --mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
  git reset --soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
  git reset --hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容
  例如:我要彻底返回在上一次提交以前的版本。git reset --hrad HEAD~1
  我要回到上一次提交的版本:
  git reset --hard
  回滚单个文件
  1.进入到文件所在文件目录,或者能找到文件的路径
  查看文件的修改记录
1 $ git log MainActivity.java  结果:
1  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
commit 7641210b242a95eed17827dd8159e76bdad6d619Author: ronanhardiman Date:   Mon Apr 29 00:51:00 2013 +0800  

  
    System.currentTimeMillis() 替代 timer 实现 连续两次返回键退出
  

  
    System.currentTimeMillis() 替代 timer 实现 连续两次返回键退出commit a4e215234aa4927c85693dca7b68e9976948a35eAuthor: kaxi4it Date:   Sat Apr 27 16:54:48 2013 +0800
  

  
    修正了退出程序的BUG
  

  
    用INT代替BOOL标记,修正了快速点击返回键一直播放退出动画的BUG,跳转页面后标记commit d31fcc01223407492310c1567a7b84ece1287368Author: yjl Date:   Mon Mar 25 12:09:21 2013 +0800
  2.回退到指定的版本
1$ git reset a4e215234aa4927c85693dca7b68e9976948a35e MainActivity.java  结果
1  
2
  
3
Unstaged changes after reset:M       source/src/cn/eoe/app/ui/MainActivity.javasu@SUCHANGLI /e/eoeclient/android-app/source/src/cn/eoe/app/ui (master)  3.提交到本地参考
1$ git commit -m "revert old file because yjl commmit have a bug"  结果
1  
2
  
3
[master 874e01a] revert old file because yjl commmit have a bug  
1 file changed, 26 insertions(+), 19 deletions(-)su@SUCHANGLI /e/eoeclient/android-app/source/src/cn/eoe/app/ui (master)
  4.更新到工作目录
1$ git checkout MainActivity.java  5.提交到远程仓库
1$ git push origin master  Your local changes to the following files would be overwritten by merge
  error: Your local changes to the following files would be overwritten by merge:
  protected/config/main.php
  Please, commit your changes or stash them before you can merge.
  参考http://blog.csdn.net/zwhfyy/article/details/8625228
  如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:
  git stash
  git pull
  git stash pop
  然后可以使用git diff -w +文件名 来确认代码自动合并的情况.
  反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:
  git reset --hard
  git pull
  其中git reset是针对版本,如果想针对文件回退本地修改,使用
  untracked working tree file
  参考:http://blog.csdn.net/sheismylife/article/details/7204345
  编写脚本自动编译并部署时的注意
  如果想在C2上编写脚本自动从S1上获取最新代码时,要注意:
  1.首先之前产生的公钥不能设密码,否则每次git pull的时候都会要求输入密码。
  2.不要将项目中的编译中间文件提交到S1上,比如CMake工程里面的build目录的文件,Maven工程里面的target目录里面的文件。否则下次在C2等客户端用git pull会报类似于这样的错误:
  error: Untracked working tree file 'public/images/icon.gif' would be overwritten by merge.
  需要执行下面的命令才能修复:
  git reset --hard HEAD
  git clean -f -d
  git pull
git 如何回滚远程仓库版本
关于远程仓库回滚
  首先,必须要明白的一件事,任何普通用户不能擅自做有关远程仓库回退的操作,如果你擅自回滚了远程仓库,会对项目团队其他人造成不可预知的影响。如果需要回退版本,先联系项目的仓库管理员,在团队其他人都对自己本地未提交的工作做好备份之后,再进行远程仓库回退操作,操作结束后,团队成员需要重新同步远程仓库后继续自己的工作。
  通常回滚远程仓库会有以下三种情形:
1、删除最后一次提交
  这种情况是最简单的了,只需要以下两步就可以了
    git revert HEAD  
    git push origin master
注意,revertreset的区别:
  revert是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在,而reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。如果还没有理解的话,我们做如下测试:
  假设我们有以下三次提交记录:

  现在我们使用revert放弃最后一次提交,之后执行git log:
    git revert HEAD  
    git log

  历史记录中还有第三次提交的记录,并且多了一次的提交,但是仓库内容已经回到了第二次提交之后的状态。 现在我们使用reset回到第三次提交,之后执行git log:
    git reset --hard HEAD^  
    git log

  历史记录中已经没有之前revert生成的提交记录了,现在应该明白了吧。 如果删除远程仓库的最后一次提交的时候不需要保留历史记录的话,可以使用reset,命令如下:
    git reset --hard HEAD^  
    git push origin master -f
  

  
报remote: GitLab: You are not allowed to access master![K
  
remote: error: hook declined to update refs/heads/master[K
  
To http://myserver.com/root/push2jump.git
  
! [remote rejected] master -> master (hook declined)
  
error: failed to push some refs to '
  

  
解决方法:
  
登录gitlab,把分支的保护去掉,打开项目,点击 左上角的 Edit,弹出页上点击  Protected branches,再点击Unprotect,重新 git push -f
  -f 参数是强制提交,因为reset之后本地库落后于远程库一个版本,因此需要强制提交。
2、删除历史某次提交

  这种情况需要先用git log命令在历史记录中查找到想要删除的某次提交的commit>


  然后执行以下命令("commit>^号,意思是commit>    git rebase -i "commit id"^  执行该条命令之后会打开一个编辑框,内容如下,列出了包含该次提交在内之后的所有提交。

  然后在编辑框中删除你想要删除的提交所在行,然后保存退出就好啦,如果有冲突的需要解决冲突。接下来,执行以下命令,将本地仓库提交到远程库就完成了:
    git push origin master -f3、修改历史某次提交
  这种情况的解决方法类似于第二种情况,只需要在第二条打开编辑框之后,将你想要修改的提交所在行的pick替换成edit然后保存退出,这个时候rebase会停在你要修改的提交,然后做你需要的修改,修改完毕之后,执行以下命令:
    git add .  
    git commit --amend
  
    git rebase --continue
  如果你在之前的编辑框修改了n行,也就是说要对n次提交做修改,则需要重复执行以上步骤n次。

  需要注意的是,在执行rebase命令对指定提交修改或删除之后,该次提交之后的所有提交的"commit>  Git pull 强制覆盖本地文件
  git fetch --all
  git reset --hard origin/master
  git pull



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-587736-1-1.html 上篇帖子: Git 初始化版本库 下篇帖子: SVN如何迁移到Git?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表