git add 和 git stage 有什么区别:
- 工作区(Working Directory)、暂存区(Stage)和历史记录区(History)以及转换关系不能少;
- git stage 是 git add 的同义指令;
git reset、git revert 和 git checkout 有什么区别:
首先,从 commit 层面来说:
git reset 可以将一个分支的末端指向之前的一个 commit。然后再下次 git 执行垃圾回收的时候,会把这个 commit 之后的 commit 都扔掉。git reset 还支持三种标记,用来标记 reset 指令影响的范围
git checkout 可以将 HEAD 移到一个新的分支,并更新工作目录。因为可能会覆盖本地的修改,所以执行这个指令之前,你需要 stash 或者 commit 暂存区和工作区的更改。
git revert 和 git reset 的目的是一样的,但是做法不同,它会以创建新的 commit 的方式来撤销 commit,这样能保留之前的 commit 历史,比较安全。另外,同样因为可能会覆盖本地的修改,所以执行这个指令之前,你需要 stash 或者 commit 暂存区 和工作区的更改。
然后从文件层面来说:
git reset 后面接commit id 意思是将从这个commit id之后的一个位置开始,将所有的commit提交记录返回到工作区。如果追加--soft选项,则返回到暂存区。
git checkout 是切换到另外一个分支。是把文件从历史记录拿到工作区,不影响暂存区的内容。
git revert不支持文件层面的操作。
解释下 PR 和 MR 的区别:
PR 和 MR 的全称分别是 pull request 和 merge request。解释它们两者的区别之前,我们需要先了解一下 Code Review,因为 PR 和 MR 的引入正是为了进行 Code Review。