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

原文地址:https://www.cnblogs.com/crelle/p/14518853.html