2014-06-17 2 views
0

많은 커밋이 역사적으로 "bugfix", "이번에는 진짜 버그 수정", "ok final bugfix", "finally fixed"가있는 github repo로 작업하고 있습니다.Github Repo 스쿼시가 마스터에서 커밋합니다.

이들은 직접 마스터에 위임되었습니다. 어떻게 그들을 스쿼시 할 수 있습니까?

Fromt 1 년 전 자신의 게시물 - 기본적으로 이것은 나쁜 것 같습니다. want to squash multiple commits in github. 작년에 어떤 변화가 있었습니까?

답변

0

오늘 답은 기본적으로 동일합니다. 이러한 커밋을 수행하는 것은 가능하지만, 공유 기록을 다시 쓰는 일은 힘내에서 강력하게 피해야합니다.

당신과 나는 각각 또한 GitHub의에 존재하는 일부 저장소의 복사본이 있는지 상상해

A---B---C 

당신은 그 B 커밋 당신이 커밋 스쿼시 있도록 C 정말 함께 노력 했어야 통지하여 로컬 사본. GitHub의 내가 여전히 파일 내용이 모든 곳에서 동일 할지라도,이 시점에서 우리의 커밋 ID를

A---B---C 

있는 동안 당신은 지금, DBC의 조합

A---D 

이 갈라 섰다. 이제 --force없이 GitHub으로 푸시 할 수 없습니다. GitHub의 master 분기에 더 이상 기록에없는 두 개의 커밋이 포함되어 있기 때문입니다.

당신이 사용을 경우 --force 당신은 GitHub의 변경 사항을 수용 할 수 있지만, 지금 저장소 상류 더 이상 존재하지 않는 개체를 커밋이 포함되어 있습니다. 나는 --force을 사용하지 않고 GitHub을 사용할 수 없으며 (변경을 무효로 할 것입니다), 변경 사항을 가져 오기 위해 상대적으로 펑키 한 병합을하지 않고서는 제 작업을 리베이스하는 등의 작업을하지 않을 수 없습니다. 네가 한 짓을 말해줘.

더 많은 개발자들 (리눅스 커널 저장소에서 이것을 수행하는 이미징!)이 더 복잡해지고 더 많은 작업이 동시에 수행됩니다.

언제든지 git push --force으로 유혹받을 때마다 잠시 생각해보십시오. 아주 좋은 이유만으로 끝내야 할 일을하고 계실 것입니다.

내 추천은 귀하의 기록이 조금 지저분하지만 앞으로 나아갈 수 있도록 노력하는 것입니다. 이러한 커밋은 로컬에서 으로 정리할 수 있습니다. GitHub을 누르거나 다른 개발자와 공유하려면을 누르십시오. 기능 브랜치에서 작업하고 필요하다면 커밋 히스토리를 정리하려면 , 푸시를 사용하려면 cherry-pick, rebase 등을 사용하십시오.

0

스쿼시는 많은 커밋을 하나로 병합하는 데 사용됩니다.정리할 경우 지난 Serval의는의 당신이 마지막 스쿼시하려면 지금

* df71a27 - (HEAD feature_x) Updated CSS for new elements (4 minutes ago) 
* ba9dd9a - Added new elements to page design (15 minutes ago) 
* f392171 - Added new feature X (1 day ago) 
* d7322aa - (origin/feature_x) Proof of concept for feature X (3 days ago) 

같이 보일 것입니다

git log 

이를 사용하여 마지막 자식 로그의를 확인 커밋 세

git rebase -i HEAD~3 
다음의 커밋

이렇게하면 편집자가됩니다.

pick f392171 Added new feature X 
pick ba9dd9a Added new elements to page design 
pick df71a27 Updated CSS for new elements 

편집이 완료되면,이

pick f392171 Added new feature X 
squash ba9dd9a Added new elements to page design 
squash df71a27 Updated CSS for new elements 

처럼 스쿼시 저장하고 편집기를 종료 할 일. 힘내는 커밋을 하나로 스쿼시 할 것이다. 모두 완료되었습니다!

관련 문제