dragonwong / blog

a blog based on github page
dragonwong.github.io/blog/
9 stars 4 forks source link

Git 实用指南 #27

Open dragonwong opened 6 years ago

dragonwong commented 6 years ago

拉取所有 tag

git fetch --all --tags --prune

查看早期历史

git log --reverse

合并远程分支失败

合并远程分支报错:

fatal: refusing to merge unrelated histories

解决:

git pull origin master --allow-unrelated-histories

删除远程分支失败

删除远程分支总提示:

git push origin --delete feature/mockDate

error: unable to delete 'feature/mockDate': remote ref does not exist

其实远程已经删除了,只是本地未更新,更新下:

git fetch -p origin
dragonwong commented 2 years ago

合并

squash

合并提交,主干分支保持线性,开发分支保持独立

git merge --squash <dev_branch>

开发分支合并进主干分支,所有 commit 合并成一个,开发分支完全不变(commit 保留,且不形成往主干分支的合并提交)

rebase

不合并提交,主干分支保持线性,开发分支合并进主干分支并位于主干头部(丢失开发分支创建的节点)

# 将开发分支的提交移动到主干分支之后
git rebase <main_branch>
# 切到主干分支
git checkout <main_branch>
# 将主干分支的指针移动到开发分支最新提交
git rebase <dev_branch>

merge + rebase

类似 merge,但是开发分支只有一次提交,不如直接 git merge --squash?

# 在开发分支上将若干次提交合并(使用 squash 命名合并提交,参考:https://blog.csdn.net/w57685321/article/details/86597808)
git rebase -i <合并开始节点的基准,可以是分支名或commit hash>
# 切到主干分支
git checkout <main_branch>
# 合并开发分支
# git merge <dev_branch>