한 번에 여러 버그를 해결해야합니까? "한 번에"라는 말은 "여러 개의 버그에 대해 동시에 파일을 편집 한 파일"을 의미합니다. 당신이 절대적으로 그것을 필요로하지 않는 한, 나는 당신의 환경에서 한 번에 하나의 버그에 대해서만 노력할 것입니다. 이렇게하면 복잡한 숨김 / 단계를 관리하는 것보다 훨씬 쉬운 로컬 분기 및 리베이스를 사용할 수 있습니다.
마스터가 커밋 B에 있다고 가정 해 봅시다. 이제 버그 # 1에서 작업하십시오.
git checkout -b bug1
이제 지점 bug1에 있습니다. 코드를 변경하고 커밋하고 코드 검토를 기다립니다. 이것은 로컬이므로 다른 사람에게 영향을 미치지 않으며 git diffs에서 패치를 작성하기에 충분히 쉬워야합니다.
A-B < master
\
C < bug1
지금 당신은 bug2에서 일하고 있습니다. 로 다시 마스터로 돌아 갑니다git checkout master
. 새 지점을 만드십시오 git checkout -b bug2
. 변경, 커밋, 코드 검토 대기
D < bug2
/
A-B < master
\
C < bug1
검토를 기다리는 동안 다른 사람이 마스터에서 E & F를 커밋한다고 가정 해 봅시다.
D < bug2
/
A-B-E-F < master
\
C < bug1
코드가 승인되면 다음 단계를 통해 마스터하도록 코드를 리베이스 할 수 있습니다.
git checkout bug1
git rebase master
git checkout master
git merge bug1
결과는 다음과 같습니다.
D < bug2
/
A-B-E-F-C' < master, bug1
그런 다음 로컬 bug1 브랜치를 푸시하고 삭제할 수 있습니다. 작업 공간에서 한 번에 하나의 버그가 발생하지만 로컬 브랜치를 사용하면 저장소에서 여러 버그를 처리 할 수 있습니다. 그리고 이것은 복잡한 무대 / 무대 댄스를 피합니다.
주석에서 ctote의 질문에 대한 답변 :
글쎄, 당신은 각 버그에 대한 숨김으로 돌아가서 한 번에 하나의 버그로만 작업 할 수 있습니다. 준비 문제를 해결하는 Atleast. 그러나 이것을 시도한 결과 개인적으로 문제가 있습니다. 숨김은 자식 로그 그래프에서 약간 지저분합니다. 더 중요한 것은 무언가를 망치면 되돌릴 수 없습니다. 더러운 작업 디렉토리가 있고 숨김을 표시하면 해당 팝업을 "실행 취소"할 수 없습니다. 기존 커밋을 망치는 것이 훨씬 어렵습니다.
그래서 git rebase -i
.
한 분기를 다른 분기로 리베이스 할 때 대화식으로 수행 할 수 있습니다 (-i 플래그). 이 작업을 수행 할 때 각 커밋으로 수행 할 작업을 선택할 수 있습니다. Pro Git은 HTML 형식의 온라인 설명서이며 rebasing & squashing에 대한 멋진 섹션이 있습니다.
http://git-scm.com/book/ch6-4.html
편의상 그들의 예를 그대로 훔치겠습니다. 다음 커밋 히스토리를 가지고 있고, bug1을 마스터로 리베이스 및 스쿼시하려고합니다.
F < bug2
/
A-B-G-H < master
\
C-D-E < bug1
입력 할 때 표시되는 내용은 다음과 같습니다. git rebase -i master bug1
pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added cat-file
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
분기의 모든 커밋을 단일 커밋으로 스쿼시하려면 첫 번째 커밋을 "pick"으로 유지하고 이후의 모든 "pick"항목을 "squash"또는 "s"로 바꿉니다. 커밋 메시지도 변경할 수 있습니다.
pick f7f3f6d changed my name a bit
s 310154e updated README formatting and added blame
s a5f4a0d added cat-file
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
예, 스 쿼싱은 약간의 고통이지만 여전히 스 태시를 많이 사용하는 것이 좋습니다.