git_cmd
git 常用命令
修改最近提交的信息
1 | git commit --amend |
撤销当前提交但保留改动
1 | git reset --soft HEAD~1 |
撤销并移除暂存区的修改
1 | git reset --mixed HEAD~1 |
撤销并丢弃所有改动
1 | git reset --hard HEAD~1 |
merge vs rebase vs cherry-pick
Git merge
将两个分支合并到一起,并生成一个新的commit记录,新生成的commit节点会有两个父节点。
在 master 分支上,使用 git merge bugFix 将 bugFix 分支合并到 master 分支。
冲突
merge 解决冲突时内容是基于两个分支的所有的 commit.
Git rebase
rebase也可以合并分支,会取出一系列的commit记录,然后在目标分支逐个放下去,rebase可以保持线性的提交历史,使历史更加清晰。
在bugfix上,使用git rebase master分支,会将bugfix分支上的commit记录复制到master分支,并保证提交历史是线性的。
rebase除了在合并时使用,还可以用来整理commit记录。
冲突
正如它的中文名字“变基操作”一样,会将所在分支新添加的内容,增加到目的分支,并保证了 commit 提交记录的串行性。简单来说就是,会以目的分支(一般是 master)为基础,逐一的将当前分支的 commit 记录应用。需要注意的是,在应用时并不是直接应用在 master 分支,而是将 master 分支整体拷贝,然后将当前 commit 应用在拷贝后的分支上。
cherry-pick
cherry pick 是将一些commit复制到当前分支的HEAD上,和rebase相比,更加灵活,可以随意的选择commit进行复制。
通过 git cherry-pick c3 c4 c7 将其他分支上的 3 个 commit 复制到当前的 master.
冲突
rebase 操作正好相反,会以当前的分支为基础,然后将 commit 一个个的拿过来应用。形成的 commit 记录也是串行的。