sourcetip

동일한 이름의 파일이 있는 경우 분기 변경

fileupload 2023. 8. 11. 22:31
반응형

동일한 이름의 파일이 있는 경우 분기 변경

gitrepo에 xyz라는 파일이 있습니다.공교롭게도 xyz라는 지점도 가지고 있습니다.현재 마스터 상태인데 xyz 지점으로 체크아웃하려고 합니다.사용할 명령은 간단합니다.

$ git checkout xyz

하지만 이렇게 하면 파일을 확인할 수 있습니다.xyz현 단장에게지점을 지점으로 변경하려면 어떻게 해야 합니까?xyz?

commit a47faf(git 1.8.4.3+)에서 알 수 있듯이 다음을 시도할 수도 있습니다.

git checkout xyz --

(참고: 2019년 1분기 Git 2.21에서 오류 메시지가 더 명확해질 것입니다.)

그렇게 되면 분명히 알 수 있을 것입니다.xyzcommit이고, 뒤의 은 commit입니다.--경로여야 합니다(여기서는 경로가 제공되지 않음).이중 하이픈 컨벤션에 대해 자세히 알아보십시오.

만약 당신이 '를 빼고 시도한다면,--"git checkout이 새 추적 분기를 만들지 않는 이유는 무엇입니까?"에 나와 있는 것처럼 작동하거나 작동하지 않을 수 있습니다.":

git checkout name실행:실행:

  • 로컬 분기 또는 명시적 원격 분기인 경우 전환합니다.
  • 추적된 경로인 경우 재설정합니다.
  • 원격 분기인 경우 추적 분기를 생성하고 전환합니다.

그리고 그것의 행동이 항상 같지는 않습니다. '러므로그'는--명확한 모호성을 제공하기 위해.


2019년 8월 업데이트, Git 2.23+

git checkout 너무 혼란스럽고 다음으로 대체됨:

또한 "내이 왜 분리된 HEAD 상태에 들어갔을까?"에서 설명했듯이 더 이상 예상치 못한 분리된 HEAD는 없습니다.

VonC의 솔루션이 작동하는 동안 구문을 절대 기억할 수 없기 때문에 일반적으로 더 낮은 기술의 솔루션을 사용합니다.

$ (cd somedir && git checkout my-branch)

또는 하위 디렉터리가 없는 경우:

$ (cd .git && git -C .. checkout my-branch)

기억하기 쉽고 효과도 있습니다 ;-)

Git 2.21(2019년 1분기, 4년 이상 후)은 오류 메시지를 명확히 하고 제안을 할 것입니다.

"git checkout frotz(frotz처음에 제안한 더블 대시 없이) "를 수정경로로 동시에 해석할 수 없도록 함으로써 모호성을 피합니다.

은 고유 지점인 '원격 추적 지점할 수 되었습니다.frotz원격에서, 로컬 분기를 만들기 위해 수영을 할 때'를 생성할 때frotz 원격으로frotz

참고: "dwim"(아래에 사용됨)은 컴퓨터 시스템이 사용자가 의도하는 바를 예측하려고 할 때 사용자의 명시적이지만 잠재적으로 잘못된 입력을 맹목적으로 실행하는 것이 아니라 사소한 오류를 자동으로 수정하는 "dwim"입니다.

Nguyễn Thai Ngọc Duy()pclouds의 commit be4908f(2018년 11월 13일)를 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- 커밋 8d7f9db, 2019년 1월 4일)

checkout 및 dwim을 하게 지정합니다.

commit 70c9ac2에서 체크아웃 dwim을 추가하면 특정 조건이 충족될 때만 dwim으로 제한되고 그렇지 않을 경우 기본 체크아웃 동작으로 돌아갑니다.

뒤로 넘어지는 것은 혼란스러울 수 있습니다.

돌아야 할 조건 중 하나.

git checkout frotz

로.

git checkout -b frotz origin/frotz

은 것은입니다.frotz파일로 존재해서는 안 됩니다.

" 지만사용기가대되면게하하자▁"▁""를 ,git checkout frotz 기를작니다합분성다▁the▁"▁branch"를 만듭니다.frotz"그고우라연히이있파습다니일이의름는리▁"▁named▁file다그있라▁and니▁happens"라는 파일이 .frotzgit이 조용히 frotz되돌리고 있습니다." 파일 내용이 도움이 되지 않습니다.
이것은 Git 메일링 목록에 보고되며 다른 곳에서는 "Git is bad"의 예로 사용되기도 합니다.

우리는 보통 옳은 일을 하려고 노력하지만, "옳은 일"이 여러 개 있을 때는 사용자의 결정에 맡기는 것이 가장 좋습니다.

이 경우를 확인하고 사용자에게 명확한 설명을 요청합니다.

  • "git checkout -- foo를 합니다.
  • "git checkout foo --하고 분기 dwim을사분수행합니다를기여하용"를 합니다.foo" 6

않는 는 dwim을 합니다.--no-guess이런 에는 "어쩔 수가 없어요 때문에 왜냐하면 "git checkout --no-guess foo --그냥 실패할 것입니다.
하지만 스크립트에 사용될 수 있습니다.

현재 man 페이지에는 다음이 포함됩니다.

--no-guess:

같은 이름의 원격 추적 분기가 있는 경우 분기를 만들지 마십시오.


