깃 스위치와 깃 체크아웃의 차이점은 무엇입니까?
Git 2.23은 새로운 명령을 도입했습니다.git switch
문서를 읽은 후, 그것은 거의 같은 것처럼 보입니다.git checkout <branchname>
누가 차이점이나 사용 사례를 설명할 수 있습니까?
"git switch" 및 "git restore"라는 두 가지 새로운 명령어가 도입되어 "지점 체크아웃을 통해 기록을 진전시키는 작업"과 "인덱스에서 경로를 체크아웃하고 현재 기록을 진전시키는 작업을 수행하는 트리 형식"을 구분합니다.
음, 당신이 링크한 문서에 따르면, 그것의 유일한 목적은 두 가지 다른 용도를 나누고 명확히 하는 것입니다.git checkout
:
git switch
분기를 하는 데 할 수 .git checkout <branchname>
일다git restore
리비전으로 하는 데 할 수 .git checkout -- <path_to_file>
일다
사람들은 이러한 다양한 사용 방법에 대해 혼란스러워 합니다.git checkout
에 관한 많은 질문에서 알 수 있듯이git checkout
여기 스택 오버플로에 있습니다.Git 개발자들은 이것을 고려한 것 같습니다.
git checkout
스위스 군용 나이프의 일종으로 관련이 없는 몇 가지 용도가 있습니다.
을 수정할 수 .git checkout <filename>
입니다.지점에 .같은 지점에 남아 있습니다.
git checkout <branchname>
(참고한 대로) 분기를 전환합니다.
완전히 다른 두 가지 목적으로, 파일 이름과 분기 이름이 유사할 경우 혼동을 일으킬 수 있습니다.
두 개의 명령어로 사용하는 것이 더 명확합니다.
그switch
명령은 실제로와 같은 일을 합니다.checkout
분기를 전환하는 용도로만 사용할 수 있습니다. 와히달과 다르게.checkout
파일을 할 수 . " 작트파수없다습니복"를 하여 작업을 합니다. 대신 작업 트리 파일을 사용합니다.restore
와함도입명어령된께와 함께 switch
.
상세설명
했듯이, 2.23.0 릴리스 노트,switch
그리고.restore
명령어들이 분할하기 위해 도입되었습니다.checkout
명령을 두 부분으로 나눕니다.
- "역사를 발전시키기 위해 지점을 확인
- "현재 기록을 진행하기 위해 인덱스 및/또는 트리 형식의 경로 체크아웃"
다른말하면로,하면,checkout
두 가지 다른 작업을 수행합니다. 이 릴리스에서는 이러한 각 작업을 자체 집중 명령으로 분할했습니다.
의 이 두 가지 checkout
설명서의 요약 설명에서 확인할 수 있습니다.
git-checkout - 분기 전환 또는 작업 트리 파일 복원
추가된 커밋switch
새합니다. commit 메시새는명령이어의설유명다니합를령어명서에지▁command.
"git checkout"은 너무 많은 것을 하는 많은 사용자들에게 혼란의 원인입니다. (때로는 오래된 타이머를 물어뜯기도 합니다.)이 문제를 해결하기 위해 명령은 스위치 및 복원이라는 두 가지 새로운 명령으로 분할됩니다.오래된 "git checkout" 명령은 여전히 존재하며 모든(또는 대부분의 사용자)이 질릴 때까지 계속됩니다.
이를 통해 새로운 명령어가 도입된 것은 하나의 다목적 명령어가 아닌 두 개의 초점 명령어를 사용하여 혼란을 줄이기 위한 것임이 분명합니다.
2021년 12월 현재에도 새로운 명령어는 실험 switch
명령어(, )로 나열되어 있습니다.
이 명령은 실험적입니다.행동이 바뀔 수 있습니다.
명령 비교
어디에서도 명령어를 완전히 비교할 수 있는 방법을 수 없습니다.문서를 읽어보니, 이것은 상당히 완전한 비교가 되어야 한다고 생각합니다.
이전 명령 | 새 명령 |
---|---|
git checkout <branch> |
git switch <branch> |
git checkout |
없음(사용)git status ) |
git checkout -b <new_branch> [<start_point>] |
git switch -c <new-branch> [<start-point>] |
git checkout -B <new_branch> [<start_point>] |
git switch -C <new-branch> [<start-point>] |
git checkout --orphan <new_branch> |
git switch --orphan <new-branch> |
git checkout --orphan <new_branch> <start_point> |
없음(사용)git switch <start-point> 그리고나서git switch --orphan <new-branch> ) |
git checkout [--detach] <commit> |
git switch --detach <commit> |
git checkout --detach [<branch>] |
git switch --detach [<branch>] |
git checkout [--] <pathspec>… |
git restore [--] <pathspec>… |
git checkout --pathspec-from-file=<file> |
git restore --pathspec-from-file=<file> |
git checkout <tree-ish> [--] <pathspec>… |
git restore -s <tree> [--] <pathspec>… |
git checkout <tree-ish> --pathspec-from-file=<file> |
git restore -s <tree> --pathspec-from-file=<file> |
git checkout -p [<tree-ish>] [--] [<pathspec>…] |
git restore -p [-s <tree>] [--] [<pathspec>…] |
이볼 수 이전의 은 이전 이름 비볼수있서이듯이다이을이명변있름니, " 이사일은전령용수습부로환할", "새전의령으명대여체")을하여 새 할 수 .checkout
으로 ( ) 새것으로▁(로것 ( )switch
,restore
), 반면에 다른 것들은 추가적인 조정이 필요합니다.주목할 만한 변경 사항은 다음과 같습니다.
- 그
-b
/-B
새이 전하기환분새옵생성으로 됩니다.-c
/-C
은 또한 긴 변형을 .--create
/--force-create
이전에는 단일 문자 옵션 버전만 있었습니다. --detach
(또는)-d
이전에는 커밋에 대해 선택 사항이었지만 분기에 대해서는 필수였던 분리된 헤드로 전환할 때 )이 이제 항상 필요합니다.- 복을위소이에제다공니됩에 됩니다.
-s
(또는)--source
인라인 인수가 아닌 옵션입니다. - 을 사용한
--force
병합되지 않은 항목이 있는 경우 무시하지 않고 실패합니다.--force
이 이도로변습니다었경되름다니로 변경되었습니다.--discard-changes
,와 함께--force
가명으로 보관됨
switch
몇 가지 제한 사항이 있습니다. 현재는 모든 커밋에서 로 전환할 수 있습니다.<branch name>
그러나 에서 전환하는 것은 불가능합니다. <branch name>
분리된 HEAD 상태의 특정 커밋에 대해 설명합니다.그래서 당신은 사용해야 합니다.git checkout 5efb
커밋에 입니다). (5efb는 임의의 커밋에 대한 해시 참조의 예입니다.)
tl;dr: 사용 시checkout
와 함께--force
병합 중에 분기를 전환할 수 있습니다.당신은 이것을 할 수 없습니다.switch
.
세부사항:
다른 대답들은 이미 분열의 동기를 다루었습니다.checkout
안으로switch
그리고.restore
구문적인 사용법 차이가 존재한다는 사실뿐만 아니라. (예를 들어, 를 사용할 수 있습니다.)checkout
예:origin/main
접적으와 함께, 그나함께.switch
또한명로지합니다야정해으를 .--detach
옵션).하지만 적어도 한 가지 중요한 기능적 차이를 발견했습니다.
git switch -f
다음과 같이 문서화되어 있습니다.
인덱스 또는 작업 트리가 다음과 다른 경우에도 계속 진행합니다.
HEAD
인덱스와 작업 트리가 모두 전환 대상과 일치하도록 복원됩니다.한다면--recurse-submodules
를 지정하면 전환 대상과 일치하도록 하위 모듈 컨텐츠도 복원됩니다.이것은 로컬 변경사항을 버리는 데 사용됩니다.
마찬가지로 그고비슷게하리,게,git checkout -f
는 다음과 같이 문서화되어 있습니다(마지막 문장에 따라 다름).
시합니다.
HEAD
추적되지 않은 파일이 있더라도 말입니다.로컬 변경사항과 추적되지 않은 파일 또는 디렉토리를 삭제하는 데 사용됩니다.인덱스에서 경로를 체크아웃할 때 병합되지 않은 항목에 대해 실패하지 마십시오. 대신 병합되지 않은 항목은 무시됩니다.
마지막 문장이 다른 뜻에 적용되는 것 같습니다.checkout
즉, 그restore
하지만할 때는 다음과 같습니다.git checkout -f
그 순간 해결되지 않은 충돌이 있더라도 성공할 수 있습니다. git switch -f
충돌 없이 현재 병합 중인 경우에는 다음 오류 메시지가 표시되므로 에서는 전혀 작동하지 않습니다.
치명적: 병합하는 동안 분기를 전환할 수 없습니다.
참고: 이 차이는 Git 버전 2.37.1을 사용하여 테스트되었습니다.
git switch
~=git checkout -b [branch]
.git checkout [branch]
분리된 HEAD를 제공합니다.
여기 깃 설명서의 발췌본이 있습니다.man git-switch
.
시놉시스
git switch [<options>] [--no-guess] <branch> git switch [<options>] --detach [<start-point>] git switch [<options>] (-c|-C) <new-branch> [<start-point>] git switch [<options>] --orphan <new-branch>
묘사
지정된 분기로 전환합니다.작업 트리와 인덱스가 분기와 일치하도록 업데이트됩니다.모든 새 커밋이 이 분기 끝에 추가됩니다.
선택적으로 동일한 이름의 원격 분기에서 자동으로 , 를 사용하여 새 분기를 만들 수 있습니다( 참조).
--guess
)로 작업 에서 분리합니다.--detach
전환과 함께.가 필요하지 않습니다(즉, ▁(▁to▁diffe▁comparedrences▁switching▁tree).
HEAD
)에서 한 로컬 변경 이 손실되는 이 중단됩니다 그러나 작업이 로컬 변경 사항의 손실로 이어질 경우 작업이 중단됩니다. 단, 다음과 같이 달리 지시되지 않는 한--discard-changes
또는--merge
.이 명령은 실험적입니다.행동이 바뀔 수 있습니다.
언급URL : https://stackoverflow.com/questions/57265785/whats-the-difference-between-git-switch-and-git-checkout-branch
'prosource' 카테고리의 다른 글
Xcode 제품 -> 보관 사용 안 함 (0) | 2023.05.23 |
---|---|
git checkout --track origin/branch와 git checkout -branch origin/branch의 차이 (0) | 2023.05.18 |
의 일반적인 프로그래밍 오류입니다.예외를 처리할 때 네트? (0) | 2023.05.18 |
클래스의 항목 순서:필드, 특성, 생성자, 메서드 (0) | 2023.05.18 |
Eclipse는 중단점에서 멈추지 않습니다. (0) | 2023.05.18 |