Git版本冲突或者版本回退


git add 命令只是把工作区当前的修改提交到暂存区中。

git commit一次将暂存区中的内容提交到版本库中。

撤销本地工作区所做的修改

git checkout .

查看变化

git diff: 当工作区有改动,临时区为空,diff的对比是“工作区最后一次commit提交的仓库的共同文件”;当工作区有改动,临时区不为空,diff对比的是“工作区与暂存区的共同文件”。
git diff --cached 或 git diff --staged:显示暂存区(已add但未commit文件)最后一次commit(HEAD)之间的所有不相同文件的增删改
git diff HEAD:显示工作目录(已track但未add文件)和暂存区(已add但未commit文件)与最后一次commit之间的的所有不相同文件的增删改

1.Git版本回退(本地编辑器中都会回退)

#查看log
bixiaopeng@bixiaopengtekiMacBook-Pro wirelessqa$ git log
commit 047cd2d2f6bd1ecdcdb4854b728300aeaa314b80
Author: 小朋 <xiaopeng.bxp@****.com>
Date:   Thu Jan 2 22:26:50 2014 +0800
 
 
    1test
 
 
commit fa7fd8d49f3789d39aa3cc52cd81e09e6d061719
Author: 小朋 <xiaopeng.bxp@****.com>
Date:   Tue Dec 31 13:29:45 2013 +0800
 
 
    delete test2
 
 
commit 746f92258e2bc65c46f77f37315f577091192885
Author: 小朋 <xiaopeng.bxp@****.com>
Date:   Tue Dec 31 13:22:07 2013 +0800
 
 
    test git commit -a 
 
…..
 

HEAD是指向最新的提交,上一次提交是HEAD,上上次是HEAD^,也可以写成HEAD~2 ,依次类推
这种方法会连本地的修改也会全部放弃,所以需要慎重

#放弃本地所有修改,回退到上一个版本
bixiaopeng@bixiaopengtekiMacBook-Pro wirelessqa$ git reset --hard HEAD^
HEAD is now at fa7fd8d delete test2

注: --hard 表示放弃所有本地改动

#再次查看log
bixiaopeng@bixiaopengtekiMacBook-Pro wirelessqa$ git log
commit fa7fd8d49f3789d39aa3cc52cd81e09e6d061719
Author: 小朋 <xiaopeng.bxp@****.com>
Date:   Tue Dec 31 13:29:45 2013 +0800
 
 
    delete test2
 
 
commit 746f92258e2bc65c46f77f37315f577091192885
Author: 小朋 <xiaopeng.bxp@****.com>
Date:   Tue Dec 31 13:22:07 2013 +0800
 
 
    test git commit -a
 
 
commit e301c4e185b0937d1ce9484ea86ab401e95c976c
Author: 小朋 <xiaopeng.bxp@****.com>
Date:   Tue Dec 31 13:14:42 2013 +0800
 
 
    just test 
 
………..
 

Git 合并多次 commit(下面这种方法,最好不要用它属于强推,最好使用另外一篇博客的)

另外一篇点击这里
有时候在一个分支的多次意义相近的 commit,会把整个提交历史搞得很混乱,此时可以将一部分的 commit 合并为一个 commit,以美化整个 commit 历史,可以使用 rebase 的方法来合并多次 commit,主要步骤如下:

1. git log 查看当前的提交历史

比如需要将以下 3 个 ”请假应用客户端代码优化“ 的 commit 合并为一个 commit;
在这里插入图片描述
参考博文,点击这里

git rebase --abort 会放弃合并,回到rebase操作之前的状态,之前的提交的不会丢弃;

git rebase --skip 则会将引起冲突的commits丢弃掉(慎用!!);

git rebase --continue 合并冲突,结合"git add 文件"命令一起用与修复冲突,提示开发者,一步一步地有没有解决冲突。(fix conflicts and then run “git rebase --continue”)

2. git rebase 进行 git 压缩

执行 git rebase -i HEAD~4 对最近的 4 个 commit 进行 rebase 操作;
在这里插入图片描述
具体的操作下面的 Commands 说明得很清楚了,对于 commit 合并可以使用 squash、fixup 指令,区别是 squash 会将该 commit 的注释添加到上一个 commit 注释中,fixup 是放弃当前 commit 的注释;
在这里插入图片描述
编辑后保存退出,git 会自动压缩提交历史,如果有冲突,记得解决冲突后,使用 git rebase --continue 重新回到当前的 git 压缩过程;
在这里插入图片描述

3. 推送到远程仓库 git push -f

重新查看提交提交历史,会发现这些 commit 已经合并了,整个提交历史简洁了很多:
在这里插入图片描述

2.删除某次 commit (本地也要被删除)

同样的,利用 git 压缩 rebase 指令来删除某个 commit,过程和以上是类似的;

在 git log 下,假如我们需要删除“请假应用客户端代码优化”这个 commit:
在这里插入图片描述
可以通过 git rebase -i HEAD~1 (对最近1次 commit 进行 rebase) 或 git rebase -i 9fbf10(对 commit id 前几位为 9fbf10 的 commit 之后的 commit 进行 rebase);
在这里插入图片描述
将需要删除的 commit 设置操作指令 drop ,保存退出即可;
在这里插入图片描述
在执行 git log 时,可以发现该条 commit 已经从提交历史中删除了;

撤回commit操作,您写的代码仍然保留

git reset --soft HEAD^

实战:

在这里插入图片描述
在具体使用的时候,自行判断应该去删除哪一个仓库的内容(手动解决)

远程分支版本回退(本地和远程都回退)

参考博文,点击这里
如果你的错误提交已经推送到自己的远程分支了,那么就需要回滚远程分支了。
1.首先要回退本地分支:

git reset --hard HEAD^   # hard选项,表示彻底将工作区、暂存区和版本库记录恢复到指定的版本库

2.紧接着强制推送到远程分支:

git push -f origin master ## 这里假设只有一个master分支
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值