当前位置:   article > 正文

《Git常用命令》详细讲解·第8篇(git merge和git rebase)_git merge a->b

git merge a->b

Git常用命令》详细讲解·第8篇(git merge和git rebase)

  • 六、合并与衍合
    • git merge
      • 合并指定分支到当前分支
      • `git merge <branch> 工作原理`
        • 确定合并基础
        • 合并更改
        • 处理冲突
        • 创建合并提交
      • `git merge <branch>常用选项`
      • `git merge <branch>示例`
    • git rebase
      • 交互式变基
      • 变基到某个提交
      • 变基到其他分支
  • 老吕想说

《Git常用命令》详细讲解·第8篇(git merge和git rebase)

六、合并与衍合


git merge


合并指定分支到当前分支


git merge <branch>是 Git 中的一个基本命令,用于将指定分支(<branch>)的更改合并到当前所在的分支。下面是关于这个命令的详细解释

git merge <branch>
  • 1

<branch> 是你想要合并的分支的名称。



git merge <branch> 工作原理


确定合并基础

Git 首先会找到两个分支的共同祖先(即最近的共同提交),这是合并操作的基础。

合并更改

Git 会比较共同祖先和要合并的分支的头部提交之间的差异,并将这些更改应用到当前分支。

处理冲突

如果两个分支在共同祖先之后的某个提交中修改了相同文件的相同部分,Git 无法自动决定哪个更改应该保留,这时就会发生冲突。你需要手动编辑冲突文件,解决冲突,并提交结果。

创建合并提交

如果合并过程中没有冲突,或者冲突已经解决,Git 会创建一个新的合并提交,该提交包含两个父提交:一个是当前分支的最新提交,另一个是要合并的分支的最新提交。



git merge <branch>常用选项


–ff-only:仅当快进(fast-forward)合并可行时才进行合并。

–no-ff–no-fast-forward:即使快进合并可行,也创建一个合并提交。这有助于保留分支的历史信息。

–ff-only–no-ff–ff(默认)共同控制了 Git 在合并时是否创建合并提交。

–squash:将指定分支的更改合并到当前分支,但不创建合并提交,而是将更改暂存为一次新的提交。这常用于清理历史记录,将多个提交合并为一个。

–strategy:指定合并策略。例如,git merge -s recursive -X theirs 会使用递归策略合并分支,并在冲突解决时偏好 theirs(即要合并的分支)的版本。

–abort:如果合并过程中遇到冲突,可以使用此选项取消合并操作,回到合并前的状态。



git merge <branch>示例

合并名为 feature 的分支到当前分支:

git merge feature
  • 1

以非快进方式合并名为 feature 的分支到当前分支:

git merge --no-ff feature
  • 1

合并名为 feature 的分支到当前分支,并在冲突时保留当前分支的版本:

git merge -X ours feature
  • 1

合并名为 feature 的分支到当前分支,并创建一个包含所有更改的单一提交:

git merge --squash feature
git commit
  • 1
  • 2

注意事项

  • 在执行合并操作前,最好确保工作目录是干净的,即没有未提交的更改。
  • 合并操作可能会改变项目的历史,因此在公共仓库中执行合并操作前,最好与团队成员进行沟通。
  • 解决合并冲突时,务必仔细检查和测试修改后的代码,以确保功能的正确性。
  • 在合并完成后,使用 git log 命令可以查看合并的历史记录,以确保合并操作正确无误。



git rebase


衍合指定分支到当前分支——git rebase 是 Git 中的一个强大工具,它允许你重新定位、合并或删除一系列提交。git rebase 的主要目的是清理你的提交历史,使其更加整洁和可维护。

交互式变基


git rebase -i 允许你交互式地修改一系列提交。

git rebase -i HEAD~3  # 修改最近的三个提交
  • 1



变基到某个提交


git rebase 可以将一系列提交移到另一个提交之后。

git rebase --onto new-base-commit start-commit end-commit  # 将 start-commit 到 end-commit 之间的提交移到 new-base-commit 之上
  • 1



变基到其他分支


git rebase 可以将一系列提交移到另一个分支的顶端。

git rebase other-branch  # 将当前分支变基到 other-branch
  • 1

注意:git rebase 会重写历史,不适合在共享的分支上使用,可能会造成合作问题。在使用前应确保同步团队成员知识。

实例

假设你有以下提交历史:

A -> B -> C -> D -> E <- master
  • 1

你想要将提交 B 和 C 的顺序颠倒,可以使用交互式变基:

git rebase -i A  # 从提交 A 开始进行交互式变基
  • 1

在文本编辑器中,你可以将想要调整的提交前面的 pick 改为 edit,然后保存退出。Git 会停在你标记为 edit 的提交上,此时你可以执行:

git commit --amend  # 修改提交 B
git rebase --continue  # 继续变基过程
  • 1
  • 2

然后再次执行 git commit --amend 修改提交 C,最后完成变基:

git rebase --continue
  • 1

完成后的提交历史将是:

A -> B' -> C' -> D -> E <- master
  • 1



老吕想说


关于《Git常用命令》详细讲解这篇文章,老吕也没想到,随手写啊写啊,Git命令详细的写一写还真的写了好多内容,直接发布后,发现手机看这文章的时候,居然卡屏了,所以无奈只能把这篇文章的内容分拆成10篇发布出来,以下是全文各篇章的链接:

1. 《Git常用命令》详细讲解·第1篇(git clone和git init)
https://pythonlaolv.blog.csdn.net/article/details/137091558

2. 《Git常用命令》详细讲解·第2篇(git status和git diff)
https://pythonlaolv.blog.csdn.net/article/details/137095087

3. 《Git常用命令》详细讲解·第3篇(git add、git mv和git rm)
https://pythonlaolv.blog.csdn.net/article/details/137095175

4. 《Git常用命令》详细讲解·第4篇(git commit -m “commit message“和git commit --amend)
https://pythonlaolv.blog.csdn.net/article/details/137095289

5. 《Git常用命令》详细讲解·第5篇(git log和git blame)
https://pythonlaolv.blog.csdn.net/article/details/137095352

6. 《Git常用命令》详细讲解·第6篇(git reset --hard HEAD、git checkout HEAD和git revert <commit>)
https://pythonlaolv.blog.csdn.net/article/details/137095501

7. 《Git常用命令》详细讲解·第7篇(git branch、git checkout <branch/tag>和git tag)
https://pythonlaolv.blog.csdn.net/article/details/137095635

8. 《Git常用命令》详细讲解·第8篇(git merge和git rebase)
https://pythonlaolv.blog.csdn.net/article/details/137095700

9. 《Git常用命令》详细讲解·第9篇(git remote -v、git remote show和git remote add)
https://pythonlaolv.blog.csdn.net/article/details/137095791

10. 《Git常用命令》详细讲解·第10篇(git fetch、git pull和git push)
https://pythonlaolv.blog.csdn.net/article/details/137111309




声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/645238
推荐阅读
相关标签