git pull 和 get fetch
git pull 拉取远程的更改+自动merge
git fetch拉取远程的更改,对当前代码无影响
git rebase 和 git merge
merge和rebase都是用来合并分支的。
区别:
1采用merge和rebase后,git log的区别,merge命令不会保留merge的分支的commit
2处理冲突的方式:
(一股脑)使用
merge命令合并分支,解决完冲突,执行git add .和git commit -m'fix conflict'。这个时候会产生一个commit。
(交互式)使用
rebase命令合并分支,解决完冲突,执行git add .和git rebase --continue,不会产生额外的commit。这样的好处是,‘干净’,分支上不会有无意义的解决分支的commit;坏处,如果合并的分支中存在多个commit,需要重复处理多次冲突。
- 不要在公共分支使用rebase,会让其他人看不到历史
- 本地和远端对应同一条分支,优先使用rebase,而不是merge
为什么不要再公共分支使用rebase?
因为往后放的这些 commit 都是新的,这样其他从这个公共分支拉出去的人,都需要再 rebase,相当于你 rebase 东西进来,就都是新的 commit 了
merge和rebase实际上只是用的场景不一样
比如rebase,你自己开发分支一直在做,然后某一天,你想把主线的修改合到你的分支上,做一次集成,这种情况就用rebase比较好.把你的提交都放在主线修改的头上
同样的,如果你在主分支上用rebase, rebase其他分支的修改,是不是要是别人想看主分支上有什么历史,他看到的就不是完整的历史,这个历史已经被你篡改了
git reset 和 git reset --hard(回退)
git reset 提交了错误的内容后进行回退使用的命令。
git reset 版本号,就是回退到该版本号上。
git reset HEAD就是回退到当前版本。
git reset HEAD^回退到上一版本。
有了参数--hard,直接把工作区的内容也修改了,
不加--hard的时候只是操作了暂存区,不影响工作区的