깨끗한 pull 요청을 할 수 있도록 Github 포크를 어떻게 정리합니까? 이미 업스트림 (내치)이 존재합니다. 내

Github에서 저장소를 포크했습니다. 사소한 변경을하고 업스트림에 풀 요청을 제출했지만 포크가 너무 엉망이되어 깨끗한 풀 요청을 생성 할 수 없습니다. 6 개의 변경 사항이있는 브랜치에서 풀 요청을 시작하면 Github는 13 개를 제출하려고합니다. 그중 7 개는 이미 업스트림 (내치)이 존재합니다.

내 문제 는 최신 커밋을 가져 오는 것과 관련된 것 같지만 새 분기를 만들고 체리 선택 커밋을 만들 때 여전히 추가 항목이 있습니다. 나는 rebasing 도 만났지만 이제는 내 마스터 조차도 너무 엉망이되어 upstream 의 깨끗한 사본을 생성 할 수 없습니다 . 병합하는 대신 리베이스가 필요하다는 것을 이해하지 못했기 때문에 분명히 실수를 저질렀습니다. 내가하려는 것은 매듭을 풀고 내가 유용하게 앞으로 나아갈 수있는 깨끗한 상태로 돌아가는 방법을 알아내는 것입니다.

나는 포크를 날려 버리고 상류의 새로운 포크를 만들고 싶지만 그것도 모으는 것이 어렵습니다.

Git 죄를 고백 한 후 어떻게 github absolution을 얻나요?



답변

1 단계 : 업스트림 변경 사항 가져 오기
저장소 분기 페이지 에 설명 된대로 업스트림 저장소를 “업스트림”으로 추가하는 것이 좋습니다 .

git pull --rebase upstream master

--rebase옵션은 병합없이 최신 커밋 위에 변경 사항을 배치합니다.

2 단계 : (선택 사항) 커밋을 하나의 커밋으로 병합

git reset --soft upstream/master

이 명령은 모든 커밋을 “실행 취소”하지만 파일을 변경하지는 않습니다. 따라서 단일 커밋으로 모든 변경 사항을 커밋 할 수 있습니다.

git commit -a

3 단계 : 변경 사항 확인 및 테스트

변경 사항을 표시하려면 내장 gitk, Sourcetree , TortoiseGit 또는 Tower (유료) 등과 같은 GUI를 사용하십시오 .

4 단계 : 푸시

git push푸시가 대상 저장소의 기록을 변경하기 때문에 오류가 발생합니다.
3 단계에 표시된 변경 사항이 정확하다고 확신하는 경우 “-f”를 눌러 누릅니다.

git push -f origin master

추가 정보
원격을 추가하는 명령은 다음과 같습니다.

git remote add upstream git://github.com/[username]/[project].git

직접 URL에서 가져올 수도 있습니다.

git pull --rebase  git://github.com/[username]/[project].git

그러나 다른 단계에서 “업스트림 / 마스터”대신 최신 업스트림 커밋의 해시가 필요합니다.


답변

내가 이해하는 바와 같이, Git과 Mercurial (나는 후자 만 사용 했으므로 내가 틀렸을 수 있음)을 사용하면 포크를 날려 버리고 다시 포크하는 것은 큰 문제가 아닙니다. 저는 프로젝트에서 항상 그렇게합니다. 그렇게해도 괜찮다면 (변경 사항을 백업 할 수 있거나 포크에 큰 변경 사항이없는 경우) 아마 그 방법이 될 것입니다.

저장소를 분기하면 해당의 전체 복제 수, DVCS와 기억 전체의 repo . 현재 포크를 삭제 한 다음 원래 리포지토리를 다시 포크하면 작업 할 완전히 깨끗한 슬레이트를 갖게됩니다.


답변

개인 저장소에서 forkee의 저장소를 원격으로 추가하십시오. 리모트 브랜치에서 브랜치를 리베이스 / 리셋합니다. github 저장소에 강제 푸시를 수행하십시오.

정확한 명령이 필요하면 알려주세요. 또한 로컬 커밋을 시도하고 보존 할 것인지 아니면 “블로잉 아웃”이 괜찮은지 알려주십시오.


답변