programing

'--no-ff' 플래그는 'git merge'에 어떤 영향을 미칩니까?

showcode 2023. 4. 25. 23:47
반응형

'--no-ff' 플래그는 'git merge'에 어떤 영향을 미칩니까?

용용을 사용합니다.gitk log, 의 효과 사이의 차이를 찾을 수 없었습니다git merge그리고요.git merge --no-ff(git 명령 또는 일부 도구를 사용하여) 어떻게 차이를 관찰할 수 있습니까 (git 명령 또는 일부 도구를 사용하여) 차이를 관찰하려면 어떻게 해야 합니까?

»는 다음과 같습니다.--no-ff플래그는 래래가가차차 flag flag flag flag flag flag flag를 방지합니다.git merge현재 "빨리 감기가 감지되면 "빨리 감기"를 실행할 수 없습니다.HEAD병합하려는 커밋의 조상입니다.빨리 감기란 병합 커밋을 구성하는 대신 git가 분기 포인터를 수신 커밋을 가리키도록 이동하는 것입니다.이런 현상은 주로 하다 하다 보면 많이 발생합니다.git pull네, 그렇습니다.

그러나 일반적으로 특정 분기 토폴로지를 유지 관리하려는 경우(예: 주제 분기에 병합하고 기록을 읽을 때 이와 같이 보이도록 하려는 경우) 이러한 동작을 방지해야 할 수 있습니다.그러기 위해서는 어울리다', '어울리다', '어울리다'를 통과하면 됩니다.--no-ff플래그를 설정합니다.git merge는 항상 빠르게 전달되는 대신 병합을 구성합니다.

마찬가지로, '어울리다'를 실행할 때도 마찬가지입니다.git pull또는 사용합니다.git merge 할 때, 빨리감기가 안 될 때, 빨리감기 할 수 없는 경우에는 '빨리감기'를 쓰면 됩니다.--ff-only플래그 이렇게 해서 정기적으로 할 수 있어요. 이렇게 하면 당신은 정기적으로 무언가를 할 수 있어요.git pull --ff-only오류가 발생하면 다시 돌아가서 병합 또는 기본 재배치 여부를 결정할 수 있습니다.

이 질문에 대한 그래픽 답변입니다.

여기 사용법에 대한 명확한 설명과 그래픽 설명이 있는 사이트가 있습니다.git merge --no-ff다음을 참조하십시오

git merge --no-ff와 git merge의 차이입니다.

이걸 보기 전까지, 저는 git에 완전히 빠져있었어요.용용을 사용합니다.--no-ff(Github의 "네트워크" 시각화 도구와 연결되는 링크) 기록을 검토하는 다른 사용자가 작업을 위해 체크아웃한 지점을 명확하게 볼 수 있습니다. 그리고 여기에 또 다른 훌륭한 참고 자료가 나와 있습니다.이 참조는 git에 익숙하지 않은 사람들에게 더 초점을 맞추어 첫 번째 참조를 잘 보완합니다.


저 같은 신인을 위한 기본 정보입니다.

만약 당신이 Git-guru가 아닌 저와 같다면, 제 답변은 로컬 파일 시스템에서 파일을 삭제하지 않고 Git의 추적에서 파일을 삭제하는 것을 다루고 있습니다. 이것은 문서화되어 있지 않지만 종종 발생합니다.또 다른 뉴비 상황은 현재 코드를 얻는 중인데, 여전히 저를 피할 수 있습니다.


예제 워크플로입니다.

웹 사이트로 패키지를 업데이트한 후 내 워크플로우를 보기 위해 노트로 돌아가야 했습니다. 이 답변에 예를 추가하는 것이 유용하다고 생각했습니다.

git 명령의 내 워크플로우는 다음과 같습니다.

git checkout -b contact-form
(do your work on "contact-form")
git status
git commit -am  "updated form in contact module"
git checkout master
git merge --no-ff contact-form
git branch -d contact-form
git push origin master

아래: 설명을 포함한 실제 사용법입니다.
참고: 아래 출력은 스니핑되어 있습니다. git은 매우 상세합니다.

