Git 进阶

rebase：重设基础点

将当前的branch的基础点移动到目标分支。 这么做的好处是主干master明确。

Copy
git rebase <目标分支>

不过rebase之后 master 并没有跟随过去，需要再合并一下：

Copy
git checkout master
git merge <刚刚的分支>

这样 master 就和分支合并了。

刚刚的提交提错了，想要修改怎么办？

文件修改好之后使用 --amend，这会产生一个新的commit并替换掉最后一个commit

Copy
git add 文件
git commit --amend -m 说明

错了的是倒数第二个 commit，不是最后一个 commit，还能修改吗？

当然可以，这里可使用交互式rebase, 参数：-i

Copy
git rebase -i HEAD^^

这里的^^意思是后退几个commit，数量为^的数量，也可以写成~2, 数字代表后退的数量。

回车之后，我们发现进入到了一个可编辑的页面，值得注意的是，上面的commit排序是倒叙的，我们可以看到每个commit前面有一个pick，我们按i进入编辑，把想要重新修改的 commit 前面的pick改成edit, 退出界面之后我们可以看到状态就是在当前的commit上了，修改完成之后时候使用--amend提交，成功之后我们可以通过git rebase --continue来跳过不需要修改的commit，整个过程就结束了。

diff：对比

用来对比修改。

Copy
git diff //对比工作区和暂存区
git diff --staged // 对比暂存区和上一次提交
git diff HEAD // 对比工作区和上一次提交

想要暂存工作区？

暂存并清空工作目录。

Copy
git stash

Warning

-git stash并不会暂存你未追踪的文件，假如说你新建了一个文件，你还没有来得及add就stash，这个文件并不会存起来，想要把这些文件一起暂存使用-u。
- 恢复文件请使用git stash pop命令。

想要回滚 commit?

reset可以重置HEAD和branch的位置

Copy
git reset <分支名或SHA-1>

--mixed 默认，把工作区和暂存区全部保存为工作区

--hard：不保留工作区，你的工作区会被清空！！

--soft：保留工作区和暂存区