모든 커밋을 다시 실행하지 않고 동일한 리포지토리에서 두 개의 풀 요청을 제출하는 방법은 무엇입니까?

Dougui

내가 그랬어 이 풀 요청 스마트 리스팅에 대한합니다. 받아 들여지고 계속 발전했습니다. 이제 새로운 변경 사항을 제출하려고하는데 여기에서 볼 수 있듯이 첫 번째 풀 요청의 모든 변경 사항이 새 풀 요청에 다시 나타납니다 .

원래 저장소를 가져 오거나 가져 오거나 리베이스하려고했지만 도움이되지 않았습니다. 나는 이 질문에 주어진 제안을 따랐다 .

"이 브랜치는 Sology : master보다 27 개의 커밋입니다"라고 표시됩니다. 그러나 첫 번째 변경 사항이 수락 된 이후로 4 개의 커밋 만 수행했습니다.

어떡해?

얀 바르 콜

이는 업스트림 리포지토리의 관리자가 첫 번째 풀 요청을 새 커밋으로 스쿼시하고 "unsquashed 브랜치"에서 개발을 계속했기 때문입니다. 저장소 기록을 열고 (예 : gitk 사용) 계속 읽으십시오.

초기 상황은 다음과 같습니다.

* 970f363 (your repo) Add spec for #smart_listing   <-- last commit in your first pull request
* 098fcfe Add specs for #smart_listing_create
(more of your commits)
* 721817f Ignore some files
* 89e24b6 (upstream repo) Add missing update_list event   <-- tip of origin/master back then 
* a084fb9 Fix handling unlimited per page
(...)

ljachymczyk는 업스트림 저장소에 추가하기 전에 모든 커밋을 하나의 새 커밋으로 스쿼시했습니다.

* 61cad2d (upstream repo) Feature spec    <-- your work squashed into single commit
| * 970f363 (your repo) Add spec for #smart_listing    <-- last commit in your first pull request
| * 098fcfe Add specs for #smart_listing_create
| (...)
| * 721817f Ignore some files
|/  
* 89e24b6 Add missing update_list event
* a084fb9 Fix handling unlimited per page
(...)

이제 Git은 단일 새 커밋 ( 61cad2d)과 전체 브랜치 ( 721817f..970f363) 사이의 연결을 보지 못한다는 것을 이해해야합니다 . 단일 커밋이 이전 20 개 이상의 커밋과 동일한 변경 사항을 도입하더라도 Git의 경우 이는 관련없는 변경 사항입니다. (그리고 좋은 이유가 있습니다.)

그런 다음 리포지토리에서 계속 작업하여 이전 브랜치에 새 커밋을 추가했습니다.

* 61cad2d (upstream repo) Feature spec
| * 0b14747 (your repo) Refactor #smart_listing_create   <-- your new stuff
| * e49c522 Use the controller name by default
| * a1c1a92 Remove the spec directory in dummy app
| * 4128104 Remove gems from Gemfile and add it in gemspec
| * 970f363 Add spec for #smart_listing               <-- your old stuff
| * 098fcfe Add specs for #smart_listing_create
| (...)
| * 721817f Ignore some files
|/  
* 89e24b6 Add missing update_list event
* a084fb9 Fix handling unlimited per page
(...)

보시다시피 이러한 모든 오래된 커밋은 여전히 업스트림 리포지토리에 존재하지 않습니다 . 이것이 풀 리퀘스트에 나타나는 이유입니다. 병합이나 "정상"리베이스는 변경되지 않습니다.

새 커밋은 61cad2d이전 브랜치가 아니라 (스쿼시 커밋) 위에 생성되어야합니다 . 따라서 이제 이식해야합니다. 단일 스쿼시 커밋 (61cad2d)이 이전 브랜치와 정확히 동일하다고 가정하면 쉽습니다 (즉, git diff 970f363 61cad2d변경 사항이 표시되지 않음). 이 경우 간단히

git branch newstuff 0b14747
git rebase --onto 61cad2d 970f363 newstuff

newstuff스쿼시 된 커밋을 기반으로 4 개의 새 커밋 이있는 분기를 가져와야합니다.

경우에 유의 970f36361cad2d동일하지, 당신이 병합 충돌을 해결 할 수 있습니다. 이것은 게시 된 커밋을 리베이스하고 스쿼시하는 것이 어떻게 문제를 일으키는 지 보여줍니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관