2013-05-02 2 views
12

나는 한 번 보았습니다 When do you use git rebase instead of git merge? 그러나이 경우 어떤 해결책을 선택해야하는지 알고 싶습니다. 그래서 나는 새로운 것에 분기하여 새로운 기능을 구현하려고합니다. 기능 지점. 다른 사람이 Master에서 다른 커밋을하는 동안 Feature에서 10 개의 커밋을 수행합니다.힘내 - 합병 대 리베이스

제 질문은 테스트 목적으로 내 지사를 마스터와 분리하고 싶지만 통합 된 새로운 마스터 커밋으로 테스트해야한다는 것입니다. 그렇다면 Master를 Feature로 병합해야합니까? (테스트 전에 마스터에 수정 사항을 적용 할 Master의 기능이 아님) rebase를 수행해야합니까?

+0

그건 논쟁의 여지가 있습니다. 나는 rebase를 할 것이다. – 1615903

+0

귀하가 본 링크의 맨 위 대답은 귀하의 유스 케이스에서 리베이스하기위한 명확한 권장 사항을 제공합니다. – mah

+0

앞으로 해결해야 할 문제를보다 명확하게 설명하는 설명이 포함 된 제목을 사용하십시오. –

답변

5

왜 병합 된 버전을 테스트 할 새 분기를 만들지 않습니까? 예를 들어 :

git checkout -b test-merged-feature master 
git merge my-feature 
[... do your testing ..] 

여기 REBASE을 할 특히 이유가 없다,하지만 당신은 이미 기능 분기를 밀어하지 않은 경우, 그뿐만 아니라 잘 될 것입니다. 이 질문은 부분적으로 당신의 역사가 어떻게 보이길 바라는 지에 대한 부분입니다. 어떤 사람들은 많은 병합을보기를 좋아하지 않습니다. 일부는 커밋이 특정 기능에 기여했는지 추적하는 방법으로 선호합니다.

+0

기능을 함께 테스트하기 위해 "dev"브랜치를 가지고 있고, 이것을 제작을 위해 마스터에 두는 것이 좋을 것 같습니까? 그래서 merge vs rebase 질문은 단순히 커밋 내역을 어떻게 원하는지에 관한 것입니다. – user2316341

+0

이 옵션 (새 분기 병합)에 동의합니다. +1합니다. 그러나 나는 여전히 내 답변에 rebase에 대한 옹호 아래. – VonC

+0

@ user2316341 "dev"브랜치는 여러 기능 브랜치를 통합 (병합)해야만 모든 기능이 함께 작동하는지 확인할 수 있습니다. 그러나 한 번에 Feature 브랜치 하나만 ​​있다면 ...그것은 약간의 이득을 위해 복잡성을 추가합니다. – VonC

5

브랜치를 이미 푸시하고 (다른 사람이 내 리포를 복제 한 것을 알고있는 경우가 아니라면) 내 대답은 "git rebase vs git merge"으로 언급했듯이 나는 여전히 리베이스를 수행합니다.

테스트를하든 안하든, 최종 병합 (Feature ~ master)이 빨리 감기되는 것을 보장하기 위해 로컬 레포 (git fetch)를 업데이트 할 때마다 일반적으로 rebase를 수행합니다.

역사가 어떻게 보이는지에 관한 것만은 아니지만 주로 개발중인 내용이 이전 버전 인 master을 기반으로하지 않는지 확인하고 시간 경과에 따라 master에서 수행 된 최신 발전에 맞서 작업합니다 . 내가 잘 알고있어 워크 플로우에서

+0

그래서 당신은 내가 항상 rebase를해야한다고 말하지만, 이미 내 지류를 밀어 넣었다면 아닙니다. 왜 그런가요? 이미 지회를 밀어 붙인 문제는 무엇입니까? – user2316341

+0

@user2316341 rebase가 SHA1의 기록을 다시 작성합니다. 이 경우 rebase에 의해 생성 된 새로운 명령에 의해 이미 푸시 된 히스토리를 바꾸려면'git push --force'를해야합니다. 아무도 지사를 사용하지 않는다면 큰 문제는 아니며 리베이스는 중간 분기에 인위적으로 병합을 추가하는 것보다 훨씬 간단하고 안전한 솔루션입니다. – VonC

+0

@ user2316341 문제의 예로 http://stackoverflow.com/a/8940299/6309를 참조하십시오. – VonC

5

, 나는이 '파생'지점으로 rebaseing 된

이 트렁크, 그리고 통합 지점 (들) 및 기능 분기합니다. (미분 분기에 의해, 나는 트렁크로부터 멀어지는 방향을 의미한다), 그리고 통합 브랜치쪽으로 병합된다.

저는 항상 지점과 같은 역사를 가지고있는 지점에서 일하고 싶습니다. 병합이 빠른 속도로 진행되는 것을 좋아합니다. 따라서 방금 병합 한 내용이 방금 테스트 한 것과 정확히 같습니다.

0

2 명의 개발자가 동일한 repo를 실행하면 (충돌이 발생 함) 병합 커밋을 생성하여 2 가지 커밋을 병합하거나 다른 커밋의 맨 위에 커밋 (1 대) 중 하나를 리베이스 할 수 있습니다. 병합 커밋을 생성하는 대신 rebase하는 것이 항상 좋습니다.