Git 将 Master 拉入分支
- 将主分支拉入另一个分支
-
使用
git merge
命令将更改从主
分支拉到其他分支 -
使用
git rebase
命令将更改从主
分支拉到其他分支 - 使用“git pull”命令将“master”的更改合并到另一个分支中
- 结论
在使用Git工具开发软件时,可以为不同的功能创建不同的分支。当对主分支进行更改时,这些更改不会自动添加到其他分支中。
本文将介绍如何将主分支中的所有更改拉到Git中的另一个分支中。
将主分支拉入另一个分支
在使用Git工具时,您可能需要将您在主分支中所做的更改拉到不同的分支中。这些更改不会自动传输,因此您需要手动进行。
本文的其余部分将介绍三种不同的方法将更改从“主”分支拉到“开发”分支中。
使用git merge
命令将更改从主
分支拉到其他分支
另一种方法是使用git merge
命令来实现这一目标。
第1步:切换到“主”分支
开始时切换到“主”分支。您可以使用git checkout
命令来完成:
git checkout master
此命令确保您在“主”分支上,该分支是您想要导入特征分支的更改的源。
第2步:拉取最新更改
在合并之前,确保您的本地“主”分支与远程“主”分支保持最新。为此,请使用git pull
命令:
git pull origin master
此命令从远程“主”分支获取最新更改,并将其合并到本地“主”分支。
第3步:切换到您的特征分支
现在,切换回您要拉取更改的特征分支。使用git checkout
命令,将feature-branch
替换为您的实际特征分支的名称:
git checkout feature-branch
第4步:将主
分支合并到您的特征分支
使用您的特征分支检出,可以使用git merge
命令将来自主
分支的更改合并到其中:
git merge master
研究git merge
git merge
命令用于将一个分支的更改合并到另一个分支中。在本例中,我们将主
分支的更改合并到您的特征分支中。
如果两个分支自它们分离后都有新的更改,Git将自动创建一个新的合并提交。如果没有冲突的更改,合并将很简单。
第5步:解决冲突(如有)
如果Git在合并过程中遇到冲突,它将暂停并指示哪些文件有冲突。您需要打开这些文件,找到冲突标记,并决定如何解决它们。解决冲突后,请保存文件。
在解决文件中的冲突后,使用git add
命令将其标记为已解决:
git add <conflicted-file>
对每个有冲突的文件重复此过程。
第6步:提交合并
一旦您解决了所有冲突并将文件标记为已解决,使用具有有意义的提交消息提交合并:
git commit -m "Merge branch 'master' into feature-branch"
此提交消息描述了合并操作,以供以后参考。
第7步:推送已更新的特征分支
现在,您已成功将主
分支的更改合并到特征分支中,请将更新后的特征分支推送到远程存储库:
git push origin feature-branch
使用git rebase
命令将更改从主
分支拉到其他分支
另一种方法是使用git rebase
命令实现此目标。我们将指引您使用git rebase
将更改从主
分支拉到另一个分支。
第1步:切换到“主”分支
开始时切换到“主”分支。您可以使用git checkout
命令来完成:
git checkout master
此命令确保您在“主”分支上,该分支是您想要合并到特征分支的更改的源。
第2步:拉取最新更改
在变基之前,确保您的本地“主”分支与远程“主”分支保持最新。为此,请使用git pull
命令:
git pull origin master
此命令从远程“主”分支获取最新更改,并将其合并到本地“主”分支。
第3步:切换到您的特征分支
现在,切换回您要拉取更改的特征分支。使用git checkout
命令,将dev
替换为您的实际特征分支的名称:
git checkout dev
第4步:在主
上变基dev
在检出您的特性分支后,您现在可以将其变基到更新的“master”分支上。使用“git rebase”命令,后跟您要变基到的分支的名称,在本例中是“master”:
git rebase master
Git将自动将您的特性分支的提交应用于“master”分支之上。在此过程中,如果您的更改与“master”中的更改之间存在冲突,Git将暂停变基并要求您手动解决这些冲突。
“git rebase”命令是重写提交历史的强大工具。
在此背景下运行“git rebase master”时,Git会获取您的特性分支的整个提交历史(从它与“master”分支分岔的位置开始),并在当前的“master”分支之上重放每个提交。
这实际上将您的特性分支移动到“master”的顶端,就像您是从当前的“master”分支状态创建它一样。
使用“git rebase”相对于“git merge”的优势之一是它会产生一个线性的提交历史,使得理解和导航更加容易。
然而,由于它会重写提交历史,因此必须谨慎使用,特别是在协作环境中。
步骤5:解决冲突(如果有冲突)
如果Git在变基过程中遇到冲突,它将暂停并显示哪些文件存在冲突。您需要打开这些文件,定位冲突标记,并决定如何解决它们。解决完冲突后,请保存文件。
在解决完一个文件的所有冲突后,使用“git add”命令将其标记为已解决:
git add <conflicted-file>
对于每个存在冲突的文件,重复此过程。
步骤6:继续变基
在解决完所有冲突并将文件标记为已解决后,您可以使用以下命令继续进行变基:
git rebase --continue
Git将在“master”分支之上应用您特性分支的剩余提交。
步骤7:推送更新的特性分支
现在,您已成功将特性分支变基到“master”上,可以将更新的特性分支推送到远程仓库:
git push origin dev
使用“git pull”命令将“master”的更改合并到另一个分支中
让我们逐步介绍使用“git pull”从“main”分支中更新工作分支的步骤。
步骤1:切换到您的工作分支
首先,切换到您想要使用“main”中的更改更新的分支。您可以使用“git checkout”命令执行此操作。将“feature-branch”替换为您的工作分支的名称:
git checkout feature-branch
此命令确保您处于您想要更新的分支上。
步骤2:从“main”拉取更改
现在,您已经在您的工作分支上,可以使用“git pull”命令从“main”分支获取并合并最新的更改。
“git pull”命令是两个Git命令的组合:“git fetch”和“git merge”。它从远程存储库检索更改并将其集成到当前分支中。
git pull origin main --allow-unrelated-histories
这个命令的每个部分的作用如下:
git pull
:启动拉取过程。origin
:远程存储库的默认名称。如果您使用不同的远程存储库,请用其名称替换“origin”。main
:您想要拉取更改的分支。如果需要,可以指定其他分支名称。--allow-unrelated-histories
:此选项允许Git合并无关的历史记录,当您合并拥有不同提交历史的分支时,这将非常有用。
理解“–allow-unrelated-histories”
在从一个提交历史与当前分支不共享公共祖先的分支中拉取更改时,“–allow-unrelated-histories”选项是必要的。
当您将独立创建的分支或与当前分支没有共同祖先的分支的更改合并或拉取到一起时,这种情况可能会发生。
通过使用“–allow-unrelated-histories”,您告诉Git即使提交历史记录没有明确定义的共同起点,也要继续进行合并。这是将不相关的分支集成到单个分支的一种方式。
步骤3:解决冲突(如果有冲突)
在合并过程中,如果您的工作分支和“main”分支中的更改重叠或冲突,Git可能会检测到冲突。当发生冲突时,Git将暂停并指示哪些文件存在冲突。
为了解决冲突,打开代码编辑器中的冲突文件。在这些文件中,你会看到使用冲突标记分隔的部分,如<<<<<<<
,=======
,和>>>>>>>
。手动编辑文件以选择保留哪些更改和丢弃哪些更改。
解决文件中的冲突后,保存更改。
步骤四:标记冲突为已解决
解决文件中的冲突后,需要使用git add
命令将其标记为已解决。将<conflicted-file>
替换为实际文件名:
git add <conflicted-file>
对每个有冲突的文件重复此过程。
步骤五:提交合并
解决冲突并标记文件为已解决后,需要提交合并并附上有意义的提交信息:
git commit -m "Merge changes from main into feature-branch"
该提交消息应描述合并的目的,供以后参考。
步骤六:推送更新的分支
最后,将在工作分支上进行的更改推送到远程仓库:
git push origin feature-branch
该命令确保将更改保存在远程仓库中,使其对项目上的其他团队成员可见,如果你正在进行项目的协作。
结论
在软件开发中,为不同的功能或错误修复维护不同的分支是一种常见做法。然而,保持这些分支与main
分支的最新更改同步是十分重要的,以确保后续的集成过程顺利进行。
本文我们探讨了三种将main
分支的更改拉取到其他分支的不同方法:使用git merge
,git rebase
和git pull
。每种方法都有其优势和用例。
Yahya Irmak has experience in full stack technologies such as Java, Spring Boot, JavaScript, CSS, HTML.
LinkedIn