2016-10-22 6 views
1

Git 커밋을 몇 번 시도했는데 스쿼시하려고했던 이전 커밋을 선택하는 데 수작업이 필요했습니다.rebase 및 squash 임시 커밋을위한 Git 스크립트

이렇게 자동으로 수행 할 수있는 방법이 있습니까? 제 목표는 특정 원격 브랜치에 아직 푸시되지 않은 모든 이전 커밋을 스쿼시하는 것입니다.

"dev"라는 로컬 브랜치 1 개와 공용 및 개인 리모컨 2 개가 있다고 가정 해 보겠습니다. 나는 "dev"라는 브랜치에 private remote에 원하는 모든 것을 집어 넣고 밀어 넣는다. 이것을 private/dev으로 부르 자. 그러나 공공 장소에서 나는 깨끗하고 깔끔한 것을 지키고, "master"라는 하나의 표준 지점을 유지하기를 원합니다. public/master으로 전화를 걸어 봅시다. 공개 원격 마스터 브랜치에 아직 제출하지 않은 모든 커밋에 대해 내가 말했듯이, 그 커밋을 하나의 큰 커밋으로 스쿼시하고 공용/마스터로 푸시하려고합니다.

어떻게 구현할 수 있습니까? 복잡한 것처럼 보입니다.

+0

체크 아웃 https://robots.thoughtbot.com/autosquashing-git-commits – Yawar

답변

3

당신은 단순히 public/master를 통해 임시 지점을 만들

(- - 예를 들어 공개 리모컨의 이름 인 publicmaster와 대상 지점 인) 그리고 당신은 ("In git, what is the difference between merge --squash and rebase?"참조) merge --squash를 사용

git checkout -b temp public/master 
git merge --squash dev 
# since merge --squash does not produce a commit: 
git commit -m "squash dev" 
git push public temp:master 
git checkout dev 
git branch -d temp 

콜론 구문은 "git push branch to a new repo with a different name"과 examples section of git push을 참조하십시오.
로컬 브랜치를 다른 이름으로 리모트 브랜치에 푸시 할 수 있습니다.

+0

나는 이것이 잘되기를 바랍니다. 각 단계/명령에서 정확히 무슨 일이 일어나는지 자세히 설명해 주시겠습니까? 내가 실제로 예를 들어 –

+0

을 따르는 지 확신 할 수 없다. 당신이 public/master의 최신 버전을 보았을 때 병합 결과에 커밋 메시지를 줄 수 있습니까? –

+0

또한 "git push public tmp : master"는 무엇입니까 - 콜론 구문은 무엇을 의미합니까? –