记录 Git 的使用心得。
Git 基本模型
Git 主要分为三大区域:工作区(workspace)、暂存区(index)、仓库区(repository)。
工作区是我们工作的地方,我们的代码和文档等在这里编写。
暂存区是存储了被 git 记录的修改,我们通常使用 git add <filename> 来将修改提交到暂存区。
仓库区存储着已经被提交的修改,当使用 git commit 的时候,暂存区的修改会被应用并且被记录为一个提交。
在这三个区域之外还有一个临时存储区(stash),我们通常使用 git stash 来将工作区和暂存区中的所有修改都转移到临时存储区。
在 stash 后,我们的工作区和暂存区是干净的,可以安全地切换、合并分支,或者拉取更新。
Git rebase 实例
Git rebase 的目的是形成一个线性、清晰的提交,而 git merge 是保留完整分支信息的选择。
为了充分理解 git rebase,我们可以考虑以下场景:
远程仓库有提交 A。X1 拉取了 A,并修改得到 B;X2 拉取了 A,修改得到 C,并提交到远程仓库。
此时 X1 想要将 B 提交到远程仓库,就需要先处理远程仓库的 C 提交。
如果此时 X1 还没有将 B 提交到仓库区,他可以:
git stash
git pull origin main
git stash pop
处理冲突后提交
X1 将本地分支回退到 A,然后拉取 C,本质上是将修改应用在 C 上。这和 git rebase 的思想类似,即寻找和目标分支的共同祖先,将祖先后的所有修改暂存起来;然后将暂存的内容在选定的基点上,这样就可以得到一份线性、清晰的提交记录。
如果先提交修改再 git merge,那么提交记录就会完整地记录下分支情况。我个人不太喜欢 merge 提交,所以更多地还是使用 rebase。