zoukankan      html  css  js  c++  java
  • 【Git入门之五】版本管理

    【Git入门之五】版本管理 - JackyStudio - 博客频道 - CSDN.NET

    1.版本回退

    我们先看一下从项目开始到现在做了什么操作。

     

    [cpp] view
    plain
    copy
     
    1. #总共是4个操作  
    2. $Snbsp;git log --pretty=oneline  
    3. c5c83cfcdb25c67a5c66b4fe3844d0ea912830ec remove JackyData03  
    4. a25c58804cb3f4045564fc0ec6a4e6eb4dae7072 amend modify JackyData02  
    5. cba8800f2daaf4075a506b6d763798ea15ba11cc modify JackyData01  
    6. aea0365712908805bc28540b4db9fd2f15360a8b init AddFiles  

    现在我后悔了,不想移除JackyData03,怎么办?

    git reset用于版本回退,首先我们必须先知道当前版本是哪个,git用HEAD来表示当前版本。HEAD^表示上一个版本,HEAD^^表示上上个版本,HEAD~100表示往前100个版本。

     

     
    1. #回退到上一个版本  
    2. $Snbsp;git reset --hard HEAD^  
    3. HEAD is now at a25c588 amend modify JackyData02  

    现在看看,JackyGit/JackyData03是不是又回来了。

    注意:

    (1)--hard参数会把源码也给回退到指定版本,如果不用--hard,源码不会修改,只会回退,这时候如果想回退源码,需要再用git checkout<file>命令恢复。

    (2)reset只对本地仓库有效,而对远程仓库无效。如果要reset远程版本,可以这么做:

    ①先不要在本地reset,而是先创建一个分支old_master,并切换到old_master分支。

    ②push old_master分支到远程仓库。

    ③在old_master分支上reset版本,并删除本地的master分支和远程的master分支。

    ④创建本地分支master,推送到远程分支master,此时远程分支会新建master。

    ⑤删除本地old_master分支和远程old_master分支。

    以上操作都是属于比较危险的操作,需谨慎处理。

     

    2.版本选择

    这时我们再看看操作日记。

     

     
    1. #只剩3个操作了,移除JackyData03的操作不见了  
    2. $Snbsp;git log --pretty=oneline  
    3. a25c58804cb3f4045564fc0ec6a4e6eb4dae7072 amend modify JackyData02  
    4. cba8800f2daaf4075a506b6d763798ea15ba11cc modify JackyData01  
    5. aea0365712908805bc28540b4db9fd2f15360a8b init AddFiles  

    现在我又后悔了,想回到JackyData03被移除的状态。

    (1)如果git bash没被关掉,向前滚动找到

     

     
    1. #移除JackyData03文件的版本号  
    2. c5c83cfcdb25c67a5c66b4fe3844d0ea912830ec remove JackyData03  

    有了这个版本号,我们就可以这么做

     

     
    1. #还是使用reset,直接选择要切换的版本号  
    2. $Snbsp;git reset --hard c5c83c  
    3. HEAD is now at c5c83cf remove JackyData03  

    当然版本号可用不用完全输入,输入前几个git就会帮你找到,也不能太少,太少可能会找出多个。

    可以看到提示HEAD现在处在c5c83c这个版本位置。

    (2)如果git bash被关掉了,找不到版本号了怎么办?

    git reflog可以显示每一次的操作记录。

     

     
    1. $Snbsp;git reflog  
    2. c5c83cf HEAD@{0}: reset: moving to c5c83c  
    3. a25c588 HEAD@{1}: reset: moving to HEAD^  
    4. c5c83cf HEAD@{2}: commit: remove JackyData03  
    5. a25c588 HEAD@{3}: commit (amend): amend modify JackyData02  
    6. a5f6601 HEAD@{4}: commit: modify JackyData02  
    7. cba8800 HEAD@{5}: commit: modify JackyData01  
    8. aea0365 HEAD@{6}: commit (initial): init AddFiles  

    然后再使用reset命令,就可以随意选择版本了。



    3.撤销修改

    3.1.工作区

    再修改点东西。

     

     
    1. #修改JackyData01内容  
    2. $Snbsp;echo "GoodBye SVN" > Jackydata01  

    看一下状态

     

     
    1. #看一下状态,Jackydata01在工作区被修改了(红色高亮)  
    2. $Snbsp;git status  
    3. # On branch master  
    4. # Changes not staged for commit:  
    5. #   (use "git add <file>..." to update what will be committed)  
    6. #   (use "git checkout -- <file>..." to discard changes in working directory)  
    7. #  
    8. #       modified:   Jackydata01  
    9. #  
    10. no changes added to commit (use "git add" and/or "git commit -a")  

    现在我后悔了(最后一次),想要撤销删除怎么办?

    git checkout --file可以撤销工作区的修改

     

     
    1. #撤销JAckydata01的改动  
    2. $Snbsp;git checkout -- Jackydata01  
    3.   
    4. #看一下当前Git仓库的状态,干净的  
    5. $Snbsp;git status  
    6. # On branch master  
    7. nothing to commit, working directory clean  

    3.2.暂存区

    再改Jackydata01的内容。

     

     
    1. #修改JackyData01内容  
    2. $Snbsp;echo "GoodBye SVN" > JackyData01  

    这次手太快了,直接把修改的内容add到暂存区了。

     

     
    1. #修改内容add到暂存区  
    2. $Snbsp;git add Jackydata01  
    3.   
    4. #看一下状态,JackyData01在被修改了,并add到暂存区(绿色高亮)  
    5. yf005@yf005 /d/jackygit (master)  
    6. $Snbsp;git status  
    7. # On branch master  
    8. # Changes to be committed:  
    9. #   (use "git reset HEAD <file>..." to unstage)  
    10. #  
    11. #       modified:   Jackydata01  
    12. #  

    嗯,没错你猜对了。我后悔了(节操呢?),这时要怎么办?

    这时直接使用git checkout --file是无效的。

    必须先使用git reset HEAD file把暂存区的修改撤回到工作区的修改。

     

     
    1. #撤回到工作区的修改  
    2. $Snbsp;git reset HEAD Jackydata01  
    3. Unstaged changes after reset:  
    4. M       Jackydata01  
    5.   
    6. #看一下当前状态,未添加到暂存区(红色高亮)  
    7. $Snbsp;git status  
    8. # On branch master  
    9. # Changes not staged for commit:  
    10. #   (use "git add <file>..." to update what will be committed)  
    11. #   (use "git checkout -- <file>..." to discard changes in working directory)  
    12. #  
    13. #       modified:   Jackydata01  
    14. #  
    15. no changes added to commit (use "git add" and/or "git commit -a")  

    这个时候重复3.1.工作区内的撤销修改即可。

    3.3.已提交到版本库

    如果已经提交到版本库,那么使用1.版本回退功能吧。



    3.4.其他撤销指令

    其他撤销指令诸如git clean和git revert请自行尝试。

  • 相关阅读:
    Dev gridControl 按回车增加一行
    Web自动化----常见组件操作
    Web自动化----切换(iframe,浏览器窗口,alret)
    Web自动化----元素等待方法(显式等待和隐式等待)
    Web自动化----模拟动作(鼠标,快捷键,拖拽)
    MySQL的20条基本优化 加参考资料
    国内IT技术博客对比
    博客客户端文章测试
    QQ登录网站接入
    微信公众号本地开发调试工具
  • 原文地址:https://www.cnblogs.com/seven1979/p/4257294.html
Copyright © 2011-2022 走看看