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^^^... 一次类推

  • 相关阅读:
    PAT 甲级 1115 Counting Nodes in a BST (30 分)
    PAT 甲级 1114 Family Property (25 分)
    PAT 甲级 1114 Family Property (25 分)
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
  • 原文地址:https://www.cnblogs.com/crelle/p/14518853.html
Copyright © 2011-2022 走看看