“git checkout <filename>”과“git checkout--<filename>”의 차이점


답변:


214

특별한 "옵션" --은 "이 시점 이후의 모든 인수를 파일 이름으로 취급합니다." 라는 의미입니다. 이것은 Git 전용이 아니며 일반적인 Unix 명령 줄 규칙입니다. 일반적으로 인수가 옵션이 아닌 파일 이름임을 명확히하기 위해 사용합니다 . 예 :

rm -f      # does nothing
rm -- -f   # deletes a file named "-f"

git checkout1 은 또한 --후속 인수가 원하는 커밋을 지정하는 선택적 "treeish"매개 변수가 아님을 의미합니다.

그래서 이런 맥락에서이다 안전 사용 --항상,하지만 당신은 필요 당신이 되돌리려 파일로 시작하는 이름이있는 경우를 -, 또는 분기의 이름과 동일합니다. 분기 / 파일 명확성에 대한 몇 가지 예 :

git checkout README     # would normally discard uncommitted changes
                        # to the _file_ "README"

git checkout master     # would normally switch the working copy to
                        # the _branch_ "master"

git checkout -- master  # discard uncommitted changes to the _file_ "master"

및 옵션 / 파일 명확성 :

git checkout -p -- README  # interactively discard uncommitted changes
                           # to the file "README"

git checkout -- -p README  # unconditionally discard all uncommitted
                           # changes to the files "-p" and "README"

이름이로 시작 하는 브랜치 가있는 경우 어떻게하는지 잘 모르겠습니다 -. 아마도 처음에는 그렇게하지 마십시오.


이 모드에서 1 ; "체크 아웃"은 다른 여러 가지 작업도 수행 할 수 있습니다. 나는 git이 대부분의 다른 VCS처럼 "되돌리기"나 "재설정"이 아닌 "체크 아웃"하위 명령의 모드로 "커밋되지 않은 변경 사항 취소"를 구현하기로 선택한 이유를 이해하지 못했습니다.


12
git checkout <name>은 <name> 브랜치를 확인합니다. git checkout-<name>은 <name> 파일의 인덱스 버전을 확인합니다.
dunni

3
덕분에, 불행하게도 자식 문서는 정말 설명하지 않습니다
칼튼

1
"유닉스 규칙"에 관하여 : 실제로 --옵션과 인수 사이의 구분자로 널리 구현됩니다. POSIX getopt(3)를 사용하여 명령 줄 옵션을 처리 하는 모든 프로그램 / 유틸리티 (참조 man 3 getopt),를 사용하는 셸 스크립트 getopt(1)및이를 자체적으로 구현하는 일부 프로그램 에서 작동 하지만 일반적 으로 작동이 보장 되지는 않습니다 .
arielf

하! 단순히, 작업 변경 사항을 취소하는 방법의 예 웨이 다시 읽기 다른 명령 줄 프로그램에서이 규칙을보고 잊어 버린 데, 그 가정 --의미 '무효화 변경' C / C ++를 - 그리고 그 이후로 생각되고있다. 마음을 날려!
underscore_d

저와 같은 사람들에게 : master라는 이름으로 혼동하지 마십시오. 그는 브랜치가 아니라 master라는 파일을 의미합니다.
HarsH

7

다음에 오는 모든 --것은 파일 이름으로 처리됩니다 (프로그램 인수가 아님). 예를 들어 대시로 시작하는 파일 이름이있는 경우 이는 중요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.