合并 Git 分支的方法 | HEAD | 学习 Git 分支
使用git merge命令将bugFix分支合并到main分支的流程。
用“bugFix”作为名称创建一个新的分支
git branch bugFix
使用git checkout bugFix命令切换到bugFix分支。
git checkout bugFix
只提交一次
git commit
使用git checkout命令切换到main分支
git checkout main
再次提交
git commit
使用git merge命令将bugFix分支合并到主分支main。
git merge bugFix
使用的詞彙
标题
HEAD(主要分支)是指当前被检出的提交。换句话说,它表示当前正在进行的提交。
HEAD始终指向活动树中最新的提交。许多修改工作树的git命令首先从HEAD开始处理。
通常,HEAD指向一个分支名称(例如,bugFix)。当提交后,bugFix的状态将会变化,并且该变化可以从HEAD中查看到。
HEAD的分离(detached HEAD)是指将HEAD绑定到特定提交而不是分支。要将其绑定到特定提交,需要使用提交的哈希指定。要查看哈希值,可以使用git log命令。
例如,fed2da64c0efc5293610bdd892f82a58e8cbc5d8
有一种简便的方法来指定提交。只需输入足够长的哈希值以确保其唯一性,即可替换上述长字符串为fed2。
对于”相対リファレンス”这个词,有一个可能的中文翻译是”相对参照”。
通过使用相对参照,在容易记忆的位置(如bugFix分支或HEAD)开始,并可以从那个位置指定相对位置。
1. 逐个向上移动(尖号)- 当向参考名称添加尖号后,即向git发送指令以找到指定提交的父提交。
所以,如果你写成 main^,就表示“main的上一个父级”,意思就是这样。
要检出bugFix的父提交
git checkout bugFix^
2. “〜” 演算子用于在提交树中进行多级跳转。在波浪线演算子后面,还可以用一个数字作为选项,表示要向上移动的父提交的数量。
git checkout HEAD~4
强制分支选项
常见的相对引用用法之一是分支移动。您可以使用-f选项将分支直接关联到提交上。如下所示:
git branch -f main HEAD~3
git branch main C6
git checkout HEAD~1
git branch -f bugFix HEAD~1
or
git branch -f bugFix C0
撤销改动 git reset | git Revert
git reset HEAD~1
git reset通过将分支指针向后移动来实现取消更改的功能。可以将其视为覆盖历史记录的操作。
git revert HEAD
为了撤销更改并与他人共享,需要使用git revert。
将代码移动 git cherry-pick
git cherry-pick <Commit1> <Commit2> <...>
git cherry-pick C2 C4
Git 互动变基
在不知道要操纵哪个提交时,可以使用Git的交互式rebase。这是查看想要rebase的一连串提交的最佳方法。
互动式变基仅是将-i选项与变基命令结合使用。
如果启用该选项,git将打开一个界面,显示将被复制到rebase目标下的每个提交。它还会显示这些提交的哈希和消息,方便一目了然地查看rebase的概要。
当打开交互式变基对话框时,您可以从三个操作中选择:
-
- UIウィンドウのなかで順番を調整するだけでコミットの順番を変えられます(こちらのダイアログでは、マウスでドラッグアンドドロップで操作します)。
-
- 特定のコミットを丸ごと除くこともできます。除きたいコミットを指定するにはpickをオフにします。
- 最後に、コミットを組み合わせられます。技術的に制限があり再現できないのでその詳細な説明を省きますが、短く言いますと、複数のコミットを一つにまとめることができる機能です。
git rebase -i HEAD~4
本地堆叠的提交
在实际开发中,通常会遇到这样的情况:”尝试调查错误的原因,但错误的再现性相当低。为了辅助调查,插入了一些调试指令和打印语句。”
这些用于调试的代码已经提交到了用于修复错误的分支上。最终找到了错误的原因并对其进行了修复!太棒了!
只要将bugFix分支合并到main分支就可以了。简单地说,只需将main分支快进(fast-forward)即可。但这样做会导致调试代码混入到main分支中。
这时候,Git的魔法就派上用场了。虽然解决方法有很多种,但最直接的解决方法有两个:
git rebase -i
git cherry-pick
通过具有交互模式(-i选项)的rebase命令,您可以选择保留和丢弃的提交。还可以改变提交的顺序。这个方法在希望将部分更改移动到其他地方时非常方便。
git rebase -i main
git rebase -i main 命令是在Git存储库中使用的命令,用于以交互方式重新构建和编辑特定分支(在此处为main分支)的提交历史记录。该命令用于执行“交互式变基”。
git rebase bugFix main
git rebase bugFix main 是一个在Git仓库中使用的命令,用于将特定分支(在这里是 bugFix 分支)的提交历史重新应用(rebase)到另一个分支(在这里是 main 分支)上。
具体而言,重新应用基于main分支上最新提交的bugFix分支上的提交历史,这意味着将bugFix分支的更改内容与最新的main分支更改集成在一起,保持干净的提交历史。
管理提交
让我们考虑在开发过程中经常发生的情况。假设有两个更改(newImage 和 caption),它们之间存在依赖关系。我们假设这一系列更改都是按顺序进行的。
在这里棘手的是需要对之前的提交进行微小修正的情况。在本次教材中,假设即使是过去的提交,也包含了对newImage分支进行细微修改的设计修正。
我们考虑通过以下步骤克服这种困难情况:
-
- git rebase -iを使って順番を変更する。これで、変更をかけたいコミットを一番先頭に持ってくる。
-
- git commit –amendコマンドで僅かな変更を行う
-
- git rebase -iコマンドを再度使って、先頭に持ってきていたコミットを元に戻す
- 最後に、レベルクリアのためにmainブランチを先頭に持ってくる
git rebase -i HEAD~2
git commit --amend
git rebase -i HEAD~2
git rebase caption main
协调管理提交事项
根据上次的见解,我们使用了rebase -i命令来改变提交顺序。如果在树的顶部有要改变的提交,则可以通过使用–amend选项轻松地修改并恢复到原来的顺序。
git checkout main
git cherry-pick C2
git commit --amend
git cherry-pick C3
Git的标签
git tag v1 side~1
git tag v0 main~2
git checkout v1
Git Describe的中文翻译 :
Git描述
标签在源列表中充当出色的”锚(标记)”,因此Git有一个命令来描述最相关的”锚”(另一种标签名称)。而这个命令被称为git describe!
Git的“描述”功能可以帮助你知道自己在大量提交中的位置,尤其在你需要移动时(比如你运行完一个调试搜索命令如git bisect,或者你的同事从休假回来坐在他的座位上时)。
Git的描述采用以下格式:
git describe <参照>
在<参照>中,包含了Git可以解释的提交的引用表达(例如分支、标签的指定,提交哈希等)。如果没有输入任何内容,Git将使用当前位置的提交(HEAD)。
命令的结果如下所示:
<タグ>_<コミット数>_g<ハッシュ>
练习
git commit
重塑多个分支
出现了许多分支。让我们将所有这些分支都合并到主分支上。
git rebase main bugFix
git rebase bugFix side
git rebase side another
git rebase another main
父母的要求
与修饰子类似,修饰符也可以在后面放置任意的编号。
您可以指定从合并提交中选择哪个父项,而不是指定要回溯的特定数量(这是在某些情况下的功能)。请记住,由于合并提交由多个父项组成,所以选择的路径可能是不明确的。
git branch bugWork main^^2^
git分支:这是一个用于创建、展示和切换分支等操作的命令。
bugWork:这是一个将要创建的分支的名称。意味着将会创建一个名为bugWork的分支。
主要^^2^:这是关于提交指定方法的说明。在这里,我们表示相对于”main”分支的指定提交的位置。
用中文翻译为:主分支的最新提交称为 “main^”。也就是说,它指的是前一个提交。
“main^2” 指的是主分支前一个提交的父提交。也就是说,它指的是前两个提交。
换句话说,它指定了主分支前两个提交的父提交。
因此,git branch bugWork main^^2^ 命令将执行以下操作:
根据主分支的前两个提交 (main^^2^),创建一个新的 bugWork 分支。新分支将包含前两个提交的更改内容。这样,新的 bugWork 分支将被创建,并在该分支上以复制主分支前两个提交的内容的状态开始。通常情况下,这种操作用于在另一个分支上进行错误修复等工作。
分支意大利面
git checkout one
git cherry-pick C4 C3 C2
git checkout two
git cherry-pick C5 C4 C3 C2
git branch -f three C2
git branch:这是一个用于创建、显示和切换分支等操作的命令。
-f: 此选项是“force”的缩写,使用该选项可以将分支强制移动到指定的提交。通常,在移动分支时需要注意不要破坏提交历史,但使用此选项可以强制移动分支。
三: 这是想要移动的分支名称。在这里,我们指定了三分支。
C2:这里是目标提交的哈希值或提交名称。我们在这里指定了一个名为C2的提交。
换句话说,git branch -f three C2命令执行以下操作: