2013-05-03 1 views
11

GitHub에서 저장소를 포크하고 풀 요청을 제출했습니다. 프로젝트의 관리자는 pull 요청을 거절했지만 포럼에서 더 나은 해결책을 찾았습니다. 그들은 대체 변경 사항을 가진 다른 풀 요청을 작성하라고 지시했습니다. 그러나 GitHub의 저장소는 포크 된 이후로 메인 저장소로 업데이트가 푸시되었으므로 오래된 것입니다. 또한 GitHub의 저장소에는 프로젝트의 일부로 승인되지 않았기 때문에 거기에 없어야하는 추가 커밋 (pull request commit)이 있습니다. 내가 이런 짓을, 특히, How do I update a GitHub forked repository?끌어 오기 요청이 거부되었을 때 GitHub 분기 된 Repo를 업데이트하는 방법은 무엇입니까?

내가 지시 사항을 준수 :

나는이 질문을 발견 모든 벌금을 보인다 있도록

remote: Counting objects: 93, done. 
remote: Compressing objects: 100% (47/47), done. 
remote: Total 69 (delta 49), reused 40 (delta 20) 
Unpacking objects: 100% (69/69), done. 
From git://github.com/fuel/core 
* [new branch]  1.0/master -> upstream/1.0/master 
* [new branch]  1.1/master -> upstream/1.1/master 
* [new branch]  1.2/develop -> upstream/1.2/develop 
* [new branch]  1.2/master -> upstream/1.2/master 
* [new branch]  1.3/develop -> upstream/1.3/develop 
* [new branch]  1.3/master -> upstream/1.3/master 
* [new branch]  1.4/develop -> upstream/1.4/develop 
* [new branch]  1.4/master -> upstream/1.4/master 
* [new branch]  1.5/develop -> upstream/1.5/develop 
* [new branch]  1.5/master -> upstream/1.5/master 
* [new branch]  1.6/develop -> upstream/1.6/develop 
* [new branch]  feature/better-hmvc -> upstream/feature/better-hmvc 

좋아, : 결과

git remote add upstream git://github.com/fuel/core 
git fetch upstream 

좋은. 나는 정확한 지점에 있는지 확인했다 :

git checkout 1.6/develop 
Already on '1.6/develop' 

Word. 자, 이제 이것을 위해 :

git rebase upstream/1.6/develop 
First, rewinding head to replay your work on top of it... 
Applying: prevent invalid XML node names 

대기 ... 뭐야? "유효하지 않은 XML 노드 이름 방지"가 적용되는 이유는 무엇입니까? 이것이 프로젝트 유지자들에 의해 거절당한 요청입니다. 나는 분명히 "rebase"라는 진정한 의미의 배를 놓치고있다. 지금은 git status 경우는 말한다 : 나는 git log, 내가 볼 수있는 경우

# On branch 1.6/develop 
nothing to commit (working directory clean) 

내 문제의 절반은 해결되었습니다. 내가 갈래로 변경 한 프로젝트는 이제 내 git log에 반영됩니다. 그러나 가장 최근의 커밋은 "유효하지 않은 XML 노드 이름 방지"로 남아 있습니다. 어떻게 그것을 제거합니까?

나는이 프로젝트에 만든 마지막 커밋을 체크 아웃 시도 :

git checkout 5f31a4df55e5b6ca1b2092534063a1fce4a32181 

그러나,이 분리 된 HEAD 상태에서 저를 떠난다. 그것은 내가 둘러보고, 변화시키고, 저지를 수 있다고 말한다. 나는 그것이 내가하고 싶은 일이라고 생각하지 않는다. HEAD가 5f31a4df55e5b6ca1b2092534063a1fce4a32181을 커밋하도록 지정합니다. 다음 단계는 무엇입니까?

답변

9

git rebase은 지사에게 커밋을 유지합니다. 귀하의 홍보가 거절되면 귀하는 그것을 삭제하고 귀하의 master 지점을 upstream/master과 동일하게 만들고 싶습니다.

마찬가지로 사용자는 reset을 원합니다.

git checkout master 
git reset --hard upstream/master 

그러면 업스트림과 동일한 마스터가됩니다. 그런 다음 새 PR에 대한 새 분기를 작성하십시오. 그러면이 문제점이 다시 발생하지 않습니다.

+2

감사합니다. 다시 강조 해야겠다. 왜냐하면 나에게 너무 도움이 되었기 때문이다. ** "그렇다면 새로운 PR을위한 새로운 지점을 만들어 다시는이 문제가 발생하지 않게 될 것이다. ** ** –

+0

이것은 좀 더 정확한 : http://stackoverflow.com/a/8135023/89818 나를 위해 밀어 넣기가 필요했습니다. – caw

1

이 질문은 이미 받아 들여진 대답을 가지고 있지만 받아 들여지는 대답이 나의 경우에 잘 들어 가지 않았기 때문에 다른 방법을 말할 것입니다.

이러한 상황은 다음이 단계를 통해 이동하시기 바랍니다 발생하는 경우

$git rebase  
There is no tracking information.... 

$git checkout 
Already on 'master' 

$git reset --hard upstream/master 
ambiguous argument upstream/master 

실행.

머리를 로컬로 재설정하십시오.

$git reset HEAD 

서버 리포에서 동일한 변경을하십시오.

$git reset HEAD^ 

그런 다음 당신이 모든 파일을 나열, 당신의 원래 갈래의 repo에 대한 변경 사항에 대한 메시지를 표시합니다. 파일 이름이 변경되지 않고 Unstaged가 변경되었습니다.

$git stash 

이제 이러한 변경 사항을 밀어 강제 할 수 같은 머리에 로컬 및 원격 REPO를 가리 키도록 단절 :

지금 사용하여 변경 사항을 취소.

$git push origin +HEAD 

이제는 포크를 할 때와 같은 위치에 있습니다. 이제 원래 repo에서 최신 코드를 다시 가져올 수 있습니다.