zoukankan      html  css  js  c++  java
  • git关于恢复、重置和生成指定新版本分支的问题

    恢复和重置涉及的命令:git log 、git reset、git revert、git  reflog

    git log

      git log  [<options>] [<revision range>] [[--] <path>…​]  查看commit的提交记录

      e.g :

        git log 查看全部提交记录

        git log -5查看前五次提交记录

        git log -5 a.txt 查看涉及a.txt前五次的提交记录

        git log -5 -- a.txt 查看涉及a.txt前五次的提交记录

    git reset 

    git reset  --hard commitID(或者HEAD^)  

    git reset --soft commitID(或者HEAD^)

    git reset --mixed commitID(或者HEAD^)

       --hard --soft --mixed选项的区别:

     --hard 会丢弃所有的改变并且清空工作区和缓存区,

    --soft将commit到本地仓库的文件还原到工作区,但是缓存区中的内容不变,

    --mixed将commit到本地仓库和缓存区中的内容都还原到工作区

    e.g:

      git reset --hard HEAD^  丢弃最后一次的更改

      git reset --hard HEAD^^ 丢弃最新两次的更改 

    git revert

      git revert [<commit>](或者HEAD^)  

      e.g:

        git revert HEAD^ 丢弃最后一次的更改

        git revert HEAD^^ 只丢弃第二新的更改

      reset和revert的区别

        revert会建立一个新的commit,只恢复要恢复的commit

        reset会丢弃你要重置之后的commit,等于重置到指定commit的版本

    git  reflog

      可以查看已经删除的commitId

    1、项目组要求拉取一个分支,这个分支是我们主版本的指定版本,假定我们的主版本的分支名字就叫git-test,新版本分支叫git-feature我先来把操作命令写下来

    git log 列出提交目录
    git checkout e9f771353f2aa215ce962b5beb64a0bfd4a161f2  切换到指定commitId
    git switch -c git-feature 以上一步的commitId为版本建立分支git-feature
    git push -u origin git-feature 推到远程仓库的新分支中,远程仓库的名字为origin,分支名为git-feature

    git log 

     

    git checkout e9f771353f2aa215ce962b5beb64a0bfd4a161f2

    git switch -c git-feature

     git push -u origin git-feature

    git status

     

     完成!

    2、项目成员小王误提交了idea的配置文件并且已经推送到远程仓库,之后小李和小张也提交了代码并且推送到了远程仓库。假定分支名为git-feature,我们来帮他回退,我先把命令写下来:

    git log -5 查看前五条提交记录
    git revert e9f771353f2aa215ce962b5beb64a0bfd4a161f2 回退小王的commitId
    git push 把恢复的内容推到远程仓库

    git log -5

    git revert d7c99e8c9dea2f2b4cb289fe732e70b83bac486e

     

     git push

    git log -6

     3、项目成员小王误提交了idea的配置文件并且已经推送到远程仓库,之后小李和小张也提交了代码并且推送到了远程仓库,小王和小张,小李沟通,发现他们的提交内容也有问题,想一起回退掉。假定分支名为git-feature,我们来帮他回退,我先把命令写下来:

    git log -6
    查看提交日志
     git reset --hard e9f771353f2aa215ce962b5beb64a0bfd4a161f2 重置到指定版本(注意这个commitId是你想重置的commitId,一般是你提交的前一个commitId。而revert的commitId是你要恢复的commitId,
    一般是你提交的commitId)
     git log -5 查看提交日志

    git log -6

    git reset --hard  e9f771353f2aa215ce962b5beb64a0bfd4a161f2

    git log -5

     

     三个人的commit全都删除了,分支分回到了小王提交的前一个版本。

    ps: HEAD^ 最新的commitID  HEAD^^ 第二新的commitID  HEAD^^^ 第三新的commitID  HEAD^^^... 一次类推

  • 相关阅读:
    iOS开发——Autolayout下动态调整单元格高度
    iOS开发——随机数的使用
    iOS开发——使用基于Autolayout的ScrollView
    获取OS X中App Store更新后的安装包(如XCode)
    iOS开发——使用Autolayout弹出键盘
    iOS开发——给ImageView添加点击事件
    iOS开发——NSIBPrototypingLayoutConstraint原型约束造成的莫名问题
    iOS开发——异常:[__NSCFNumber length]: unrecognized selector sent to instance
    iOS开发——检测屏幕旋转
    iOS开发——使用Autolayout生成动态高度的TableViewCell单元格
  • 原文地址:https://www.cnblogs.com/crelle/p/14518853.html
Copyright © 2011-2022 走看看