programing

분기의 내용을 새 로컬 분기로 복사하려면 어떻게 해야 합니까?

bestprogram 2023. 5. 7. 12:04

분기의 내용을 새 로컬 분기로 복사하려면 어떻게 해야 합니까?

저는 지역 지사에서 일했고 변경 사항을 원격으로 푸시했습니다.

저는 그 지점의 변경 사항을 되돌려서 다른 작업을 하고 싶지만, 일을 완전히 잃고 싶지는 않습니다.로컬에서 새 브랜치를 만들고 이전 브랜치를 복사한 다음 변경 사항을 되돌리고 이전 브랜치 작업을 계속할 수 있습니다.

이것보다 더 좋은 방법이 있을까요?

git checkout old_branch
git branch new_branch

그러면 "old_branch"와 동일한 상태의 새 분기 "new_branch"가 표시됩니다.

이 명령은 다음과 같이 조합할 수 있습니다.

git checkout -b new_branch old_branch

두 번째 부분 참조(Git 2.23, 2019년 3분기 이후): git switch -c newBranch oldBranch


2)와 함께 "깃 2.15(2017년 4월)",git branch학식이 있는"-c/-C기존 분기를 복사하여 새 분기를 만듭니다.

Aévar Arnförd Bjarmason avar()의 commit c8b2c (2017년 6월 18일)를 참조하십시오.
52d59cc, 5463caa(2017년 6월 18일)를 Sahil Dua()sahildua2305의 커밋을 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- 커밋 3b48045, 2017년 10월 3일)

