2014-10-23 4 views
0

나는 마스터 브랜치를 가졌다. 그리고이 지사의 기능을 작업하기 시작했습니다. (별도의 지사를 만들고이 지사에서 재생하는 것을 잊었습니다.) 기능 구현이 끝나기 전에 더미 이름 등으로 마스터하기 위해 수십 개의 커밋이있었습니다. 이제이 기능을 마스터 원본으로 푸시하고 싶습니다. 하지만 전 커밋 내역을 강요하고 싶지는 않습니다. git log에서 중간 단계를 "롤백"하는 방법이 있습니까?푸시하기 전에 여러 커밋을 하나에 병합

답변

2

당신은 12 아마이없이 커밋의 임의의 수를 납작하게됩니다

git reset --soft @{u} 
git commit -m "YOUR COMMIT MESSAGE" 
git push 

을 수행하는 가장 빠른 것입니다 커밋 가지고 있기 때문에 당신은 커밋 단위로 아무것도하지 않아도된다.

+0

어떻게 그렇게됩니까? 너 뭐야? –

+0

'@ {u}'는 그의 경우'origin/master'이어야하는'@ {upstream}'의 줄임말입니다. 최종 변경 내용이 포함 된 새로운 커밋을 하나 만듭니다. –

+0

아, 알겠습니다. 매우 똑똑하고 교육적입니다. 미리 분기 할 수있는 옵션을 제안하므로 로컬 저장소가 미래에 대한 전체 기록을 유지합니다. –

0

스쿼시 기능이있는 git rebase을 고려하십시오. manpage을 참조하십시오.

0

원하는 것은 squash입니다. 함께 커밋하십시오. 시작한 이래로 10 개의 커밋을했다고 가정 해보십시오. 당신은 할 것 :

git rebase -i HEAD~10 
  • -i : 대화 형 리베이스를
  • HEAD ~ 10 : 10에서 커밋 시작하여 현재 전 (HEAD) 지금

당신이있을 것 각 커밋에 대한 줄이있는 편집기. 단어 pick을 바꿔야합니다. 첫 번째 줄의 경우 edit (커밋 메시지를 변경할 수 있음)을 입력하고 다른 모든 경우 fixup (또는 f)을 입력합니다. 따라서 모든 후자의 커밋은 첫 번째 커밋으로 압축됩니다. 커밋 메시지는 제거되므로 (편집 한 커밋 메시지 만 남아있게됩니다).

그래서 당신은 다음과 같아야 편집중인 파일 :

edit 2fa588e start of devel 
fixup c420848 bugfix 
f  78c41af bugfix 
f  6bff2f0 bugfix blah blah 
관련 문제