$ git status
# On branch master
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   ecc/Desktop.php
#       modified:   ecc/Mobile.php
#       deleted:    ecc/ecc-config.php
#       modified:   ecc/readme.txt
#       modified:   ecc/test.php
#       deleted:    passthru-adapter.igs
#       deleted:    shop/mickey/index.php
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       ecc/upgrade.php
#       ecc/webgility-config.php
#       ecc/webgility-config.php.bak
#       ecc/webgility-magento.php

네, 그렇습니다.
1) 출력에서 새 파일 추가를 포함한 ECC 패키지의 업그레이드 변경 사항을 확인할 수 .1) ECC는 ECC를 통해 업그레이드됩니다.
) 또한 두 개의 파일이 있습니다(2에 없음)./ecc폴더) 이 변경 사항과 관계없이 삭제했습니다.파일 삭제와 혼동하지 마십시오.ecc그럼 다른 걸로 할게요.cleanup나중에 분기하여 해당 파일의 삭제를 반영합니다.
3) 작업 흐름을 따르지 ! 3) 작업 흐름을 따르지 않았습니다!ecc 을 을 을 을 을 을 을 을 을 을 을 을 을 을 을 을 을 을 을 을 。

아래 다 포함하는 것보다: 다 포함하는 것이 더 낫습니다.git commit -am "updated ecc package"보통은요, 그냥 파일만 추가하고 싶었어요./ecc삭제한 파일들은 특별히 제 파일들이 아닙니다git add하지만 이미 git에서 추적되었기 때문에 이 지점의 커밋에서 삭제해야 합니다.

