Programing

힘내 빨리 감기 VS 빨리 감기 병합

lottogame 2020. 4. 25. 09:48
반응형

힘내 빨리 감기 VS 빨리 감기 병합


Git 병합을 사용하면 빨리 감기와 빨리 감기 분기 병합을 수행 할 수 없습니다. 빨리 감기 병합을 사용하는 경우와 빨리 감기 병합을 사용하지 않는 경우에 대한 아이디어가 있습니까?


--no-ff기능은 기능 분기에 대한 명확한 개념을 원할 때 유용합니다. 따라서 그 동안 커밋이 수행되지 않은 경우에도 FF가 가능합니다. 때로는 메인 라인의 각 커밋이 하나의 기능에 해당하도록하는 것이 좋습니다. 따라서 커밋이 많은 기능 분기를 단일 단위로 취급하고 단일 단위로 병합합니다. 로 분기 병합 기능을 수행하면 기록에서 분명해집니다 --no-ff.

그런 것에 신경 쓰지 않는다면 가능할 때마다 FF로 도망 갈 수 있습니다. 따라서보다 svn과 같은 워크 플로 느낌을 갖게됩니다.

예를 들어,이 기사 의 저자는 --no-ff옵션이 기본값이어야하며 그의 추론은 위에서 설명한 것과 비슷 하다고 생각합니다 .

"기능"브랜치에 대한 일련의 작은 커밋이 집합 적으로 하나의 새로운 기능을 구성하는 상황을 고려하십시오. "없이"git merge feature_branch "를 수행 --no-ff하면"Git 히스토리에서 커밋 객체 중 어떤 것이 모든 로그 메시지를 수동으로 읽어야하는 기능을 구현 한 경우 전체 기능 (예 : 커밋 그룹)을 되 돌리는 것은 진정한 두통 --no-ff입니다 (사용되지 않은 경우 ). 반면 --no-ff플래그가 사용 된 경우 쉽게 수행됩니다. 한 번의 커밋입니다. "

--no-ff가 기능 분기의 모든 커밋을 마스터 분기의 한 커밋으로 그룹화하는 방법을 보여주는 그래픽


프로젝트에서 흔히 볼 수있는 예를들 수 있습니다.

여기서 옵션 --no-ff(즉, true merge )은 여러 부모와 함께 새로운 커밋을 만들고 더 나은 기록 추적을 제공합니다. 그렇지 않으면 기본적으로 --ff(즉, 빨리 감기 병합 )가 사용됩니다.

$ git checkout master
$ git checkout -b newFeature
$ ...
$ git commit -m 'work from day 1'
$ ...
$ git commit -m 'work from day 2'
$ ...
$ git commit -m 'finish the feature'
$ git checkout master
$ git merge --no-ff newFeature -m 'add new feature'
$ git log
// something like below
commit 'add new feature'         // => commit created at merge with proper message
commit 'finish the feature'
commit 'work from day 2'
commit 'work from day 1'
$ gitk                           // => see details with graph

$ git checkout -b anotherFeature        // => create a new branch (*)
$ ...
$ git commit -m 'work from day 3'
$ ...
$ git commit -m 'work from day 4'
$ ...
$ git commit -m 'finish another feature'
$ git checkout master
$ git merge anotherFeature       // --ff is by default, message will be ignored
$ git log
// something like below
commit 'work from day 4'
commit 'work from day 3'
commit 'add new feature'
commit 'finish the feature'
commit ...
$ gitk                           // => see details with graph

(*) 여기서 newFeature브랜치를 재사용하면 새 브랜치를 만드는 대신 git이 --no-ff병합 을 수행해야 합니다. 이는 빨리 감기 병합이 항상 적합한 것은 아닙니다.


또한 코드가 하루 만에 배치되는 개인화 된 기능 분기를 원할 수도 있습니다. 이를 통해 개발을보다 세밀하게 추적 할 수 있습니다.

작동하지 않는 코드로 마스터 개발을 오염시키고 싶지 않으므로 --no-ff를 수행하는 것이 원하는 것일 수 있습니다.

참고로, 개인 git rebase -i이 같은 브랜치에서 아무도 작업하지 않는 한 서버에서 히스토리를 다시 작성 하고 강제 실행할 수 있기 때문에 개인화 된 브랜치에서 작업 코드를 커밋하지 않아도됩니다 .

참고 URL : https://stackoverflow.com/questions/6701292/git-fast-forward-vs-no-fast-forward-merge

반응형