git reset rebase 用法总结

git reset 

 放弃修改,同步运程仓库,回退以前某个版本

 HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

       穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

       要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

1.1 放弃所有修改,完全同步运程仓库

 git reset --hard origin/master

1.2 未使用 git add 缓存代码时

 git checkout --[<path>]

 git checkout .     // 放弃所以的文件修改

1.3 已经使用了  git add 缓存了代码

 git reset HEAD [<path>]

 // 在使用本命令后,本地的修改并不会消失,而是回到了如(一)所示的状态。继续用(一)中的操作,就可以放弃本地的修改。

1.4 已经用 git commit  提交了代码

 git reset --hard HEAD^   // 回退到上一次commit的状态

 git reset --hard  commitid  // 此命令可以用来回退到任意版本

1.5 移动HEAD的指向,将其指向上一个快照。将HEAD移动后指向的快照回滚到暂存区

 git reset HEAD~
       git reset HEAD~10 // 返回到上10个快照

代码回滚

 1.1 没有push

这种情况发生在你的本地代码仓库,可能你add ,commit 以后发现代码有点问题,准备取消提交,用到下面命令

 reset
 git reset [--soft | --mixed | --hard
 上面常见三种类型

--mixed
  会保留源码,只是将git commit和index 信息回退到了某个版本.

  git reset 默认是 --mixed 模式
  git reset --mixed  等价于  git reset

--soft
  保留源码,只回退到commit 信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.

--hard
  源码也会回退到某个版本,commit和index 都回回退到某个版本.(注意,这种方式是改变本地代码仓库源码)

  当然有人在push代码以后,也使用 reset --hard <commit...> 回退代码到某个版本之前,但是这样会有一个问题,你线上的代码没有变,线上commit,index都没有变,当你把本地代码修改完提交的时候你会发现权是冲突.....
所以,这种情况你要使用下面的方式

 1.2  已经push

 对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令

 revert
 git revert用于反转提交,执行evert命令时要求工作树必须是干净的.
 git revert用一个新提交来消除一个历史提交所做的任何修改.
 revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新.(这里不会像reset造成冲突的问题)
 revert 使用,需要先找到你想回滚版本唯一的commit标识代码,可以用 git log 或者在adgit搭建的web环境历史提交记录里查看.
 git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61
 通常,前几位即可
 git revert c011eb3
 git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit
 看似达到的效果是一样的,其实完全不同.

 第一:
 上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突.但是revert 并不会.

 第二:
 如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.

 第三:

 reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.

git rebase

 使用 git rebase 合并多次commit。 当你提交的代码后,管理员发现,您的代码不能提交到服务器上,主要原因在于,你的commit 中和服务器中的有些commit不再同一时间轴上,即:你的有些commit要插入到服务器中的某些commit之间,这样就会造成代码的冲突。所以这个时候就要使用git rebase。

 1.1 使用 git log 查看历史提交记录

 1.2 合并最后四次的提交

  git rebase -i HEAD~4

 1.3 修改第2-4行的第一个单词pick为squash

1.4 然后保存退出,git会压缩提交历史,如果有冲突,需要修改,修改的时候要注意,保留最新的历史,不然我们的修改就丢弃了

1.5 修改以后要记得敲下面的命令
      git add .  

      git rebase --continue

 1.6 如果你想放弃这次压缩的话,执行以下命令:
      git rebase --abort


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值