跳到主要内容

合并分支

使用 merge 进行两个分支的合并。

git merge origin  # {合并到分支}
git merge -s ours origin/{合并到分支} # 使用 ours 策略合并到当前分支
git merge --no-commit origin/{合并到分支} # 不自动提交合并
git merge --squash origin/{合并到分支} # 将多天记录合并为一条

通过 git merge master 命令来合并这些修改,然后再用 rebase 命令理顺其历史纪录。该命令需要一个参数,以说明要将活动分支上的最新修改纳入哪一个分支。

git rebase master

但如果 rebase 命令在执行过程中遇到冲突情况,该命令进程就会被打断,相关文件中也会出现冲突标志。需要先手动或通过合并工具对文件进行清理,并重新将它们添加到暂存区中。然后再执行 rebase 命令加--continue 选项,从该点继续之前的进程。

git rebase --continue

也可以用--abort 选项取消这次的 rebase 命令,或者用--skip 选项跳过引起冲突的提交。这样该次提交就被直接忽略,其中的修改将不会出现在新分支上。

解决冲突

git mergetool 命令用于合并冲突解决工具并解决冲突,通常在合并后使用:

git mergetool

查看冲突版本

git diff

手动解决

在编辑器内进行解决是最好的办法。

取消合并

git reset --merge

或:

git reset --hard HEAD

上述命令将还原到 git merge 之前。

如果想在中止或在它已经结束后放弃:

git reset --hard ORIG_HEAD

git cherry-pick

git cherry-pick 提交命令会将当前分支应用到给定提交的变更,这将创建一个新的提交。

常用于维护分支和的提交移植到开发版本:

git cherry-pick {另一个分支}~{哪次提交}

之前, git cherry-pick 命令一次只能应用于一个提交,而现在可以应用于一个提交范围:

git cherry-pick M..P

git revert

git revert 提交命令跟 git cherry-pick 提交命令大致是相同的,但有一个重要区别:它应用给定提交的逆过程。因此,此命令用于引入一个新提交来抵消给定提交的影响。 跟 git cherry-pick 命令一样, revert 命令不修改版本库的现存历史记录。相反它往历史记录中添加新提交。

git revert {}~{}

强制合并两个不相干的分子

 git merge {branch name} --allow-unrelated-histories

本地丢失提交记录后

不小心丢失历史记录(执行了 rm -rf .git),可通过下面的操作

初始化仓库

初始化本地仓库并建立与远程仓库的链接

git init 
git remote add origin [git@xxx]

拉取远程仓库的最新记录

使用 fetch 拉取远程仓库的最新记录而不是使用 pull 直接合并

git fetch origin main

创建临时分支并保存本地修改

先将本地的修改保存到一个临时的分支上,避免新的修改丢失

git add -A
git commit -m "暂存误删 .git 后的本地修改的"
git branch temp

本地与远程历史对齐

切换到主分支,并将重置为主分支的历史

git checkout main # 切换到 main 分支,如果没有 main 分支,先创建: git checkout -b main
git reset --hard origin/main # 将本地 main 分支与远程分支一致

合并临时分支

使用 merge 将临时分支上的修改合并到当前的分支上:

git merge temp --allow-unrelated-histories