git总结

167 阅读2分钟

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的时候只是操作了暂存区,不影响工作区的