Git에서 마스터에서 분기로 변경 사항 가져오기
▁branch라는 지점이 .aq
제가 하고 있는 일입니다.
그리고 나서 저는 새로운 일과 버그를 범했습니다.master
.
이러한 커밋을 다음 단계로 전환하는 가장 좋은 방법은 무엇입니까?aq
지점?다음으로 다른 새 분기 만들기master
그리고 그것을 병합합니다.aq
?
다음을 확인하십시오.aq
및 from 분기재치배본기및master
.
git checkout aq
git rebase master
당신은 그냥 할 수 있어야 합니다.git merge origin/master
당신이 당신의 q 지점에 있을 때.
git checkout aq
git merge origin/master
마스터에 대한 첫 번째 체크아웃:
git checkout master
모든 변경, 핫픽스 및 커밋을 수행하고 마스터를 푸시합니다.
분기 'aq'로 돌아가서 마스터를 병합합니다.
git checkout aq
git merge master
분기가 마스터와 함께 최신 상태가 됩니다.병합의 좋고 기본적인 예로는 3.2 Git 분기 - 기본 분기 및 병합이 있습니다.
마스터 버그 수정이 다른 커밋에 포함되지 않는다는 보장은 없으므로 단순히 병합할 수 없습니다.도
git checkout aq
git cherry-pick commit1
git cherry-pick commit2
git cherry-pick commit3
...
이러한 커밋이 버그 수정을 나타낸다고 가정합니다.
하지만 이제부터는 버그 수정 사항을 별도의 지점에 보관합니다.당신은 할 수 있을 것입니다.
git merge hotfixes
일반 개발 분기에 모두 롤링하고 싶을 때.
이것(여기서부터)이 제게 효과가 있었습니다.
git checkout aq
git pull origin master
...
git push
견적:
git pull origin master
마스터 분기의 내용을 가져와 분기와 병합하고 병합 커밋을 만듭니다.병합 충돌이 있는 경우 이 단계에서 알림이 표시되며 계속하기 전에 병합 커밋을 해결해야 합니다.새 병합 커밋을 포함하여 로컬 커밋을 원격 서버에 푸시할 준비가 되면,git push
.
병합aq
git checkout master
git pull
git checkout aq
git merge --no-ff master
git push
시나리오:
- 저는 master say branch-1에서 브랜치를 만들어 제 지역으로 가져왔습니다.
- 내 친구가 master say branch-2에서 branch를 만들었습니다.
- 마스터에 대해 몇 가지 코드 변경을 수행했습니다.
- 이제 마스터 브랜치에서 로컬 브랜치로 변경 사항을 가져가고 싶습니다.
해결책
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
"gitstash apply"를 실행한 후 파일에서 충돌을 찾을 수 있습니다.수동으로 수정해야 하며 이제 푸시할 준비가 되었습니다.
중 하나.cherry-pick
된 지점에 .aq
branch 는기병합분또합master
aq
.
쉬운 방법
# 1. Create a new remote branch A base on last master
# 2. Checkout A
# 3. Merge aq to A
저는 이미 변경 사항이 있었고 기본 지점에서 최신 정보를 원했습니다.는 할수없다니습을 할 수 .rebase
,그리고.cherry-pick
시간이 오래 걸렸기 때문에 다음을 수행했습니다.
git fetch origin <base branch name>
git merge FETCH_HEAD
그래서 이 경우에는:
git fetch origin master
git merge FETCH_HEAD
편집:
은 합병하는 입니다.master
안으로aq
세부 정보를 서병기여세정보변나다내열니됩용에서 됩니다.aq
에는 합전병, 변내이용에서 한 내용이 .master
저는 당신이 그것을 원한다고 생각하더라도 그것이 아마도 당신이 원하는 것이 아니라는 것을 깨달았습니다!
정당:
git checkout aq
git merge master
괜찮습니다.
예, 이 단순 병합은 다음과 같은 변경 사항을 보여줍니다.master
~하도록 만들어졌습니다.aq
그 시점에서, 그 반대는 아닙니다; 하지만 괜찮습니다 – 그것이 일어난 일이기 때문입니다!나중에 마침내 지점을 에 병합할 때master
으로 모든 변경 사항이 표시됩니다.master
(이것이 바로 당신이 원하는 것이며, 어쨌든 사람들이 해당 정보를 찾을 것으로 예상하는 커밋입니다.)
확인해 본 결과 아래의 접근 방식도 정확히 동일한 변경 사항을 보여줍니다(모든 변경 사항).aq
사이의 최초 분열 이후aq
그리고.master
위의 일반적인 접근 방식으로, 당신이 마침내 모든 것을 다시 병합할 때.master
그래서 (너무 복잡하고 비표준적인 것을 제외하고) 유일한 진짜 단점은 최근의 변경 사항을 되돌린다면... :-/git reset --hard HEAD~<n>
아래 은 '분기를 해야 합니다(예: 수예수하야다정분는해기손롤로으다니정됩용아백이로래사전그래은것은아버리음고병합통을한과예,▁and수).git reflog
&git reset --hard [sha]
).
[그래서, 제가 이전에 생각했던 것은:]
다음과 같은 문제가 있습니다.
git checkout aq
git merge master
병합 커밋에 표시된 변경 사항(예: Github, Bitbucket 또는 가장 좋아하는 로컬 Git History Viewer에서 현재 또는 나중에 확인하는 경우)은 마스터에서 변경된 사항이기 때문에 원하는 변경 사항이 아닐 수 있습니다.
반면에
git checkout master
git merge aq
q에서 변경된 내용을 보여줍니다. 이는 아마도 사용자가 원하는 내용일 것입니다. (또는 적어도 종종 제가 원하는 내용입니다!)그러나 올바른 변경 사항을 보여주는 병합이 잘못된 분기에 있습니다!
어떻게 대처해야 할까요?!
(위의 두 번째 병합에 따라) q에 대한 변경 사항을 보여주는 병합 커밋으로 끝나는 전체 프로세스는 다음과 같습니다.
git checkout master
git merge aq
git checkout aq
git merge master
git checkout master
git reset --hard HEAD~1
git checkout aq
이것은 q를 master에 병합하고, 동일한 merge를 q에 빠르게 전달하고, master에서 실행 취소하고, 다시 q로 되돌립니다!
저는 제가 무언가를 놓치고 있는 것처럼 느껴집니다. 이것은 분명히 여러분이 원할 것이고 하기 어려운 것처럼 보입니다.
또한 기본 재배치는 동등하지 않습니다.그것은 q에 대한 커밋의 타임스탬프와 아이덴티티를 잃어버립니다. 이것 또한 제가 원하는 것이 아닙니다.
몇 가지 옵션이 있습니다. git rebase master aq
커밋 이름을 유지할 분기로 이동하지만 원격 분기인 경우에는 기본 재배치하지 마십시오.넌 할 수 있다.git merge master aq
당신이 커밋 이름을 유지하는 것에 대해 신경 쓰지 않는다면. 지사인 git cherry-pick <commit hash>
당신의 지점에 대한 커밋.
한 줄을 실행하여 이 작업을 수행할 수도 있습니다.
git merge aq master
이는 다음과 같습니다.
git checkout aq
git merge master
1.git stash - apply this when you have uncommitted changes
2.git checkout master
3.git pull
4.git checkout branch1 (branch1 - Your working branch)
5.git rebase master
6.git stash apply - apply whether you stashed uncommitted changes
병합 충돌은 스테이시를 적용한 후에 발견될 수 있습니다.수동으로 해결
언급URL : https://stackoverflow.com/questions/5340724/get-changes-from-master-into-branch-in-git
'programing' 카테고리의 다른 글
파이썬에서 16진수 문자열을 바이트로 변환하는 방법은 무엇입니까? (0) | 2023.05.12 |
---|---|
Xcode에서 보관 버튼이 회색으로 표시됨 (0) | 2023.05.12 |
Xcode 11에서 Swift Package Dependency를 삭제하는 방법은 무엇입니까? (0) | 2023.05.12 |
이벤트 이미터의 올바른 사용 방법은 무엇입니까? (0) | 2023.05.12 |
데이터베이스의 컬렉션 수 제한 (0) | 2023.05.12 |