2016-08-17 3 views
2

그래서 포크를 실행 한 다음 분기하고 코드를 커밋합니다. 이제 나는 15 가지 커밋을 내 일에 스쿼시해야합니다.스쿼시가 git으로 커밋됩니다.

우선 먼저 업스트림 코드를 병합합니다. 그런 다음

git fetch upstream master 
git merge upstream/master master 

내가 스쿼시에게 내가 (안 마스터)에있어 분기에 지난 15 개 커밋을 시도

git rebase -i HEAD~15 

지금은 커밋 수백 내 지점 완전히 관련이없는 그 표시가 . 모든 온라인 자습서는 매우 기본이며 포크 워크 플로에서 약간 다르게 수행해야한다고 가정합니다.

무엇이 누락 되었습니까?

+0

내가 도와 줄 수 있도록 다음 세 가지를 해 주시겠습니까? 1.) 현재 git log --date-order --pretty = "% h | % p | % d"HEAD ~ 15 ..머리". 2.) 출력을 여기에 도구에 붙여 넣으십시오. http://bit-booster.com/graph.html 3.) 생성 된 그래프의 스크린 샷을 질문에 첨부하십시오. –

+0

다음은 http://imgur.com/a/384R3 –

+0

그래프입니다. "git log --date-order --pretty ="% h | % p | % d "HEAD ~ 15 ... HEAD "? 가장 높은 녹색 점이 분기점에서 HEAD 인 경우 의미가 있습니다. 그렇지? –

답변

1

난 당신이 내에서하지 ,에 길 squash에 대상 지점을 원하는 것이라고 생각 그것은 (일반적으로). 따라서 변경점이 있고 마스터로 스쿼시하려고하는 경우 워크 플로에 따라 몇 가지 옵션이 있습니다.

CLI

# while on master 
$ git merge my-feature-branch --squash 

Github에서에서 Github에서

당신이 PR https://github.com/blog/2141-squash-your-commits

의 Bitbucket/은닉

병합 할 때 스쿼시 병합에 선택의 여지가

이 작업은 자동으로 수행됩니다.

0

rebase하에있는 커밋의 하위 집합에 병합이 있고없는 경우 동작이 git rebase -i입니다. 귀하의 경우 처음 병합 한 다음 병합이 포함 된 커밋의 하위 집합에 리베이스하려고합니다.

일반적으로 병합 커밋을 리베이스하여 단순하게 유지하지 않습니다.

@teethcientist가 말했듯이 병합 후 병합 후에 을 커밋하는 것이 좋습니다. 도움이 될 수

한 발언 : 당신은 선형 역사에 git rebase -i를 호출 할 때

는 일반적으로, 당신은 커밋의 목록을보고, 당신은 (단지 pick 유지) 아무것도 변경하지 않는, 어떤 작업은 일어나지 않을 것입니다 그리고 역사는 다시 쓰이지 않을 것입니다.

git rebase -i 커밋의 커다란 부분 집합에서 우연히 만났을 때 커밋의 커다란 목록이 종종 보일 것이며, 아무 것도 변경하지 않으면 (유지 pick), 자식은 가장 자주 당신이 원하는 뭔가가 아닌 커밋을 다시 작성하기 시작합니다. 이 상황에서 벗어나려면 모든 행을 삭제하십시오. 일반적으로 rebase 중에 몇몇 줄이 삭제되면, 그 줄에 해당하는 커밋을 제거합니다. 하지만 모든 줄을 제거하면 git는 아무 것도하지 않습니다. - 뭔가를 엉망으로 만들 때 유용합니다. 왜냐하면 원하는 경우 모든 커밋을 삭제하려면 git reset --hard <desired_commit>을 사용하십시오.

관련 문제