내 저장소에는 aq
내가 일하고 있는 지점이 있습니다.
그런 다음에 새로운 작업과 버그를 해결했습니다 master
.
커밋을 aq
지점 으로 가져 오는 가장 좋은 방법은 무엇입니까 ? 다른 새 분기를 만들어서 master
병합 aq
하시겠습니까?
git pull origin my_branch_name
내 저장소에는 aq
내가 일하고 있는 지점이 있습니다.
그런 다음에 새로운 작업과 버그를 해결했습니다 master
.
커밋을 aq
지점 으로 가져 오는 가장 좋은 방법은 무엇입니까 ? 다른 새 분기를 만들어서 master
병합 aq
하시겠습니까?
git pull origin my_branch_name
답변:
aq
지점을 확인하고에서 베이스를 재설정하십시오 master
.
git checkout aq
git rebase master
git merge
더 나을 것입니다. 두 가지 모두 시간이 지남에 따라 진화했다면 어느 것이 가장 적합한 지 고려해야합니다.
당신은 git merge origin/master
당신이 당신의 aq 지점에있을 때 할 수 있어야합니다 .
git checkout aq
git merge origin/master
rebase
지점이 로컬이고로 푸시되지 않은 경우에 사용하십시오 origin
. merge
지점이 이미 푸시 된 경우 사용하십시오 . rebase
기록을 다시 작성합니다.
먼저 마스터를 확인하십시오.
git checkout master
모든 변경, 핫픽스 및 커밋을 수행하고 마스터를 푸시하십시오.
지점 'aq'으로 돌아가서 마스터를 병합하십시오.
git checkout aq
git merge master
지점은 마스터와 함께 최신 상태가됩니다. 병합의 좋은 기본 예는 3.2 Git Branching-Basic Branching and Merging 입니다.
이것은 ( 여기에서 ) 나를 위해 일했습니다.
git checkout aq
git pull origin master
...
git push
인용 :
git pull origin master
마스터 브랜치의 내용을 가져와 브랜치와 병합하고 병합 커밋을 만듭니다. 병합 충돌 이있는 경우이 단계에서 알림을 받고 진행하기 전에 병합 커밋을 해결해야합니다 . 새 병합 커밋을 포함하여 로컬 커밋을 원격 서버에 푸시 할 준비가되면를 실행하십시오git push
.
한 줄을 실행하여이 작업을 수행 할 수도 있습니다.
git merge aq master
이것은
git checkout aq
git merge master
git merge a b
가지를 병합 a
하고 b
현재 지점에. 그러나 git merge a
지점에 a
있을 때 아무것도하지 않을 것입니다 (이것이 생각하고있는 것처럼하는 것처럼 보입니다). ( git-scm.com/docs/git-merge#Documentation/… 참조 )
편집하다:
문서 내 대답은 아래 병합하는 방법 master
으로 aq
당신이 그것을에 변경 사항이 나열 병합의 세부 볼 경우, aq
병합 이전이 아니라 변화에했다 master
. 나는 그것이 당신이 생각한다고해도 그것이 당신이 원하는 것이 아니라는 것을 깨달았습니다!
다만:
git checkout aq
git merge master
괜찮습니다.
예,이 간단한 병합 보여줄 것의 변경 master
에 수행 된 aq
그 시점에서, 원형이 아닌 다른 방법; 그러나 그것은 괜찮습니다 – 그것이 일어난 일이기 때문입니다! 나중에 분기를 master
에 병합 할 때, 즉 병합에서 최종적으로 모든 변경 사항이 표시되는 시점 master
(정확히 원하는 것, 사람들이 해당 정보를 찾을 것으로 예상되는 커밋)입니다.
나는 확인하고 한도 정확히 쇼 같은 변경 (에 모든 변경 사항 아래의 방법 aq
때문에 원래 사이의 분할 aq
과 master
당신이 마지막으로 병합 모든 것을 다시 위의 정상적인 방법 등) master
. 그래서 유일한 단점은 (복잡하고 비표준 ... :-/을 제외하고는) 최근의 변경 사항을 뒤로 되돌리고 git reset --hard HEAD~<n>
병합을 지나면 아래 버전이 롤백 된다는 것입니다 . '잘못된'브랜치. 손으로 수정해야합니다 (예 : git reflog
& git reset --hard [sha]
).
[그래서 내가 이전에 생각한 것은 :]
문제가 있습니다 :
git checkout aq
git merge master
병합 커밋에 표시된 변경 사항 (예 : Github, Bitbucket 또는 자주 사용하는 로컬 git history viewer에서 지금 또는 나중에 보는 경우)이 마스터에서 변경 한 것이므로 원하는 것은 아닐 수도 있습니다.
반면에
git checkout master
git merge aq
아마도 이는 AQ에서 만든 프로그램의 변경 입니다 당신이 원하는 무엇을. (또는 적어도 내가 원하는 것입니다!) 그러나 올바른 변경을 보여주는 병합은 잘못된 브랜치에 있습니다!
대처하는 방법?!
전체 프로세스는 aq에 대한 변경 사항 (위의 두 번째 병합에 따라)을 표시하는 병합 커밋으로 끝나지만 aq 분기에 영향을 미치는 병합은 다음과 같습니다.
git checkout master
git merge aq
git checkout aq
git merge master
git checkout master
git reset --hard HEAD~1
git checkout aq
이것은 aq를 마스터에 병합하고 aq와 동일한 병합을 빨리 전달하고 마스터에서 실행 취소 한 다음 다시 aq로 되돌립니다!
뭔가 빠진 것 같은 느낌이들 것입니다. 이것은 분명히 원하는 것 같고 어려운 것 같습니다.
또한 리베이스는 동일하지 않습니다. aq에 대한 커밋의 타임 스탬프와 신원을 잃어 버렸습니다.이 또한 내가 원하는 것이 아닙니다.
시나리오 :
해결책
git stash // to save all existing changes in local branch
git checkout master // Switch to master branch from branch-1
git pull // take changes from the master
git checkout branch-1 // switchback to your own branch
git rebase master // merge all the changes and move you git head forward
git stash apply // reapply all you saved changes
"git stash apply"를 실행 한 후 파일에서 충돌을 찾을 수 있습니다. 수동으로 수정해야하며 이제 푸시 할 준비가되었습니다.