>  기사  >  개발 도구  >  브랜치 코드를 Git과 병합하는 방법

브랜치 코드를 Git과 병합하는 방법

青灯夜游
青灯夜游원래의
2023-01-04 11:24:4810286검색

git合并分支代码的方法:1、使用“git merge”命令,该命令用来做分支合并,可以将其他分支中的内容合并到当前分支中。2、使用“git rebase”命令,该命令用于改变当前的分支的基点,进而实现分支合并。

브랜치 코드를 Git과 병합하는 방법

本教程操作环境:Windows7系统、Git2.30.0版、Dell G3电脑。

在项目中,我们总会创建很多分支进行不同功能或者需求的开发,等功能完成后再合并回主分支。那么如何才能优雅的合并分支呢?如果此时你提起了兴趣,那么不妨继续读下去了。

建立多人开发场景

1. 创建仓库

// 初始化仓库
git init
// 创建a.txt
touch a.txt
// 创建b.txt
touch b.txt
// 加入暂存区
git add .
// 提交
git  commit -m 'initial'

브랜치 코드를 Git과 병합하는 방법

2. 创建 feature 分支

git checkout -b feature

브랜치 코드를 Git과 병합하는 방법

3. 两个分支同时开发

feature 分支开发下一版本新功能,提交了两次,分别修改 a.txt 文件和 b.txt 文件。

브랜치 코드를 Git과 병합하는 방법

master 分支开发本次版本功能,同样提交了两次,且修改了 a.txt 文件和 b.txt 文件。


브랜치 코드를 Git과 병합하는 방법

当前分支情况如下图,各节点上面的字符是每次 commit 的散列值,当前 master 分支的 header 在 c5 节点上,feature 分支的 header 在 c3 节点上。
브랜치 코드를 Git과 병합하는 방법

这个时候需要将 feature 分支合并回 master 分支,有两种方案:

  • 在 master 分支上直接 merge feature 分支;

  • 是先在 feature 分支上 rebase(变基),然后在 master 分支上 merge feature 分支。

下面分别说明一下这两种方案:

合并命令1:git merge

git merge 用来做分支合并,将其他分支中的内容合并到当前分支中。

git merge 操作比较暴力,也是用的比较多的方式,下面演示的是 feature 分支合并至 master 分支,具体过程如下:

  • 找到 feature 分支和 master 分支的最近共同祖先 commit 节点 c1;

  • 把 feature 分支的最新一次 commit 节点 c3 和 master 分支上的最新一次 commit 节点 c5 合并,此时若有冲突,则一次性解决所有冲突,然后生成一个新的 commit 节点 c6;

  • 同时根据两个分支上的 commit 时间的先后顺序,依次放到 master 分支上,使用git log可以看到时间顺序。

上面流程的结果示意图如下所示:

브랜치 코드를 Git과 병합하는 방법

在项目中的操作命令如下。可以看到执行 git merge feature 命令后,存在冲突,进入 merging 工作区,然后一次性解决所有冲突后,提交一个新的 commit。

브랜치 코드를 Git과 병합하는 방법

执行 gitk 命令行,可以在界面上看到当前分支如下图所示。有一个新的 commit。
브랜치 코드를 Git과 병합하는 방법

合并命令2:git rebase

这个命令从名字上就可以直观看出它的功能:改变当前的分支的基点。对于 feature 分支,它是从 master 分支的 c1 节点创建的分支,所以它的基点就是 c1。如果在 feature 分支上执行 git rebase master ,其过程大致如下:

  • 현재 마스터 브랜치의 최신 커밋 노드 c5를 찾아 기능 브랜치의 기준점을 c5 노드로 변경합니다. ;

  • 기능 브랜치와 마스터 브랜치 사이에 충돌이 발생할 경우 기능 브랜치 제출 시간을 기준으로 순차적으로 충돌이 해결되며 기능 브랜치 커밋의 해시 값이 수정됩니다.

  • 드디어 브랜치에서 보면 직선이 나오는데 히스토리 커밋을 덮어쓰는 문제가 있습니다.

