Git에서 원격 분기의 기본 재배치
저는 사람들이 복제하고 작업할 수 있는 원격 SVN 저장소를 미러링하기 위해 중간 Git 저장소를 사용하고 있습니다.중간 저장소에는 마스터 분기가 업스트림 SVN에서 매일 밤 재배치되며, 기능 분기에 대해 연구하고 있습니다.예:
remote:
master
local:
master
feature
기능 분기를 원격으로 성공적으로 푸시하여 다음과 같은 결과를 얻을 수 있습니다.
remote:
master
feature
local:
master
feature
그런 다음 원격을 추적하도록 분기를 다시 설정합니다.
remote:
master
feature
local:
master
feature -> origin/feature
그리고 모든 것이 좋습니다.여기서 기능 분기를 원격의 마스터 분기로 재배치하고 싶지만, 로컬 컴퓨터에서 이 작업을 수행하고 싶습니다.다음을 수행할 수 있기를 바랍니다.
git checkout master
git pull
git checkout feature
git rebase master
git push origin feature
원격 기능 분기를 원격 마스터로 최신 상태로 유지합니다.그러나 이 방법은 Git가 다음과 같이 불평하게 합니다.
To <remote>
! [rejected] feature -> feature (non-fast-forward)
error: failed to push some refs to '<remote>'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
git pull
속임수를 쓰지만 병합 커밋을 유발하여 피하고 싶습니다.이 메시지에 다음과 같은 내용이 있는 것이 걱정됩니다.feature -> feature
feature -> origin/feature
하지만 이건 그냥 발표일 수도 있어요
제가 뭔가를 놓쳤나요, 아니면 완전히 잘못된 방향으로 진행되고 있나요?원격 서버에서 기본 재배치를 수행하지 않는 것이 중요한 것은 아니지만, 기본 재배치와의 병합 충돌을 해결하는 것은 훨씬 더 어렵습니다.
이 기능은 한 사람이 사용하는지 아니면 다른 사람이 사용하는지에 따라 달라집니다.
다음과 같은 경우 리베이스 후에 강제로 푸시할 수 있습니다.
git push origin feature -f
그러나 다른 사용자가 작업 중인 경우에는 마스터를 기본값으로 변경하지 않고 병합해야 합니다.
git merge master
git push origin feature
이렇게 하면 공동작업 중인 사용자와 공통 기록을 가질 수 있습니다.
다른 차원에서, 당신은 역병합을 해서는 안 됩니다.기능 분기 기록을 기능에 속하지 않는 다른 커밋으로 오염시켜 해당 분기에 대한 이후 작업을 기본 재배치 여부와 상관없이 더 어렵게 만듭니다.
이것은 branch per feature라는 주제에 대한 저의 기사입니다.
이것은 많은 git 사용자들이 알게 됨으로써 이익을 얻을 수 있는 중요한 개념입니다.gitrebase는 매우 강력한 도구이며 커밋을 함께 스쿼시하거나 커밋을 제거할 수 있습니다.그러나 강력한 도구와 마찬가지로 기본적으로 자신이 무엇을 하고 있는지 알아야 합니다. 그렇지 않으면 무언가가 정말 잘못될 수 있습니다.
로컬에서 작업하고 로컬 지점을 조작할 때 중앙 저장소에 변경사항을 적용하지 않으면 원하는 작업을 수행할 수 있습니다.이것은 여러분이 여러분 자신의 역사를 다시 쓸 수 있지만, 다른 역사는 쓸 수 없다는 것을 의미합니다.로컬 항목만 만지작거리면 다른 리포지토리에 아무런 영향을 미치지 않습니다.
따라서 커밋을 푸시한 후에는 나중에 커밋을 다시 베이스로 지정해서는 안 된다는 것을 기억하는 것이 중요합니다.이 작업이 중요한 이유는 다른 사용자가 사용자의 커밋을 가져와서 코드 기반에 대한 사용자의 기여를 기반으로 작업을 수행할 수 있기 때문입니다. 나중에 사용자가 해당 콘텐츠를 한 곳에서 다른 곳으로 이동하고(기본값으로 변경) 이러한 변경 사항을 적용하면 다른 사용자에게 문제가 발생하여 코드의 기본값을 변경해야 합니다.1000명의 개발자가 있다고 상상해 보세요 :) 불필요한 재작업이 많이 발생할 뿐입니다.
당신이 근거를 바꿨기 때문에feature
새로운 것 위에master
지역의 지현feature
는 의빠전 아다니닙이달의 .origin/feature
더이상.그래서, 제 생각에, 제 생각에는, 이 경우에는, 빨리 감기 검사를 무효로 하는 것이 완벽하게 괜찮다고 생각합니다.git push origin +feature
" " " " 에서 " " " 에서할 수 있습니다.
git config remote.origin.push +refs/heads/feature:refs/heads/feature
다른 사람들이 위에서 작업하는 경우origin/feature
그들은 이 강제적인 업데이트로 인해 방해받을 것입니다.당신은 새로운 것에 병합함으로써 그것을 피할 수 있습니다.master
안으로feature
될 것입니다.결과는 정말로 빨리 진행될 것입니다.
GitBash를 사용하는 것이 익숙하지 않아서 Windows를 사용하는 개발자들을 위해 TorothyGit(새로운 벌을 위한 GUI)를 사용하는 답변을 여기에 추가합니다.
위에서 언급한 많은 사람들과 마찬가지로, "개인" repo 지점에서만 이 작업을 수행하면 아무도 원격 "개발" 또는 "기능" 지점을 로컬 복사본으로 재배치하는 것에 대해 책임을 물을 수 없습니다.일주일치(또는 그 이상)의 작업을 수행하고 푸시한 다른 개발자는 지사 기록(로그)에서 삭제됩니다.
이를 복구할 방법은 없을 것입니다. 물론 공동 개발자의 풀은 지점의 현재 기록이나 최근 커밋 대 지점의 커밋보다 훨씬 앞서 있기 때문에 오류를 일으킬 가능성이 높기 때문에 공동 개발자의 변경 사항은 여전히 남아 있을 것입니다.Git는 분산 버전 시스템이기 때문에 다행입니다.
따라서 원격 분기를 되돌리는 이 기능을 사용할 때 주의해야 합니다.경고합니다. ;)
다른 사용자와 함께 기능 분기를 수행하는 경우, 사용자가 무언가를 범한 경우가 발생할 수 있습니다.이제부터는 변경 내용이 커밋 기록과 충돌하므로 변경 내용을 단순히 푸시할 수 없습니다.당신이 할 수 있는 일은, 전화하는 것입니다.git pull
git fetch + git merge 명령입니다.이렇게 하면 병합에 대한 다른 커밋이 생성됩니다.
나는 당신의 이력에서 불필요한 병합 커밋을 피하고 단순히 전화를 거는 것으로 당신의 깃 커밋 이력을 깨끗하게 유지하려고 노력할 것입니다.git pull --rebase
커밋이 기존 커밋 다음에 배치됩니다.
물론 로컬 분기의 Git 기록만 추가해야 하며, 원격 분기의 Git 기록은 변경해서는 안 됩니다.
다음을 사용하여 검사를 사용하지 않도록 설정할 수 있습니다(자신이 무엇을 하고 있는지 확실히 알고 있는 경우).--force
에 대한 선택권.git push
.
언급URL : https://stackoverflow.com/questions/6199889/rebasing-remote-branches-in-git
'programing' 카테고리의 다른 글
CSS를 사용하여 배경 이미지 중심 맞추기 (0) | 2023.09.03 |
---|---|
파워셸의 스레드는 어떻게 작동합니까? (0) | 2023.09.03 |
클래식 ASP에서 JSON 개체를 반환하는 방법 (0) | 2023.09.03 |
HTTP 페이지에서 AJAX를 통한 HTTPS 요청 (0) | 2023.09.03 |
wcf를 사용하여 SQL 서버에 대한 쿼리를 실행할 때 이상한 오류가 발생함 (0) | 2023.09.03 |