sourcetip

현재 분기를 다른 분기로 병합하는 방법

fileupload 2023. 7. 7. 21:00
반응형

현재 분기를 다른 분기로 병합하는 방법

저는 마스터와 개발이라는 두 개의 지점을 가지고 있습니다.저는 항상 개발 작업을 하고 있으며, 생산용으로 승인된 후에만 마스터 브랜치에 코드를 확인합니다.그러면 다음 작업을 수행해야 합니다.

git checkout master
git merge dev
git checkout dev

너무 장황하고 자주 하니까 좀 줄이고 싶어요.마스터 브랜치를 먼저 확인하지 않고 현재 브랜치 개발에서 다른 브랜치 마스터로 병합하는 데 사용할 수 있는 git 명령이 있습니까?다음과 같은 것일 수 있습니다.

git merge dev to master

정말 멋질 것 같습니다.저는 Git 문서를 살펴보았지만 아무것도 보지 못했습니다.

로컬 리포지토리의 원격 별칭을 추가합니다(예:

git remote add self file:///path/to/your/repository

(또는 창에서)git remote add self C:\path\to\your\repository)

자체 원격으로 푸시, 예:

git push self dev:master

@zeroome이 현재 가장 많이 투표한 답변은 좋은 답변이지만 불필요하게 장황합니다.

Gitrepo의 기반에서 다음을 수행할 수 있습니다.git push . dev:master

트리의 모든 곳에서 작동하는 보다 일반화된 솔루션은 다음과 같습니다.

git push $(git rev-parse --show-toplevel) dev:master

글로벌 gitconfig에 있는 별칭을 사용하는 것이 가장 좋습니다.~/.gitconfig):

[alias]
    merge-to = "!f() { git checkout $1 && git merge $2 && git checkout -; }; f"

모든 저장소에서 다음과 같이 호출할 수 있습니다.

git merge-to master dev

현재 브랜치를 입력할 필요가 없는 Jefromi 별칭에서 약간 수정되었습니다.

다음과 같이 사용합니다.git merge-to dev.

그러면 다음으로 전환됩니다.dev분기를 CURRENT와 병합한 다음 다시 전환합니다.

예를 들어, 사용 중이라고 가정할 수 있습니다.master브랜치, 그것은 마스터를 개발에 병합할 것이고 당신은 여전히 마스터에 있을 것입니다.

그것은 확실히 내 도트 파일로 갑니다 :)

[alias]
  merge-to = "!gitmergeto() { export tmp_branch=`git branch | grep '* ' | tr -d '* '` && git checkout $1 && git merge $tmp_branch && git checkout $tmp_branch; unset tmp_branch; }; gitmergeto"

이건 오래된 일이지만...

위의 @kevin-lyda와 @dmytrii-nagirniak의 솔루션을 결합합니다.이 별칭은 현재 분기를 지정된 분기로 병합합니다.와 함께 원격 메서드를 사용하고 git 명령을 사용하여 컨텍스트를 가져옵니다.

[alias]
    merge-to = "!gitmergeto() { git push \"`git rev-parse --show-toplevel`\" `git rev-parse --abbrev-ref HEAD`:$1; } && gitmergeto"

다음과 같이 사용:

git merge-to other-branch-name

다른 분기를 체크아웃하지 않고 현재 분기를 다른 분기로 병합하려면:

빨리 감기 병합

이것은 정말 쉽습니다.정의에 따라 빨리 감기 병합은 단순히 분기 포인터가 커밋 트리에서 앞으로 이동하는 것을 의미합니다.따라서 다음과 같이 시뮬레이션하기만 하면 됩니다.

git branch -f master dev

주의사항:이는 다음과 같이 가정합니다.master같은 위치에 있는 커밋에 대한 포인트dev지점 또는 다른 지점.그렇게 하지 않으면, 당신은 일을 잃을 위험이 있습니다!와는 달리git merge이 메서드는 빠른 전달이 불가능할 때 병합 커밋을 만듭니다(또는 불만 사항). 이 메서드는 분기 포인터가 다른 커밋을 가리키도록 자동으로 강제합니다.

이는 또한 사용자가 레포 작업을 수행하는 유일한 사람이거나 사용자가 무엇을 하고 있는지 알고 있다고 가정합니다.

팁: 다음을 수행한 경우git fetch그리고 당신은 새로운 커밋이 있습니다.origin/master 있니다습동을 수.master다음을 사용하여 체크아웃하지 않고 분기:

git branch -f master origin/master

병합 커밋을 통해 병합

이것이 항상 가능한 것은 아닙니다.병합 커밋을 만들려면 병합 작업을 수행해야 합니다.병합 작업을 수행하려면 현재 분기에 없는 다른 분기에 커밋이 있어야 합니다.

에 이 있는 .master없는 지점dev지점, 다음과 같은 작업을 수행할 수 있습니다.

고지 사항:이는 단순히 개념 증명일 뿐이며, 체크아웃하지 않고 다른 분기로 병합할 수 있다는 것을 보여주기 위한 것입니다.매일 사용하려면 셸 리디렉션을 사용하여 별칭을 만들거나 셸 스크립트를 만들 수 있습니다.다시 질문에 표시된 짧은 프로세스에 대한 셸 스크립트를 만들 수도 있습니다.

git checkout -b temp
git merge --no-ff -e master
git branch -f master temp
git checkout dev
git branch -D temp

설명:

  1. 현재 분기와 동일한 커밋을 가리키는 임시 분기를 체크아웃합니다.
  2. »master임시 분기로 이동하고 커밋 메시지 편집기를 실행합니다.병합 커밋을 병합한 것처럼 표시하려면dev로분다하로 master다음에서 편집:

    Merge branch 'master' into temp
    

    대상:

    Merge branch 'dev'
    

    팁: 사용할 수 있습니다.-m "Merge branch 'dev'"-e좀 더 빨리.

  3. master병합 커밋을 가리키는 분기 포인터입니다.
  4. 다음을 확인하십시오.dev분점.
  5. 임시 분기를 강제로 삭제합니다.

이것은 여전히 작업 트리에 닿지만 최소한 그렇습니다.의 상태로 되돌리지 않습니다.master단지 개발 변화를 다시 한 번 가져오기 위해서입니다.어떤 사람들은 신경 쓰지 않을 수도 있지만, 다른 사람들에게는 그것이 중요할 수도 있습니다.

현재 분기를 병합하려는 분기에서 오는 경우가 많습니다.이 경우 다음을 수행할 수 있습니다.

git co - && git merge @{-1}

예:

git checkout somebranch      // (while on master)

// add some commits

git co - && git merge @{-1}  // will merge somebranch into master

제 솔루션은 다른 답변과 비슷하지만 다음과 같은 차이점이 있습니다.

  • 가독성을 위해 기능이 여러 줄로 나뉩니다.
  • 는 함수호출라고 .set -ex 각 됩니다.
  • 는 첫 branch)를를 별은첫대번(target branch)로 합니다.git merge
  • 에는 null 명령어 " null"이 포함되어 .: git merge탭 전환이 일부 셸 설정(예: oh-my-zsh)에서 작동하는지 확인합니다.
[alias]
  merge-to = "!f() { : git merge ; \
      set -ex ; \
      local this=$(git rev-parse --abbrev-ref HEAD) ; \
      local target=$1 ; \
      shift ; \
      git checkout $target ; \
      git merge $this \"$@\" ; \
      git checkout $this ; \
    } ; f"

언급URL : https://stackoverflow.com/questions/3672073/how-to-merge-the-current-branch-into-another-branch

반응형