programing

Git 빨리 감기 VS 빨리 감기 병합 안 함

javamemo 2023. 5. 10. 20:09
반응형

Git 빨리 감기 VS 빨리 감기 병합 안 함

Git merge를 사용하면 분기 병합을 빠르게 진행하고 분기 병합을 빨리 진행하지 않을 수 있습니다.빨리 감기 병합을 사용할 때와 빨리 감기 병합을 사용하지 않을 때에 대한 아이디어가 있습니까?

--no-ff옵션은 피쳐 분기에 대한 명확한 개념을 가질 때 유용합니다.따라서 그 동안 커밋이 수행되지 않았더라도 FF는 가능합니다. 메인 라인의 각 커밋이 하나의 피쳐에 해당하는 경우도 있습니다.따라서 여러 커밋이 있는 피쳐 분기를 단일 단위로 처리하고 이를 단일 단위로 병합합니다.피쳐 분기를 다음과 병합할 때 기록에서 명확합니다.--no-ff.

만약 당신이 그런 것에 신경 쓰지 않는다면 - 당신은 가능할 때마다 FF를 벗어날 수 있을 것입니다.따라서 워크플로우의 svn과 같은 느낌을 더 많이 받을 수 있습니다.

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

"feature" 분기에 대한 일련의 사소한 커밋이 하나의 새 피쳐를 구성하는 상황을 고려해 보십시오."git merge 없이 " merge feature_branch만 하면 됩니다.--no-ff"Git 기록에서 어떤 커밋 개체가 기능을 함께 구현했는지 확인하는 것은 불가능합니다. 모든 로그 메시지를 수동으로 읽어야 합니다.전체 기능(즉, 커밋 그룹)을 되돌리는 것은 진정한 골칫거리입니다 [만약에--no-ff사용되지 않음], 반면에, 그것은 다음과 같은 경우에 쉽게 행해집니다.--no-ff플래그는 [단 한 번의 커밋이기 때문에] 사용되었습니다."

--no-off 그룹이 피쳐 분기에서 마스터 분기에 대한 하나의 커밋으로 모든 커밋을 함께 수행하는 방법을 보여주는 그래픽

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

옵션 기, 옵--no-ff(, 실제 병합)은 여러 부모와 함께 새 커밋을 만들고 더 나은 기록 추적을 제공합니다.그렇지않으면,--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사용하는 branch를 할입니다. git는 branch를 만듭니다.--no-ff어쨌합 ▁this. 즉, 빠른 이 항상 것은 .즉, 빠른 전달 병합이 항상 적합한 것은 아닙니다.

개발 환경에서 작업하고 스테이징/제작 지점에 코드를 병합할 때는 Git no fast forward가 더 나은 옵션이 될 수 없습니다.일반적으로 단일 기능에 대해 개발 부서에서 작업할 때 여러 커밋이 발생하는 경향이 있습니다.여러 커밋을 사용하여 변경 사항을 추적하는 것은 나중에 불편할 수 있습니다.Git no fastforward를 사용하여 스테이징/제작 지점과 병합할 경우 커밋은 1개뿐입니다.이제 기능을 되돌리려면 언제든지 해당 커밋을 되돌리십시오.삶은 쉽습니다.

Git 시각화

다음은 차이점이 있는 깃 로그 시각화입니다.이 나무들은 12 3이라고 불리는 개발에서 세 개의 가지를 만든 다음 빠르게 전진하거나 전진하지 않고 합쳐지는 것처럼 보였습니다.아래에 설정 코드를 넣겠습니다.단말기에 명령어 한 단락을 붙여넣어 다양한 깃 시나리오를 빠르게 설정하고 재설정할 수 있어 깃을 학습하는 데 큰 도움이 되었습니다.

빨리 감기의 경우 Git는 병합을 나타내지 않습니다.

--no-ff         --ff (default)

* Merge 3
| * 3
* | Merge 2     * Merge 3
| | * 2         | * 3
| |/            * | Merge 2
* / Merge 1     | | * 2
|/              | |/
| * 1           * / 1
|/              |/
* main          * main

이 접근 방식을 기준 재조정과 비교할 가치가 있습니다.

설정/분해

이 작업을 반복적으로 실행하면 보고서가 삭제되고 다시 초기화됩니다. 경로만 변경하면 될 것 같습니다.rd*nix에 있는 경우 디렉토리 명령을 제거합니다.

감기 를 합니다.--no-ff마지막에 있는 병합 명령에서.를 합니다.--pretty커밋 ID를 보려면 조각을 선택합니다.

cd \user\docs\code\learning\github\sandbox
rd /s /q 0.git 1 2 3
git init --bare 0.git
git clone 0.git 1
cd 1
git config user.name "user"
git config user.email "user@email.com"
git commit --allow-empty -m main
git switch -c 1 main
git commit --allow-empty -m 1
git switch -c 2 main
git commit --allow-empty -m 2
git switch -c 3 main
git commit --allow-empty -m 3
git switch main
git merge --no-ff 1
git merge --no-ff 2
git merge --no-ff 3
git log --graph --oneline --first-parent --all --pretty=%s

또한 코드가 하루의 끝에 배치되는 맞춤형 피쳐 분기를 원할 수도 있습니다.이를 통해 개발 상황을 보다 상세하게 추적할 수 있습니다.

저는 작동하지 않는 코드로 마스터 개발을 오염시키고 싶지 않습니다. 그러므로 그렇게 하는 것이 단지 사람들이 원하는 것일 수 있습니다.

는 다시 쓸 수 가 없을 .git rebase -i다른 사람이 같은 지점에서 작업하지 않는 한 서버에 강제로 연결됩니다.

게시된 사용 이유 외에도--no-ff대상 분기에서 올바른 상위 순서를 유지하는 것도 하나의 방법입니다.

용사를 합니다.--no-ff결과 분기의 마지막 커밋에 있는 상위 순서는 병합 중인 분기의 마지막 커밋에 있는 상위 순서와 독립적이며, 첫 번째 상위 순서는 병합한 분기가 아닌 대상 분기에 있습니다.의 첫 out .off 를마 커 대 통 대 로 분 가 마 커 밖 메 라 부 번 커 첫 리 인 을 째 의 인가모밋 밋 킵 의막지니의기상다수므커행경분마되로합으상하병우밋막에기밋 지이는분합기지막할의▁if,▁you▁of메가라▁of이것은 아마도 당신이 원하는 것이 아닐 것입니다.

예를 들어 다음과 같이 사용할 수 있습니다.--first-parent 변경 하거나 첫 예: 분기 기필분보주사거나변항경만요다니수, 다음과기항상작이사목다합행을으업)을 수행합니다.revert분기에서 올바른 상위 참조를 유지하지 않으면 결과가 예상과 다를 수 있습니다.

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

반응형