2017-01-02 5 views
4

저는 오픈 소스 프로젝트 (Endless Sky)에 기여하기 위해 좋은 Git 워크 플로우를 갖기 위해 노력하고 있습니다 만, 시작한 이후로 나는 깨끗한 역사로 끝나지 않았습니다. 내 작업 흐름은 다음과 같습니다 :병합에서 rebase로 전환하는 Git 작업 흐름 : 병합 커밋 기록을 정리하는 방법?

  1. upstream/masterhere입니다.
  2. 내 포크는 here입니다. 나는 GitHub Desktop을 사용하기 시작했으나 커맨드 라인으로 전환하기 시작했습니다.
  3. 내 포크의 마스터가 upstream/master을 미러링한다고 가정합니다. 내가 개발 한 각 기능은 내 마스터에서 만든 자체 분기를 가지고 있으며 내 기능을 테스트/재생하기 위해 내 로컬 (로컬) alpha 및 (푸시) beta 분기를 사용합니다.

내 갈퀴 마스터에 문제가 있습니다. This branch is 15 commits ahead of endless-sky:master. 파일이 변경되지 않았습니다. 병합 메시지입니다. 이것은 나에게는보기 흉한 것처럼 보였습니다. 그래서 나는 약간의 책을 읽었습니다. 특히 Stop using 'git pull': A better workflow 기사를 읽었습니다. 그리고 나는 rebasing/fast-forwarding으로 전환했습니다.

그러나이 상황에서 기존 병합 커밋 기록을 정리하는 가장 좋은 방법은 무엇입니까? 내 지형지 물 중 일부를 만지며 (feature/JammingHaywire 참조) 의미있는 커밋이 무의미한 병합 커밋에 의해 익사되는 PR을 제출하고 싶지 않습니다.

나는 다양한 질문을 읽고 내가 최고야 여부를 매우 명확하지 않다했습니다 master를 리메이크/

  1. 삭제를 -입니다 특히 GitHub의와 안전?
  2. git rebase -i [which commit?] 다시 시도하는 중 - 작동하지 않는 것 같습니다. 0facf00으로 다시 시도해 보았습니다. 일부는 전까지 커밋하고 내 병합 커밋 해시 (예 : 3be4d97은 GitHub에 표시됨)가 삭제할 텍스트 파일에 표시되지 않습니다. 최종 결과는 변경되지 않습니다.
  3. 다른 것을하고 있는데 아직 생각하지 못했습니까? 처음부터 '좋은 연습'을하려고하는 것입니까?
+1

게시물을 [편집] (// stackoverflow.com/help/editing)하여 언급 한 기사에 대한 링크를 추가했습니다. 그것이 올바른 것이 아니면 업데이트하거나 제거하십시오. –

+1

완벽한, 감사합니다. 나는 (사용자 한도 시작) 세 번째 링크를 추가 할 수 없으므로 큰 도움이됩니다. – Elyssaen

답변

1

첫 번째 옵션 인, master을 삭제하고 다시 만드는 것이 가장 쉽습니다.여기에 당신이 일을 정리하는 방법은 다음과 같습니다

  1. master에 이미 스위치를하지 않은 경우 :

    git checkout master 
    
  2. 백업 지점을 만들고, 단지의 경우 :

    git branch backup 
    
  3. masterupstream과 일치하도록 재설정하십시오. 이것은 효과적으로, 당신의 옵션 1을 삭제하고 분기를 재현과 동일하지만, 단 하나의 명령이 필요합니다

    git reset --hard upstream/master 
    
  4. 포스 푸시 :

    git push --force-with-lease origin master 
    

    필수 을 경고 : REBASE 때문에 기록을 다시 작성하면이 지사에서 일하는 다른 누구에게나 위험 할 수 있습니다. 당신이 협력하고있는 누구와도 당신이 한 일을 분명하게 전달하십시오. 개인 포크이기 때문에 이것이 문제가되지 않는다고 가정합니다. 나중에 당신은 아무것도없는 것을 발견하면, 당신의 역사를 통해 볼 수

    This branch is even with endless-sky:master. 
    

    : 당신이 볼 수 GitHub의에 있도록

귀하의 master 분기, upstream/master와 최신 지금 backup을 찾으십시오.

git checkout myfeature 
git rebase -i master 

귀하의 편집기가 열리고 커밋의 목록이 표시됩니다 :

유사 엉망이 된 모든 기능을 가지 수행 해결하려면. 추가 병합이 포함 된 행을 삭제 한 다음 저장하고 종료하십시오. 다시 --force-with-lease을 누르십시오.

2

내 문제는 내 갈래의 마스터에 "이 분기 (15)는 무한 하늘 앞서 커밋이다. 마스터" 파일이 변경되지 않았습니다. 병합 메시지입니다.

의가 시작하자 :

을 무한 하늘에 포크 마스터를 재설정/마스터

당신이 당신의 포크 복제 한 가정 : 이제

cd /path/to/fork/clone 
git checkout master 
git remote add-url endless-sky /url/of/endless-sky 
git fetch endless-sky 
git reset --hard endless-sky/master 
git push --force 

을 체크 아웃 귀하의 기능 지점의 (당신이 PR을 만들려고합니다) 그리고 마스터 브랜치 (현재는 을 나타냅니다)

git checkout my_feature_branch 
git rebase master 
git push --force