2014-04-25 2 views
0

로컬에서 변경 사항을 밀어 넣은 원격 지점이 있는데 마스터에 대한 변경 사항이 있다는 것을 알고 있으므로 마스터 실행에 git pull을 실행 한 다음 내 로컬 지점으로 돌아가서 git을 실행합니다 rebase 마스터, 그러나 내 로컬 지점을 앞두고 있기 때문에 나는 내 원격 지점에 밀어 넣을 수 없습니다.원격 지점 리베이스에서 git/github 워크 플로

로컬 브랜치에서 새 브랜치를 체크 아웃하고 github에서 새 브랜치를 생성하고 풀 요청을 발행했습니다.

해당 사항입니까? 허용 가능합니까? 원격 지사를 정리하기 위해 할 수있는 일이 있습니까?

답변

2

이미 히스토리를 수정하지 않고 원격으로 푸시 된 브랜치에서 변경 사항을 리베이스 할 수 없습니다. 이것은 각 커밋이 부모 커밋 이후로 변경 사항의 로그이기 때문에 (즉, 부모 커밋이 변경되면 커밋 자체가 변경되므로) 당신이 master 지점의 오프 feature 분기를 만든 다음 더 변화가 master 지점에 추가됩니다한다면 다음과 같을 것이다 :

master 
- a --- feature 
      - 1 
      - 2 
- b 
- c 

을 이제 우리는 featuregit pull --rebase origin master하려고하면 두 feature 커밋 것 다른 부모와 다른 서명이 있어야합니다.

master 
- a 
- b 
- c --- feature 
      - 1a 
      - 2a 

이 완벽하게 잘하고, 좋은 방법이 깨끗한 지역 지점을 유지하고 최신하는 (피 "병합 - 커밋"). 그러나 이미 feature 브랜치를 원격 저장소로 푸시했다면,이 2 가지 커밋을 강제로 적용하고 feature에 덮어 씁니다 (히스토리가 변경 되었기 때문에). 사람이 git fetch origin을 수행하고 feature:2 위에 일한 적이 있다면, 그들은 feature:2feature:2a로 대체되었습니다 이제 역사는 다르기 때문에 (변경 사항을 푸시 할 수 없습니다. 적절한 무엇인지에 대한 지금


작업 흐름은 개인적인 견해, 토론 및 특정 환경에 적합합니다. 예를 들어, 개발자가 리모컨을 사용하거나 아무도이 아닌 경우 master 브랜치를 사용할 수 없습니다. git push origin master -f을 실행하면 리모컨의 master을 로컬 복사본으로 덮어 씁니다.

앞으로이 문제에 대해 어떻게 생각 하든지, master을 기반으로하는 "기능"분기를 만들고이 내역을 로컬로 최대한 편리하게 유지하는 것이 git rebase입니다. 만족스럽고 깨끗한 커밋을 가지고있을 때는 원점으로 밀어 넣으십시오 (원격 저장소로 푸시 한 커밋은 이 아니며은 리베이스해야 함).

지점에 만족하면 당겨 요청을 제출할 수 있습니다. 병합을 시도 할 때는 --squash으로 수동 작업을 수행하여 master 분기에 좋은 정리 기록을 남길 수 있습니다 (스토리처럼 읽음). 이것은 당신이 끌어 오기 요청 폐쇄 가겠어요 방법은 다음과 같습니다 당신이 특정 일이 있으면 내가 가지가 로터리 대답에 갔다 알고

git fetch origin 
git checkout master 
git merge --squash origin/feature/branch 
git commit 

을, 당신이 날 코멘트에 문의하시기 바랍니다를 해결하려면 . 관심이 있으신 분은 reading입니다.

관련 문제