Git 2.26(2020년 1분기) 이전에는 git checkout X""가 다음과 같은 경우에 올바르게 실패하지 않았습니다.X로컬 분기가 아니지만이상의 원격 동기화된 분기 이름을 지정할 수 있습니다(즉, 해당 로컬 분기를 만드는 시작점으로 흐림). 이는 수정되었습니다.

commit fa74180, 2957709 (2019년 12월 30일)SyntevoAlex by 알렉산드르 밀로슬라프스키() 참조.
(Junio C Hamano에 의해 합병됨 -- -- commit0e70cd, 2020년 2월 5일)

checkout모호한 추적 분기의 파일을 되돌리지 않음

사인 오프 바이: 알렉산드르 밀로슬라프스키

이해하기 쉽도록 기존의 양호한 시나리오는 다음과 같습니다.

  1. 파일 없음'foo로컬 분기 없음'foo단일 원격 지점 'foo'
  2. git checkout foo 지점을 합니다.foo위의 commit 70c9ac2참조하십시오. 여기서 설명합니다.

그리고.

  1. 파일 있음'foo로컬 분기 없음'foo단일 원격 지점 'foo'
  2. git checkout foo불평할 것입니다. 위의 커밋 be4908f를 참조하십시오.

이 패치는 다음 시나리오를 방지합니다.

  1. 파일 있음'foo로컬 분기 없음'foo 여러 원격 지점'foo'
  2. git checkout foo성공적으로...파일의 .foo!

다른 크게 못할 수 .", " 다 원 추 즉 동 며 변 을 가 하 격 면 기 른 놀 야 해 일 최 수 있 껏 사 이 못 경 눈 습 니 다 가 지 할 채 자 치 용 우 며 의 악 이 는 라 작 운 이 경 갑 되 자 기 크 게 ▁that 즉 ▁suddenly ▁at , ▁by
위의 commit be4908f를 참조하십시오. 이것은 실제 세계에 불만을 제기합니다.

내가 이해하기로는 위의 commit be4908f에 수정을 가했고(여기서 논의됨), 여러 원격의 경우를 간과했으며, 파일을 되돌리는 전체 동작은 결코 의도되지 않았습니다.

  • 의 commit 70c9ac2는 예상치 못한 동작을 유발합니다.
    이전에는 not-a-ref에서 pathspec으로의 폴백이 있었습니다.이것은 합리적인 예비군입니다.
    그 다음에는 모호한 원격에서 경로 지정으로 폴백이 있습니다.
    저는 그것이 복사&붙여넣기의 실수였다는 것을 이해합니다.

  • 여기설명한 "여러 원격으로 체크아웃수 없습니다"의 ad8d510을 커밋합니다. 예상치 못한 동작을 알아차렸지만 패치 시리즈의 목표가 다른 것에 초점을 맞추고 있었기 때문에 금지하는 대신 세미 문서화를 선택했습니다.

  • 의 추가 사항들 위의 be4908f를 커밋합니다.die()분기와 파일 사이에 모호성이 있는 경우.
    여러 개의 추적 지점의 경우는 겉보기에 간과되고 있습니다.

새로운 동작: 로컬 지점과 여러 원격 후보자가 없는 경우 파일이 존재하는지 여부에 관계없이 파일을 되돌리려 하지 않습니다(예상치 못한 경우 방지)(오류 메시지 개선).


Git 2.30(git checkout(man)2021년 1분기)을 사용하여 "구성 변수를 사용하고 활성화/비활성화하는 방법을 배웠습니다.--[no-]guess옵션을 선택합니다.

커밋 64f1f58(2020년 10월 7일) 및 커밋 ef09e7d(2020년 10월 6일)를 참조하십시오.Denton-L
(주니오 C 하마노에 의해 합병 -- -- 0e41cfa 커밋, 2020년 10월 27일)

존경하는 법을 checkout배우다checkout.guess

사인 오프 바이: 덴튼 리우

현재 git checkout/switch은 것은입니다.--guess는 현재 기본적으로 활성화되어 있습니다.
그러나 일부 사용자는 이 작업이 자동으로 수행되지 않기를 원할 수 있습니다.
로 사자가록강대신는제하를 지정하는 --no-guess으로 이 줍니다.checkout.guess사용자에게 기본 동작을 설정할 수 있는 옵션을 제공하는 구성 변수입니다.

완료 스크립트에 새 구성 변수를 인식하도록 가르치고 False로 설정된 경우 DWIM 로직을 비활성화합니다.

git config이제 관리 페이지에 다음 항목이 포함됩니다.

checkout.guess

제다니합공값의 합니다.--guess또는--no-guess할 수 있습니다.git checkout그리고.git switch및 참조.

git checkout이제 관리 페이지에 다음 항목이 포함됩니다.

--guess기본 동작입니다. 사용--no-guess사용하지 않도록 설정합니다.

은 기동은 설수있다니습할을 할 수 .checkout.guess구성 변수입니다.

git switch이제 관리 페이지에 다음 항목이 포함됩니다.

은 기동은 설수있다니습할을 할 수 .checkout.guess구성 변수입니다.

틀려요.그것은 xyz 지점을 체크아웃 할 것입니다.

인 파을체하려명사합니다야용해를 사용해야 합니다.git checkout -- xyz동일한 이름의 분기가 없는 경우 파일에 대한 바로 가기만 허용합니다.

» git checkout --help상세한 것은

언급URL : https://stackoverflow.com/questions/25322335/git-change-branch-when-file-of-same-name-is-present

반응형