$ git checkout -b ecc
$ git add ecc/*
$ git reset HEAD passthru-adapter.igs
$ git reset HEAD shop/mickey/index.php
Unstaged changes after reset:
M       passthru-adapter.igs
M       shop/mickey/index.php

$ git commit -m "Webgility ecc desktop connector files; integrates with Quickbooks"

$ git checkout master
D       passthru-adapter.igs
D       shop/mickey/index.php
Switched to branch 'master'
$ git merge --no-ff ecc
$ git branch -d ecc
Deleted branch ecc (was 98269a2).
$ git push origin master
Counting objects: 22, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (14/14), 59.00 KiB, done.
Total 14 (delta 10), reused 0 (delta 0)
To git@github.com:me/mywebsite.git
   8a0d9ec..333eff5  master -> master



위의 자동화를 위한 스크립트입니다.

하루에 10번 이상 이 를 사용하여 배치 스크립트를 작성하여 명령어를 실행했기 때문에 거의 적절한 10개의 스크립트를 만들었습니다.git_update.sh <branch> <"commit message">스크립트를 참조하십시오.다음은 해당 스크립트의 Gist 소스입니다.

신신대신요git commit -am수정'하다를 통해 만든 '수정' 목록에서 파일을 고르고 있습니다.git status이겁니다.수십 개의 편집 작업을 수행했지만 변경 사항을 그룹화할 수 있는 다양한 지점 이름을 원했기 때문입니다.

전략을 병합합니다.

명시적 병합(빨리 감기 아님):새 병합 커밋을 생성합니다.(사용했을 경우 다음과 같습니다.--no-ff을 클릭합니다.

여기에 이미지 설명을 입력하십시오.

빨리 감기 병합:새로운 커밋을 작성하지 않고 신속하게 전달합니다.

여기에 이미지 설명을 입력하십시오.

기본 재배치: 새 기본 수준을 설정합니다.

여기에 이미지 설명을 입력하십시오.

스쿼시: 납작해지도록 (어떤 것을) 힘으로 짓누르거나 짜세요:

여기에 이미지 설명을 입력하십시오.

»는 다음과 같습니다.--no-ff옵션을 사용하면 빠른 전달 병합이 발생하지 않고 항상 새 커밋 개체가 생성됩니다.이것은 git가 피쳐 브랜치의 이력을 유지하기를 원하는 경우에 바람직할 수 있습니다.             git merge --no-ff vs git merge입니다.위 이미지에서 왼쪽은 사용 후 git 기록의 예입니다.git merge --no-ff그리고 오른쪽이 사용 예시입니다.git mergeFF입니다.

편집: 이 이미지의 이전 버전에서는 병합 커밋에 대해 한 부모만 표시되었습니다.병합 커밋에는 git이 "기능 분기" 및 원래 분기의 기록을 유지하는 데 사용하는 여러 상위 커밋이 있습니다.다중 상위 링크는 녹색으로 강조 표시됩니다.

이것은 오래된 질문이며 다른 게시물에서도 약간 미묘하게 언급되어 있지만, 빠른 전달 병합이 아닌 병합에는 별도의 커밋이 필요하다는 설명입니다.

--no-ff 플래그를 사용하면 병합을 빨리 감기 방식으로 수행할 수 있더라도 병합은 항상 새 커밋 개체를 생성합니다.이렇게 하면 피쳐 분기의 과거 존재에 대한 정보가 손실되는 것을 방지하고 함께 피쳐를 추가한 모든 커밋을 그룹화합니다.

다른 답변들은 완벽하게 잘 나타내고 있습니다--no-ff이겁니다.이렇게 하면 피쳐 분기에 대한 기록 정보가 유지되며, 피쳐 분기는 정기적으로 정리 및 삭제되므로 유용합니다.

이 답변은 언제 할지, 언제 사용하지 않을지에 대한 문맥을 제공할 수 있습니다.--no-ff요.

피쳐에서 주 분기로 병합하는 중: 사용--no-ff

작업 예제는 다음과 같습니다.

$ git checkout -b NewFeature
[work...work...work]
$ git commit -am  "New feature complete!"
$ git checkout main
$ git merge --no-ff NewFeature
$ git push origin main
$ git branch -d NewFeature

메인에서 피쳐 분기로 변경 내용을 병합하는 중: off off 주 off 주 주 merging merging merging merging : off--no-ff

작업 예제는 다음과 같습니다.

$ git checkout -b NewFeature
[work...work...work]
[New changes made for HotFix in the main branch! Lets get them...]
$ git commit -am  "New feature in progress"
$ git pull origin main
[shortcut for "git fetch origin main", "git merge origin main"]

빨리 감기가 뭐죠?

빨리 감기는 Git이 단순히 체크아웃한 지점보다 먼저 지점을 병합하거나 기본을 재설정할 때 수행하는 작업입니다.

다음과 같은 분기 설정이 있습니다.

두 지점이 동일한 커밋을 참조합니다.둘 다 정확히 같은 역사를 가지고 있어요이제 기능을 커밋합니다.

마스터 분기는 여전히 7ddac6c를 참조하고 있지만 기능은 두 가지 커밋으로 향상되었습니다.이제 기능 분기를 마스터보다 먼저 고려할 수 있습니다.

이제 Git이 빨리 감기를 할 때 어떤 일이 일어날지 비교적 쉽게 알 수 있습니다.이 기능은 단순히 마스터 분기를 업데이트하여 해당 기능이 수행하는 정확한 커밋을 참조합니다.기능의 커밋에 필요한 모든 변경 사항이 이미 포함되어 있으므로 리포지토리 자체는 변경되지 않습니다.

이제 저장소 기록은 다음과 같습니다.

언제 빨리 감기는 일이 일어나지 않나요?

원래 분기와 새 분기가 변경된 경우에는 빨리 감기 작업이 수행되지 않습니다.

기능을 마스터에 병합하거나 기본 재배치할 경우 트리가 둘 다 분산되어 있기 때문에 Git은 빨리 감기를 수행할 수 없습니다.Git 커밋이 불변의 것임을 고려하면 Git은 부모 참조를 변경하지 않고 기능에서 마스터로 커밋을 가져올 방법이 없습니다.

언급URL : https://stackoverflow.com/questions/9069061/what-effect-does-the-no-ff-flag-have-for-git-merge 입니다.

반응형