위 과정의 결과는 아래와 같습니다. 여기서 c2'와 c3'은 해시 값이 변경되었음을 나타냅니다.

브랜치 코드를 Git과 병합하는 방법

주의할 점:

  • 리베이스 작업을 수행할 때 마스터 브랜치가 최신 상태인지 확인해야 합니다. 그렇지 않으면 병합 병합 중에 충돌이 발생할 수 있으며 리베이스 사용의 의미 손실됩니다.

  • 리모컨으로 푸시된 콘텐츠를 리베이스하지 마세요. 누군가가 원격 코드를 가져온 다음 이를 변경하여 제출하면 브랜치가 매우 번거로워질 것입니다.

기본 프로세스를 이해한 후 rebase 명령을 사용하여 브랜치 병합을 시작할 수 있습니다.

  • 아래와 같이 프로젝트에서 git rebase master를 실행합니다. 두 제출 모두에 충돌이 있으므로 이러한 충돌은 리베이스 작업공간에서 순차적으로 해결되어야 합니다.

브랜치 코드를 Git과 병합하는 방법

인터페이스에서 볼 수 있는 기능 브랜치에서 gitk 명령을 실행합니다.
브랜치 코드를 Git과 병합하는 방법

  • 기능 브랜치가 리베이스된 후 마스터 브랜치로 다시 전환하고 git merge 기능을 실행하여 완료합니다. 병합 작업.

브랜치 코드를 Git과 병합하는 방법

마스터 브랜치에서 gitk를 실행하면 브랜치 구조는 다음과 같습니다. 나뭇가지가 선을 그리며 매우 상쾌해 보이는 것을 볼 수 있습니다.

브랜치 코드를 Git과 병합하는 방법

지침: git stash

때때로 브랜치의 코드가 아직 개발되지 않아 브랜치를 병합해야 하는 경우가 있습니다.

1. 작업 공간의 내용을 저장한 다음 선택합니다. 위의 두 가지 분기 병합 방법은 분기 병합을 수행합니다.

브랜치 코드를 Git과 병합하는 방법

2. 브랜치 병합을 완료한 후 개발 브랜치로 다시 전환하고 git stash pop을 실행하여 작업 공간 콘텐츠를 팝업하면 계속해서 즐겁게 코드를 작성할 수 있습니다.

브랜치 코드를 Git과 병합하는 방법

요약

Git merge는 상대적으로 투박하며 대부분의 사람들이 선택하는 방법입니다. 이 방법을 사용하면 각 커밋을 시간순으로 정렬할 수 있지만 브랜치 다이어그램이 매우 지저분해지게 됩니다. 한 번은 의미가 없습니다.

Git rebase는 기록 커밋 기록에 있는 한 줄로 매우 우아하지만 기록 커밋을 수정할 위험이 있고, git log로 로그를 보면 커밋 타임라인이 엉망이 됩니다. 동시에 원격으로 푸시된 콘텐츠를 리베이스하지 마세요. 그렇지 않으면 브랜치가 지저분해질 것입니다.

개인적으로는 rebase 방식을 사용하는 경향이 있는데 결국 커밋의 인지비용이 있고 편해보이네요. 하지만 개발자가 많으면 병합하는 것이 좋습니다. 충돌을 하나씩 해결하면 모두가 지루해집니다. 하하하

프로젝트에서는 항상 다양한 브랜치를 만들어 서로 다른 개발을 하게 됩니다. 기능이나 요구 사항 등. 기능이 완료된 후 이를 다시 메인 브랜치에 병합합니다. 그렇다면 어떻게 가지를 우아하게 병합할 수 있을까요? 이 시점에서 관심이 있다면 계속 읽어도 좋습니다.

위 내용은 브랜치 코드를 Git과 병합하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.