“git status”에 내가 마스터 브랜치에 있고 “git 브랜치”가 새로 생성 된 리포지토리에없는 이유는 무엇입니까? 않는 새로 초기화

프로세스를 자동화하고 git branch명령을 실행하여 내가 속한 지점을 찾으려고합니다. git branch아무것도 반환하지 않는 새로 초기화 된 저장소를 제외하고는 모든 것이 잘 작동합니다 . 리포지토리에 대해 아무것도하지 않았고 초기 커밋조차도하지 않았으므로 대답을 받아 들일 수 있습니다. 그러나 내가 실행하면 여기에서 볼 수 있듯이 git status내가 master지점 에 있다고 알려줍니다 .

$ mkdir todelete
$ cd todelete
$ git init
Initialized empty Git repository in /u/u70021a/todelete/.git
$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)
$ git branch
$

내가 뭘 잘못하고 있니? 제대로 설정하지 않은 설정이 있습니까?

나는 또한 Git에 새로운 사람들이 많이 있는데, 그들이 속한 브랜치를 보여주는 명령이 아무것도 표시하지 않는 이유를 설명 할 수 없지만 status 명령은 수행합니다.



답변

나는 다른 두 가지 답변을 찬성했지만 이것을 생각하는 방법은 간단하다고 생각 합니다. 존재하지 않는 지점에있을 수 있습니다. 그건 정상 분기 이름이 존재하는 그 지점 이름이 있기 때문에, 너무 비어있는 새 저장소에 있어야 기존의 유효한 커밋의 해시 ID를 식별합니다. 비어있는 새 저장소에는 커밋이 없으므로 아직 브랜치 이름이 존재할 수 없습니다.

그럼에도 불구하고 당신은 처음에 어떤 지점에 있습니다. 현재 지점은 이름이 특수 이름에 저장된 지점 HEAD입니다. 비어있는 새 저장소에서 Git은 이름 master(더 정확하게는 refs/heads/master-브랜치의 전체 이름)을 HEAD에 저장하므로 존재하지 않는 master동안에있는 상태 master입니다.

사용중인 존재하지 않는 분기를 변경할 수 있습니다 git checkout -b.

$ git init
Initialized empty Git repository in [path]
$ git checkout -b asdf
Switched to a new branch 'asdf'
$ git checkout -b hello
Switched to a new branch 'hello'

존재하지 않는 분기에있을 때마다 다음 커밋이 분기를 만듭니다 . 이것은 또한 git checkout --orphan작동 방식입니다.


답변

git branch가지가 없기 때문에 아무것도 표시하지 않습니다. 그러나 다음에서 읽을 수 있습니다 man git init.

이 명령은 빈 Git 저장소를 만듭니다. 기본적으로 객체, refs / heads, refs / tags 및 템플릿 파일에 대한 하위 디렉터리가있는 .git 디렉터리입니다. 마스터 브랜치의 HEAD를 참조하는 초기 HEAD 파일도 생성됩니다.

관련성이 있다고 생각되는 부분을 굵게 표시했습니다. 아직 마스터 브랜치가 없지만 참조가 이미 존재하는 것처럼 보이므로에 표시됩니다 git status. 커밋하면 적절한 분기가 생성됩니다.


답변

기존 답변은 출력이 왜 그것이 무엇인지에 대한 문자적인 질문을 다루고 있지만 실제 문제에 대해 다소 광택이 있다고 생각합니다 …

당신은 무언가를 자동화하고 있다고 말 했으므로 스크립팅 컨텍스트에서 최고의 도구 git status도 아니라고 제안합니다 git branch.

이 토론에서 몇 가지 대안을 찾을 수 있습니다 . 현재 체크 아웃 된 Git 브랜치를 프로그래밍 방식으로 결정하는 방법

당신의 요구 사항 (또는 당신이 태어나지 않은 브랜치가 어떻게 행동하기를 원하는지)를 모르고 나는 반드시 추천을 할 수는 없지만, 내가 얻고있는 요점은, 일부 명령은 인간 상호 작용 (도자기)을위한 것이고 다른 명령은 스크립트를위한 것이다 ( 배관)


답변

가지가 아직 태어나지 않았습니다. 따라서 git branch표시하지 않습니다 ( git symbolic-ref HEADHEAD가 기본 브랜치 마스터를 가리키고 있으며 git branch표시되지 않은 상태로 태어나지 않았 음을 나타냅니다. 즉, 아직 존재하지 않는 브랜치에있을 수 있음). 그러나 무언가를 커밋하면 분기가 생성됩니다.

orphan지점 을 결제하는 경우에도 마찬가지 입니다.

git status이것이 생성 될 브랜치이므로 브랜치 이름을 표시 한다고 가정 합니다.

스크립팅은 현재 체크 아웃 된 Git 분기를 프로그래밍 방식으로 확인하는 방법을 참조하세요.


답변

git에서 기본 분기는 master. 커밋하면 git은 현재 사용중인 브랜치를 “사용”합니다. 새 저장소를 초기화 했으므로 “기본”브랜치에 있고 이것이 브랜치 목록에 표시되지 않는 이유입니다. 변경 사항을 커밋하면 표시됩니다.