“git checkout <filename>”과“git checkout–<filename>”의 차이점 모릅니다. git checkout <filename> git checkout — <filename> 어떤

http://norbauer.com/notebooks/code/notes/git-revert-reset-a-single-file

게시물을 찾았습니다.

그러나 여전히 차이점이 무엇인지 모릅니다.

  1. git checkout <filename>

  2. git checkout -- <filename>

어떤 상황에서 첫 번째와 두 번째를 각각 사용해야합니까?



답변

특별한 “옵션” --은 “이 시점 이후의 모든 인수를 파일 이름으로 취급합니다.” 라는 의미입니다. 이것은 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처럼 “되돌리기”나 “재설정”이 아닌 “체크 아웃”하위 명령의 모드로 “커밋되지 않은 변경 사항 취소”를 구현하기로 선택한 이유를 이해하지 못했습니다.


답변

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