질문 : Git에서 처음 두 커밋을 스쿼시 하시겠습니까?
git rebase --interactive <commit>
하면 원하는 수의 커밋을 하나의 커밋으로 통합 할 수 있습니다.
초기 커밋에 커밋을 스쿼시하지 않는 한 모든 것이 좋습니다. 불가능 해 보입니다.
그것을 달성하는 방법이 있습니까?
관련 질문에서, 나는 첫 번째 커밋에 대해 스 쿼싱의 필요성에 대한 다른 접근 방식을 생각해 냈습니다. 즉, 두 번째 커밋으로 만들었습니다.
관심이 있다면 : git : 커밋을 첫 번째로 삽입하고 나머지는 모두 이동하는 방법?
답변
2012 년 7 월 업데이트 ( git 1.7.12+ )
이제 모든 커밋을 루트까지 리베이스하고 두 번째 커밋 Y
를 첫 번째 X
로 스쿼시하도록 선택할 수 있습니다.
git rebase -i --root master
pick sha1 X
squash sha1 Y
pick sha1 Z
git rebase [-i] --root $tip
$tip
"에서 루트 커밋까지 모든 기록을 다시 작성할 수 있습니다.
Chris Webb ( arachsys
)의 GitHub에서 commit df5df20c1308f936ea542c86df1e9c6974168472를 참조하십시오.
원문 답변 (2009 년 2 월)
"git 저장소의 처음 두 커밋을 어떻게 결합합니까? "라는 질문에서 다른 레시피를 찾을 수 있다고 생각합니다.
Charles Bailey 는 가장 자세한 답변을 제공하여 커밋이 전체 트리 (이전 상태와의 차이점이 아님)임을 상기 시켰습니다.
그리고 여기서 이전 커밋 ( "초기 커밋")과 새 커밋 (스 쿼싱의 결과)에는 공통 조상이 없습니다.commit --amend
"한 다음 이전 초기 커밋의 기록을 새 초기 커밋으로 리베이스 할 수 없습니다 (많은 충돌).
(그 마지막 문장은 더 이상 git rebase -i --root <aBranch>
사실이 아닙니다)
오히려 ( A
는 원래 "초기 커밋"이고 B
는 후속 커밋을 초기 커밋으로 스쿼시해야 함) :
- 초기 커밋 (HEAD 분리)을 구성하려는 마지막 커밋으로 돌아갑니다.
git checkout <sha1_for_B>
- 분기 포인터를 초기 커밋으로 재설정하지만 인덱스와 작업 트리는 그대로 둡니다.
git reset --soft <sha1_for_A>
- 'B'의 트리를 사용하여 초기 트리를 수정합니다.
git commit --amend
- 이 새로운 초기 커밋에 일시적으로 태그를 지정하거나 새 커밋 sha1을 수동으로 기억할 수 있습니다.
git tag tmp
- 원래 브랜치로 돌아가십시오 (이 예에서는 마스터로 가정).
git checkout master
- B 이후의 모든 커밋을 새 초기 커밋으로 재생합니다.
git rebase --onto tmp <sha1_for_B>
- 임시 태그를 제거하십시오.
git tag -d tmp
그 방법은 " rebase --onto
그것이 마지막 커밋 (이후 역사 rebases 때문에"병합하는 동안 충돌을 도입하지 않는 B
) (이었다 초기 하나에 숙청 할 )하는 A
tmp
합니다 (찌그러 새로운 초기 대표를 commit) : 사소한 빨리 감기 만 병합합니다.
그것은 " AB
"뿐만 아니라 " A-...-...-...-B
"에서도 작동합니다. (이 방법으로 어떤 수의 커밋을 초기 커밋에 스쿼시 할 수 있습니다)
출처 : https://stackoverflow.com/questions/598672/squash-the-first-two-commits-in-git
'개발관련 > Git' 카테고리의 다른 글
경고 : push.default is unset; its implicit value is changing in Git 2.0 (0) | 2021.09.10 |
---|---|
Gemfile.lock이 .gitignore에 포함 되어야 하는가? (0) | 2021.09.08 |
GitHub 리포지토리에 태그 만들기 (0) | 2021.09.07 |
스테이징 영역의 파일에 git diff 표시 (0) | 2021.09.07 |
git log 또는 git diff를 종료하는 방법 (0) | 2021.09.03 |