终于学会了merge与rebase的区别

本记录根据git学习网站 learngitbranching 学习

learngitbranching网站良心之作,一步步从简至繁,以闯关的模式一步步帮你掌握git底层原理

Merge

git merge A 把A分支的提交添加到本地

在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个 parent 节点。翻译成自然语言相当于:“我要把这两个 parent 节点本身及它们所有的祖先都包含进来。”
在这里插入

例如在main分支上。执行git merge bugFix
终于学会了merge与rebase的区别_第1张图片
终于学会了merge与rebase的区别_第2张图片
git rebase A 把当前分支的提交添加到A分支上

实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。

例如在bugFix分支上。执行git rebase main
终于学会了merge与rebase的区别_第3张图片
终于学会了merge与rebase的区别_第4张图片

分离HEAD :

HEAD 是当前分支的符号引用,默认指向分支
git checkout C1 把head指向C1提交
git checkout main^ 分离到main分支的上一次提交
git checkout main~3 分离到main分支的前三次提交

将分支指向一个提交

git branch -f main HEAD~1 将main分支的提交指向到当前指向的上一个提交
git branch -f main test~1 将main分支的提交指向到test分支的上一个提交

撤销变更

reset 主要撤销本地变更(未push的变更)

git reset HEAD 撤销当前指向的分支的最新提交
git reset main~2 撤销当前分支的前两次提交 如果改两次提交已经push,则会冲突

revert 撤销远程分支的变更

git revert HEAD~2 git commit 撤销远程分支的前两次,需要再把撤销的内容再次提交

cherry-pick 想要把其他分支的部分提交提交到当前分支
git cherry-pick c1 c2 c3 把某分支的提交c1 c2 c3 添加到当前分支上

交互式rebase

git rebase -i HEAD~4 对近四个提交进行修改

git tag tanName commit

git describe 距离上一个标签的位置 提交信息等

git fetch

实际上将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态。可以理解为下载操作,拉去远程的提交,但工作空间不会变化
1、从远程仓库下载本地仓库中缺失的提交记录
2、更新远程分支指针(如 o/main)

git push:

参数:

git push o/main foo
git push origin foo:main 把foo本地的上一个提交 提交到远程的main分支上

git fetch origin foo:bar 把foo分支的提交更新到bar的远程分支上 o/bar

git fetch origin :bar 新建bar分支,并拉取远程至该分支

git push origin :foo 删除远程的foo分支

git pull:

git pull == git fetch + git merge
git pull --rebase == git fetch + git rebase

git pull origin foo == git fetch origin foo + git merge foo
git pull origin foo:bar == git fetch origin foo:Bar + git merge bar

通关附图 抓紧去挑战把!

终于学会了merge与rebase的区别_第5张图片
终于学会了merge与rebase的区别_第6张图片

你可能感兴趣的:(git)