文章目录
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分支