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.