git命令行练习地址:git练习地址
撤销变更
1.Git reset(直接退回到指定提交)
git reset 通过把分支记录回退几个提交记录来实现撤销改动 回退到上一个提交,当前提交的更改放到工作区(未跟踪) 变更前:  变更后:执行git reset HEAD^(HEAD~1)  本地仓库没有发现C2的存在(这个提交没有在本地仓库内,未提交状态)
2.Git revert(产生新的提交,是指定退回的提交的副本)
当前的提交记录还存在,新增了一条提交记录,新增的这条提交记录与需要退回的提交记录(上上条提交记录)一样 变更前:  变更后:执行:git revert HEAD  在我们要撤销的提交记录后面居然多了一个新提交!这是因为新提交记录 C2’ 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。也就是说 C2’ 的状态与 C1 是相同的。
练习:  执行
git reset HEAD^(HEAD~1)
git checkout pushed
git revert HEAD
整理提交记录
Git Cherry-pick
将一些(多个,可位于不同分支)提交复制到当前所在的位置(HEAD)下面的话, Cherry-pick 是最直接的方式了 merge和rebase是将两个分支合在一起,Cherry-pick是将多个(两个及以上)提交复制到当前位置(分支) 注意: cherry-pick 可以将提交树上任何地方的提交记录取过来追加到 HEAD 上(只要不是 HEAD 上游的提交就没问题)。
处理多个提交时,有遇到冲突的会中断复制操作,处理好冲突后,若还有提交未处理的,使用git cherry-pick --continue 命令继续 
变更前:  变更后:执行git cherry-pick C2 C4  练习:  执行:
git cherry-pick C3 C4 C7
交互式的 rebase
交互式的 rebase:指的是使用带参数 --interactive 的 rebase 命令, 简写为 -i。Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。 git rebase --abort:去掉变基
执行前:  命令:git rebase -i HEAD~4 调整提交顺序 执行后: 
例子练习: 
git branch -f bugFix C1
git cherry-pick C4
git branch -f master bugFix
例子2: 
git rebase -i HEAD~2
git commit --amend
git rebase -i HEAD~2
git branch -f master caption
例子3:  命令:
git checkout master
git cherry-pick C2
git branch -f master C1
git cherry-pick C2 C3
|