# Git高级命令

By [CoderZJ](https://paragraph.com/@coderzj) · 2021-11-17

---

① git rebase :在新位置重新提交,改变 commit 序列的基础点。 把 merge 换成 rebase，操作步骤：

> 第一步： git checkout branch1 git rebase master 第二步： git checkout master git merge branch1

解释一下：第一步切换到branch分支上，执行rebase，目的是将分支的起点移动到想要合并的分支的HEAD上，第二步是切换到主分支，并移到最新的提交（commit）。为避免和远端仓库发生冲突，一般不要从 master 向其他 branch 执行 rebase 操作。

* * *

② git --amend 修复当前提交的错误 注意：并不是在原来那个commit 上修改，而是生成了一个新的提交。

* * *

③ 场景：想修改完善之前的提交（commit）

1.  git rebase -i 目标commit : 发出想要修改的请求，会弹出git编辑界面，将想要修改的commit 对应的 pick修改为edit（应用这个 commit，然后停下来等待继续修正）,然后rebase 过程已经停在修改的 commit 的位置。 2.在该commit上进行修改，commit --amend 来把修正应用到当前最新的 commit； 3.操作完成之后用 git rebase --continue 来继续 rebase 过程。将修改的commit 后面的提交应用到该rebase上。
    

* * *

④ 抛弃原来的提交（回滚） git reset --hard HEAD^ git reset --hard 目标commit

> HEAD 表示 HEAD^ 往回数一个位置的 commit

* * *

⑤撤销过往的提交 两种方式：

1.  git rebase -i 在编辑界面中删除想撤销的 commits
    
2.  git rebase --onto 在 rebase 命令中直接剔除想撤销的 commits
    

> \--onto 后面有三个参数：目标 commit、起点 commit（注意：rebase 的时候会把起点排除在外）、终点 commit。

* * *

⑥ reset --hard：重置位置的同时，清空工作目录的所有改动； --soft：重置位置的同时，保留工作目录和暂存区的内容，并把重置 HEAD 的位置所导致的新的文件差异放进暂存区。 --mixed（默认）：重置位置的同时，保留工作目录的内容，并清空暂存区。

---

*Originally published on [CoderZJ](https://paragraph.com/@coderzj/git)*
