git에서 빠른 전달을 기본적으로 해제 할 수 있습니까?


263

내가 사용하는 것입니다 때 난 정말 지금까지 한 번 생각할 수 없다 git merge가 아니라 git rebase하고 있지 a가 표시 커밋 갖고 싶어. 기본적으로 git이 빨리 감기되도록 구성하는 방법이 있습니까? --ff옵션 이 있다는 사실은 방법이 있다는 것을 암시하는 것처럼 보이지만 문서에서 찾을 수없는 것 같습니다.


3
나는 merge빨리 감기를 위해 리모컨을 커밋하지 않은 지점에 항상 사용 합니다. 가장 간단하고 안전한 방법입니다. 궁금합니다. 분명히 유스 케이스가 있습니다. 브랜치의 한쪽에 커밋이없는 곳에 병합 커밋을 만들고 싶은 이유는 무엇입니까?
— CB Bailey

12
분기를 사용하여 논리적으로 커밋 그룹을 만듭니다. 병합을하면 기본적으로 "이 커밋이 함께 진행된다"고 말하는 방법입니다. 당신은 그것을 가난한 사람의 대화 형 리베이스와 스쿼시라고 생각할 수 있습니다. :-)
— Jason Baker

13
같은 모델을 다음과 특히 빨리 감기 끄기, 매우 유용 모델 분기 성공적인 힘내
— steinybot

2
에릭 플라톤의 응답이에 대한 허용 대답 변경해주십시오 stackoverflow.com/a/6810687/3408를 - 내가 허용 대답의 단계를했다, 다음은 바보 현재 저장소의 마스터 지점에 대한 것을 깨달았다.
— rjmunro

3
@ jpmc26 각자 자신의 것 같아요. 그 기사에 동의하지 않습니다. 병합 커밋의 두 부모를 찾는 것은 어렵지 않으며 변경 사항이 무엇인지 정확하게 알려줍니다. 그런 다음 변경 사항을 적용하고 다른 지점을 "리베이스"할 수 있습니다. 플랫 모델을 사용하면 수동으로 찾아서 선택해야합니다. 우리는 분기를 포용하기로 선택합니다. 전체 트리를 볼 때 복잡하지만 실제로는 여러 변경 사항이 동시에 발생합니다. 모든 것을 평평하게하면 실제로 일어난 일이 숨겨집니다.
— steinybot

답변:


282

예, 있습니다 --no-ff. 분기별로 병합 옵션을 구성 할 수 있습니다 (예 :

git config branch.master.mergeoptions  "--no-ff"

$(REPO)/.git/config파일에 다음을 추가 합니다.

[branch "master"]
    mergeoptions = --no-ff

각주 : 내 경험에 따르면, 결국 빨리 감기를 끄는 것이 git 신규 이민자에게 도움이된다는 것을 알았습니다. remote ..blarf '커밋.

10 년 후 각주 2 : 아래의 다른 답변은보다 현대적인 구성 옵션을 제공하지만 실제로 빈 병합 커밋은 실제로 만 커지기 때문에이 날짜와 나이에 기본값 (즉, 가능하면 빨리 감기)을 유지하고 싶을 것입니다 역사를 추론하기가 훨씬 어렵습니다.


142
git을 배우는 것은 산악 등반과 비슷합니다. 그러나 작은 절벽에서 시작하여 더 험한 절벽으로 나아가는 대신, git은 매번 같은 높이로 올라 가기 때문에 매번 다른 높이로 떨어질 수 있습니다.
— conny

12
@Thomas : 예; git pull이다 git fetch+는 git merge.
— Michelle Tilley

9
이것은 좋아 보이지만 모든 지점에 대해 모든 지점에 대해 설정하지 않고 모든 지점에 대해 전 세계적으로 수행 할 수있는 방법이 있습니까?
— bwinton

33
용을 조심하십시오. 이 옵션은 @Thomas가 말한 것처럼 위험합니다 ... 모든 자식 풀은 병합 커밋을 만듭니다. git pull --ff는 git config의 mergeoptions = no-ff를 무시하지 않습니다.
— Dalibor Filus

15
타이핑에 지친 경우 어떻게해야 git merge --no-ff (branchname)합니까? 그리고 git pull항상있는 그대로 기능 하고 싶 습니까?
— Dogweather

341

스레드에 여전히 보류중인 질문이있는 것 같습니다 : 어떻게 전역 적으로 (즉 모든 지점에서)합니까? 기록을 위해 다음을 사용할 수 있습니다.

git config --add merge.ff false

... 현재 저장소의 모든 브랜치에 적용합니다. 옵션 (로컬 설정이 전역 설정을 재정의 함) 없이 누군가가 실행 하지 않은 모든 리포지토리의 모든 브랜치에 적용하려면 다음을 실행하십시오.--global

git config --global --add merge.ff false

로부터 문서 :

merge.ff
기본적으로 git은 현재 커밋의 자손 인 커밋을 병합 할 때 추가 병합 커밋을 만들지 않습니다. 대신 현재 분기의 끝이 빨리 감 깁니다. false로 설정하면이 변수는 git에게 이러한 경우 추가 병합 커밋을 생성하도록 지시 --no-ff합니다 (명령 줄에서 옵션 을 제공하는 것과 동일 ). 이 옵션 만 설정 --ff-only하면 명령 줄에서 옵션 을 제공하는 것과 같은 빨리 감기 병합 만 허용 됩니다.


18
참고 : merge.ffGit 1.7.6에서 도입되었습니다. 이전 버전에서는 효과적이지 않습니다.
— Chris Johnsen

2
Git 1.7.6을 사용하는 사람들에게는 이것이 가장 쉽고 간단한 솔루션입니다.
— Ryan Lundy

22
나는 이것을 별명과 함께 사용하고있다puff = "pull --ff --ff-only"
— stigi

11
프로그래머 (현재, 볼도 git-scm.com/docs/git-config ) 옵션 pull.ff 로 설정할 수 있습니다 만 별칭과 동일 할 것입니다.
— jotomo

1
감사합니다, @jotomo. 이 기능은 Git v2.0.0 (커밋 b814da891e8261b909fc5d9fb07b4e8b13989c2d)에서 사용할 수 있습니다.
— Eric Platon

14

답변 스레드를 읽으면서 다음 두 가지 옵션을 사용했습니다.

git config --global pull.ff only # Disallows non ff merges on pull. Overrides merge.ff when pulling
git config --global merge.ff false # even create extra merge commit when fast forward merge would be possible

느슨하게 관련되어 있습니다.이 설정은 풀 동안 문제를 피할 수 있음을 발견했습니다.

git config --global pull.rebase true # set up pull to rebase instead of merge

1
자식 설정 --global pull.rebase 진정한 #주의 사항 '진정한'라인의 끝에서
— zowers

고마워 @zowers 나는 이것을 고쳤다
— bastian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.