마스터에서 Git 분기 업데이트
저는 4개의 지점(마스터, b1, b2, b3)을 가지고 있습니다.b1-b3를 작업한 후, 저는 다른 모든 지점에 있어야 하는 지점 마스터에서 변경할 사항이 있다는 것을 깨달았습니다.는 나는필것바다니꿨에서 .master
내 문제가 . 여기 내 문제가 있습니다.
다른 모든 분기를 업데이트하려면 어떻게 해야 합니까?master
지점 코드?
두 가지 옵션이 있습니다.
첫 번째는 병합이지만 병합을 위한 추가 커밋이 생성됩니다.
각 분기 체크아웃:
git checkout b1
그런 다음 병합:
git merge origin/master
그런 다음 다음을 누릅니다.
git push origin b1
또는 기본 재배치를 수행할 수 있습니다.
git fetch
git rebase origin/master
기본적으로 두 가지 옵션이 있습니다.
병합합니다.이는 실제로 매우 간단하고 완벽한 로컬 작업입니다.
git checkout b1 git merge master # repeat for b2 and b3
이것은 발생한 그대로의 역사를 남깁니다.마스터에서 분기하여 모든 분기를 변경하고 마지막으로 마스터에서 변경한 내용을 세 개의 분기에 모두 통합했습니다.
git
이 상황을 매우 잘 처리할 수 있습니다. 모든 방향에서 동시에 발생하는 병합을 위해 설계되었습니다.모든 스레드를 올바르게 결합할 수 있다고 신뢰할 수 있습니다.지점인지 아닌지는 전혀 신경 쓰지 않습니다.b1
합master
또는master
합b1
병합 커밋은 git에 대해 모두 동일하게 보입니다.유일한 차이점은 어떤 분기가 이 병합 커밋을 가리키는지입니다.너는 베이스를.SVN 또는 유사한 배경을 가진 사람들은 이것이 더 직관적이라고 생각합니다.명령은 병합 사례와 유사합니다.
git checkout b1 git rebase master # repeat for b2 and b3
사람들은 이 접근 방식이 모든 지점에서 선형 이력을 유지하기 때문에 좋아합니다.하지만 이 선형 역사는 거짓말이고, 당신은 그것이 사실이라는 것을 알아야 합니다.다음 커밋 그래프를 고려합니다.
A --- B --- C --- D <-- master \ \-- E --- F --- G <-- b1
병합하면 실제 기록이 생성됩니다.
A --- B --- C --- D <-- master \ \ \-- E --- F --- G +-- H <-- b1
그러나 기본 재배치는 다음과 같은 기록을 제공합니다.
A --- B --- C --- D <-- master \ \-- E' --- F' --- G' <-- b1
이 점은범,그죄들을 범한다는 입니다.
E'
,F'
,그리고.G'
실제로 존재하지도 않았고, 테스트된 적도 없을 것입니다.그들은 심지어 컴파일도 하지 않을 수도 있습니다.특히 변경 사항이 있을 때 기본값을 통해 비논리적인 커밋을 생성하는 것은 실제로 매우 쉽습니다.master
의 발전에 중요합니다.b1
.세 중에 커밋이 있는지 수 .
E
,F
,그리고.G
실제로 회귀 분석을 도입하여 가치를 감소시켰습니다.git bisect
.저는 당신이 사용하지 말아야 한다는 것을 말하는 것이 아닙니다.
git rebase
그것은 쓸모가 있습니다.하지만 여러분이 그것을 사용할 때마다, 여러분은 여러분이 역사에 대해 거짓말을 하고 있다는 사실을 인식할 필요가 있습니다.그리고 당신은 최소한 새로운 커밋을 컴파일 테스트해야 합니다.
git rebase master
이것을 하는 적절한 방법입니다.병합은 병합에 대한 커밋이 생성되는 반면, 재배치는 생성되지 않습니다.
분기 작업을 계속하거나 작업 중에 다른 분기에서 많은 작업이 발생한 경우에는 분기를 마스터 기반으로 다시 설정하는 것이 가장 좋습니다.이것은 역사를 깔끔하게 유지하고 따라가기 쉽게 만듭니다.
git checkout master
git pull
git checkout local_branch_name
git rebase master
git push --force # force required if you've already pushed
주의:
- 다른 사용자와 공동 작업한 분기를 기본값으로 변경하지 마십시오.
- 항상 마스터가 아닐 수도 있는 병합할 분기를 기준으로 다시 설정해야 합니다.
http://git-scm.com/book/ch3-6.html, 에 리베이스에 대한 장이 있고 웹에 있는 다른 많은 자원들이 있습니다.
@cmmaster가 가장 정교한 답변을 했습니다.간단히 말하면:
git checkout master #
git pull # update local master from remote master
git checkout <your_branch>
git merge master # solve merge conflicts if you have`
분기 기록을 다시 작성하지 말고 나중에 참조할 수 있도록 실제 상태로 유지해야 합니다.마스터에 병합하는 동안 하나의 추가 커밋이 생성되지만 이는 저렴합니다.커밋에는 비용이 들지 않습니다.
마스터 분기 복사본으로 (백업)과 같은 다른 분기를 업데이트합니다.두 가지 방법 중 하나를 수행할 수 있습니다(기본 또는 병합)...
- 기본값을 변경합니다(백업 분기에 추가 커밋하지 마십시오.
분기를 병합합니다. 백업 분기에 자동으로 추가 커밋이 수행됩니다.
참고: 기본 재배치는 새 기본 설정(새 복사본)에 불과합니다.
git checkout backup git merge master git push
(백업2 등과 같은 다른 분기가 있는 경우 반복)
git checkout backup git rebase master git push
(백업2 등과 같은 다른 분기가 있는 경우 반복)
git cherry-pick을 사용하여 병합하거나 분기에 개별 커밋을 적용할 수 있습니다.
마스터에서 분기를 업데이트하는 방법:
git checkout master
git pull
git checkout your_branch
git merge master
- git 체크아웃 마스터
- 기트풀
- git checkout 기능_git
- Gitrebase 마스터
- git 푸시-f
마스터를 상대로 리베이스를 한 후에 강제로 밀어야 합니다.
두 가지 접근 방식이 있습니다.
마스터 분기를 분기에 병합하려고 합니다.
- git checkout master - git pull - git checkout your-feature-branch - git merge master //resolve conflicts if any and commit - git push
2: 메인 위에 변경 내용을 다시 배치하려는 경우.
git checkout master #Switch to main branch
git pull #Take latest
git checkout your-feature-branch #Switch to story branch
git pull --ff-only # Ensure branch is up to date
git rebase -i origin master #Interactively rebase your commits on top of master. So your changes are on top of latest commits in main.
git rebase --continue #Resolve conflicts and rebase --continue to continue with next commits
git push -f origin your-feature-branch # As you have rewritten the commit history, you have to **force push** the commits
놀랍게도 제가 사용하는 가장 일반적인 방법은 언급되지 않았습니다. Based 할 때 볼 수 있습니다.main
지속적으로 업데이트되고 이로부터 분기에서 작업 중입니다.
main
지점에 .b1
그렇지 않다면, 당신은 필요할 것입니다.git fetch
.
업데이트할 내용b1
의 변경에 따라main
다음을 사용하여 코드를 간단히 풀 수 있습니다.
git pull origin main
사용자 또는 다른 사용자가 다른 지점에 접근하여 업데이트를 원할 때도 마찬가지로 다른 지점에서 동일한 작업을 수행해야 합니다.
마지막 커밋으로 되돌리고 로그 기록도 제거하려는 경우
아래 명령을 사용하여 커밋된 이전 커밋으로 이동하려고 합니다.SHA - 71e2e57458bde883a37b332035f784c6653ec509 이 커밋을 가리키면 커밋 후 로그 메시지가 표시되지 않으며 이후 모든 기록이 지워집니다.
git push origin +71e2e57458bde883a37b332035f784c6653ec509^:master
현재 분기를 마스터의 최신 변경 사항과 병합하기 위해 사용하기 쉽고 일관된 솔루션을 찾는 모든 사용자에게 다음과 같은 작업을 수행할 수 있습니다.
셸 구성에 다음을 추가할 수 있습니다.
alias merge='currentBranch=$(git rev-parse --abbrev-ref HEAD) && git checkout master && git pull && git checkout $currentBranch && git merge master'
이 별칭은 다음 5개 명령과 함께 작동합니다.
currentBranch=$(git rev-parse --abbrev-ref HEAD) # gets your current branch(needed for point 4)
git checkout master # checks out master
git pull # gets latest changes from master
git checkout $currentBranch # checks out the in point 1 saved branch
git merge master # merges your current branch with master
별칭을 추가한 후에는 "합병" 명령을 사용하여 현재 작업 중인 분기를 "업데이트"할 수 있습니다.
위의 대부분의 답변은 유사한 솔루션을 제공합니다.git merge
또는git rebase
기트 초보자로서, 저는 아틀라스에 대한 이 기사가 매우 명확하고 이 두 가지 명령을 설명하는 데 도움이 된다는 것을 알게 되었습니다.병합 대. 리베이스
이 문제에 대한 두 가지 옵션이 있습니다.
기트베이스
git merge
병합의 경우 위의 두 가지 경우에만 차이가 있으며, 기록에서 추가 커밋이 있을 것입니다.
git 체크아웃 지점(b1,b2,b3)
gitrebase 오리진/마스터(gitrebase를 수행하여 로컬에서 충돌이 해결되는 경우 --continue)
기트 푸쉬
또는 git merge 옵션이 유사한 패션임
git checkout "your_https"(b1,b2,b3)
git 병합 마스터
기트 푸쉬
언급URL : https://stackoverflow.com/questions/3876977/update-git-branches-from-master
'programing' 카테고리의 다른 글
"Waiting for Debugger" 메시지를 해결하는 방법은 무엇입니까? (0) | 2023.04.27 |
---|---|
지정한 CGI 응용 프로그램에 오류가 발생하여 서버가 프로세스를 종료했습니다. (0) | 2023.04.27 |
UITableViewCell, 스와이프 시 삭제 버튼 표시 (0) | 2023.04.27 |
UI 도구 모음에 왼쪽 화살표 단추(예: UI 탐색 모음의 "뒤로" 스타일) 만들기 (0) | 2023.04.27 |
그리드의 공유 크기 그룹 및 * 크기 조정 (0) | 2023.04.27 |