brancha를 추가합니다.--copy(-c함께 사용할 수 있는 옵션--move(-m)

기능을 합니다.--copy및 은 분와리그및구, 이은동기기사용다니와 합니다.--move(-m 및 한 옵션.reflog 파일이 복사됩니다.

은 예를 새 때를 들어, 은이예를들어새분버복경다유우사용에니합는하로전으기를것목항▁this▁branch다▁to유니▁a▁is합용▁topic▁e.workwork-2work목록에 대한 항목, 분기와 함께 사용되는 모든 추적 정보 및 기타 구성을 보존하는 동시에--move참조를 위해 이미 확인된 다른 가지를 보관합니다.

참고: 분기를 복사할 때 현재 분기에 남아 있습니다.
Junio C Hamano가 설명했듯이, 이 새로운 기능의 초기 구현은 HEAD를 수정하는 것이었는데, 이는 좋지 않았습니다.

지점을 때 새분를생성할때기때할▁when▁a성.B그 지점을 베껴서.A그것은 현재 지점이고, 그것은 또한 업데이트됩니다.HEAD새 가지를 가리킵니다.
" 마이런식만아겁을졌니다들어로으▁"아겁다" 때문에 이렇게 입니다. "git branch -c A B"" 구피에습니다했기백현을한대에▁""다▁piggy▁its니ation▁onbacked"에 구현을 지원했습니다.git branch -m A B",

이것은 일반적인 예상과 일치하지 않습니다.
제가 파란색 의자에 앉아 있는데 누군가가 와서 빨간색으로 다시 칠한다면, 저는 결국 지금 빨간색이 된 의자에 앉는 것을 받아들일 것입니다. (대신 제가 가장 좋아하는 파란색 의자가 더 이상 없기 때문에 저도 서 있어도 괜찮습니다.)

하지만 누군가가 제가 앉아있는 파란 의자를 본떠서 새 빨간 의자를 만든다면, 저는 파란 의자에서 쫓겨나 새 빨간 의자에 앉게 될 것이라고 기대하지 않습니다.


두 번째 부분: git 2.23 (2019년 3분기)을 사용하면 git 브랜치를 사용하거나 오래된 혼동을 일으킬 필요가 없습니다: 당신은 가지고 있습니다.

git switch -c newBranch oldBranch

Git 2.40(Q1223)git branch -c(man)을 사용하면 "가 더 강력하고 작동하지 않는 사례를 감지합니다.

루벤 쥐스토()rjusto의 commit cfbd173(2022년 11월 17일) 참조.
(주니오 C 하마노에 의해 합병 -- -- 963f8d3, 2022년 12월 19일 커밋)

@{-1}을(를) 통해 분기를 자체에 강제 branch복사할 수 없음

사인 오프 바이: 루벤 쥐스토
승인된 사용자:테일러 블라우

52d59cc 이후("brancha를 추가합니다.--copy할 옵션 (-c) 사용션옵--move(-m), 2017-06-18, Git v2.15.0-rc0 -- merge listed in batch #12) 분기를 복사하여 '-c'(복사본) 옵션으로 새 분기를 만들거나 '-C'(강제 복사) 옵션을 사용하여 기존 분기를 덮어쓸 수 있습니다.
3f59481(-M)의 이름 바꾸기 작업에 대해 도입된 것과 동일한 no-op을 따르도록 분기를 자체에 복사하도록 요청할 때 no-op 가능성이 고려됩니다.branchno-op 허용, 2011-11-25, Git v1.7.9-rc0 -- 병합) (분기: no-op "branch -M" 허용<current-branch>HEAD", 2011-11-25).
이를 확인하기 위해 52d59cc에서 사용자가 제공한 지점 이름, 소스(누락된 경우 HEAD) 및 대상을 비교했으며 일치는 이 no-op으로 간주됩니다.

ae5a6c3 이후(checkoutimplement, 2009-01-17, Git v1.6.2-rc0 -- merge)(체크아웃: N번째 마지막 분기에 대한 implement "@{-N}" 바로 가기 이름, 2009-01-17)과 같은 바로 가기를 사용하여 분기를 지정할 수 있습니다.
이를 통해 다음을 사용할 수 있습니다.

$ git checkout -b test
$ git checkout -
$ git branch -C test test  # no-op
$ git branch -C test @{-1} # oops
$ git branch -C @{-1} test # oops

에 바로 중 ▁to▁as▁call▁is▁a▁and▁are▁going▁if▁a▁have▁provided▁one▁branches▁do▁match있▁name수다할니▁of▁not▁the▁the▁using▁to▁compar습▁provided▁to▁using,▁user▁areison▁the▁shortcut▁we▁branch통를▁we▁by▁a▁the화같비교은과다음고git_config_copy_section()일어날 것입니다.
이렇게 하면 해당 분기에 대한 구성이 복제되고, 이 과정에서 두 번째 호출에서 구성 복사본 4개가 생성됩니다.

이 비교를 위해 해석된 분기 이름을 대신 사용합니다.

이름 바꾸기 작업은 영향을 받지 않습니다.

git branch copyOfMyBranch MyBranch

이렇게 하면 잠재적으로 시간이 많이 걸리고 불필요한 분기 체크아웃 작업을 피할 수 있습니다.체크아웃은 "작업 트리"를 수정합니다. 이 트리는 크기가 크거나 파일(예: 이미지 또는 비디오)이 큰 경우 시간이 오래 걸릴 수 있습니다.

더 나은 방법 옵션을 요청한 경우:

분기를 복사할 때 발생할 수 있는 한 가지 잠재적인 결함은 동일한 상위 항목으로 병합하거나 복사본에서 원래 분기에 변경 사항을 다시 적용하려는 경우 Git의 빠른 전달 동작에 주의해야 한다는 것입니다.

예를 들어, '원래' 분기의 일부 커밋을 되돌렸으나 이제 원래로 되돌린 변경 사항을 다시 도입하려는 경우, Git는 해당 커밋이 이미 존재한다고 보기 때문에 복사된 브랜치를 상위 항목에 단순히 병합할 수 없습니다(나중에 되돌린 경우에도 마찬가지임).

아마도요.cherry-pick [commit-range]이런 맥락에서 작동할 것이고 기존 해시에 신경 쓰지 않습니다.

제 생각에는 이렇게 하는 것이 좋을 것 같습니다.

  1. 에서 새 HEAD에서 새 지점 생성git branch [archive-branch-name]
  2. 에서 롤백할 .git log
  3. 려달을 합니다.git reset --head [commit-hash-from-#2]
  4. git push -f origin

'원래' 분기에서 시작하고 단계 중에는 분기를 변경하지 않습니다.

또는 단순히 분기를 완전히 없애고 되돌릴 커밋을 되돌리고 필요한 경우 나중에 되돌릴 수 있습니다.

저는 그 지점의 변경 사항을 되돌려서 다른 작업을 하고 싶지만, 일을 완전히 잃고 싶지는 않습니다.

나의 이 지점에 입니다.b원하는 항목:

  • copy-b에 참고할 수
  • 해서 속작업계에 작업하기.b당신이 가지고 있는 것을 알고 있습니다.copy-b에 참고할 수

여기서 암시하는 것처럼 보이는 것은copy-b그냥 내버려둘 겁니다. 참고용일 뿐입니다

그래서 당신은 무엇을 위해 나뭇가지가 필요합니까?분기는 이동할 수 있어야 하지만 "참조용" 참조는 이동할 수 없습니다.리필로그가 필요합니까?기본적으로 90일 후에 만료되므로 장기적으로는 문제가 되지 않습니다.분기 설명이나 다른 구성을 원하십니까?

참조 지점만 복사하려면 경량 태그가 필요합니다.

git checkout b
git tag archive/b

는사용을 사용합니다.git switch:

git switch b
git tag archive/b

버전이 여러 개인 경우:

git tag archive/b-v1

이 계획은 이메일을 통해 "패치 시리즈"를 발송하고 여러 라운드를 통해 검토되는 경우에 사용할 수 있습니다.

이 계획의 명백한 이점은 다음과 같습니다.

  1. (git-clone (1)을 사용하여 더 쉬울 수 .--tags또는--no-tags)
  2. 실수로 체크아웃하고 작업을 시작하지는 않을 것입니다(글쎄요, 그렇게 하면 "머리 분리" 경고/메모가 표시됩니다).
  3. 분기는 기본적으로 git-pack-refs(1)를 사용하여 압축되지 않지만 태그는 다음과 같습니다(하지만 이 문제가 발생하려면 정말로 전용 아카이브여야 할 것 같습니다.).

복사할 지점을 체크아웃합니다. 일단 이 그 나면: 분기실행시다면같수이행다니됩과음작하을▁then다:니수▁run됩.git checkout -b new_branch_name

언급URL : https://stackoverflow.com/questions/14998923/how-can-i-copy-the-content-of-a-branch-to-a-new-local-branch