답변:
지역 분기 만 (로컬 사용자)를 볼 수있는 지점입니다. 로컬 시스템에만 존재합니다.
git branch myNewBranch # Create local branch named "myNewBranch"
원격 분기 (대부분의 경우 원격 위치에있는 지점이다 origin
). 새로 만든 로컬 지점 myNewBranch
을로 푸시 할 수 있습니다 origin
. 이제 다른 사용자가이를 추적 할 수 있습니다.
git push -u origin myNewBranch # Pushes your newly created local branch "myNewBranch"
# to the remote "origin".
# So now a new branch named "myNewBranch" is
# created on the remote machine named "origin"
원격 추적 브랜치는 원격 지사의 로컬 복사본입니다. 위의 명령 myNewBranch
을 origin
사용하여 푸시 하면 이름 origin/myNewBranch
이 지정된 원격 추적 분기 가 컴퓨터에 생성됩니다. 이 원격 추적 분기는의 원격 분기 myNewBranch
를 추적합니다 origin
. 당신은 업데이트 할 수 있습니다 원격 추적 브랜치를 와 동기화 할 원격 지사는 사용 git fetch
또는 git pull
.
git pull origin myNewBranch # Pulls new commits from branch "myNewBranch"
# on remote "origin" into remote tracking
# branch on your machine "origin/myNewBranch".
# Here "origin/myNewBranch" is your copy of
# "myNewBranch" on "origin"
지역의 추적 지점 A는 현지 가지 다른 지점을 추적한다. 이것은 커밋을 다른 브랜치로 푸시 / 풀할 수 있도록하기위한 것입니다. 대부분의 경우 로컬 추적 분기는 원격 추적 분기를 추적합니다. 당신이 로컬 분기를 누르면 origin
를 사용 git push command
로모그래퍼 -u
(위 그림 참조) 옵션, 로컬 지점을 설정 myNewBranch
원격 추적 브랜치를 추적 origin/myNewBranch
. 이것은 사용에 필요한 git push
과 git pull
에서에 푸시 상류 또는 풀을 지정하지 않고.
git checkout myNewBranch # Switch to myNewBranch
git pull # Updates remote tracking branch "origin/myNewBranch"
# to be in sync with the remote branch "myNewBranch"
# on "origin".
# Pulls these new commits from "origin/myNewBranch"
# to local branch "myNewBranch which you just switched to.
긴 대답은 다음과 같습니다.
Git을 공동으로 사용하는 경우 커밋을 다른 컴퓨터 또는 위치와 동기화해야 할 수 있습니다. Git 용어로 각 머신 또는 위치를 remote 라고하며 각 머신 또는 위치는 하나 이상의 분기를 가질 수 있습니다. 대부분의 경우 이름이 하나만 origin
있습니다. 모든 리모컨을 나열하려면 다음을 실행하십시오 git remote
.
$ git remote
bitbucket
origin
다음을 실행하여 이러한 원격 이름이 바로 가기 위치를 확인할 수 있습니다 git remote -v
.
$ git remote -v
bitbucket git@bitbucket.org:flimm/example.git (fetch)
bitbucket git@bitbucket.org:flimm/example.git (push)
origin git@github.com:Flimm/example.git (fetch)
origin git@github.com:Flimm/example.git (push)
각 리모컨에는 아래에 디렉토리가 있습니다 git/refs/remotes/
.
$ ls -F .git/refs/remotes/
bitbucket/ origin/
TLDR : 로컬 컴퓨터에는 로컬 비 추적 분기, 로컬 추적 분기 및 원격 추적 분기의 세 가지 유형의 분기가 있습니다. 원격 컴퓨터에는 한 가지 유형의 지점이 있습니다.
다음을 실행하여 머신의 모든 로컬 브랜치 목록을 볼 수 있습니다 git branch
.
$ git branch
master
new-feature
각 로컬 지점에는 다음과 같은 파일이 있습니다 .git/refs/heads/
.
$ ls -F .git/refs/heads/
master new-feature
머신에는 두 가지 유형의 로컬 브랜치가 있습니다 : 비 추적 로컬 브랜치 및 로컬 브랜치 추적.
비 추적 로컬 브랜치는 다른 브랜치와 연결되지 않습니다. 을 실행하여 하나를 만듭니다 git branch <branchname>
.
로컬 지점 추적은 다른 지점 (일반적으로 원격 추적 지점)과 연결됩니다. 을 실행하여 하나를 만듭니다 git branch --track <branchname> [<start-point>]
.
다음을 사용하여 로컬 지점 중 어느 지점을 추적하는지 확인할 수 있습니다 git branch -vv
.
$ git branch -vv
master b31f87c85 [origin/master] Example commit message
new-feature b760e04ed Another example commit message
이 명령의 출력에서 로컬 분기 master
가 원격 추적 분기를 추적 origin/master
하고 있고 로컬 분기 new-feature
가 아무것도 추적하지 않는 것을 볼 수 있습니다.
분기를 추적하는 분기를 확인하는 다른 방법은을 살펴 보는 것 .git/config
입니다.
현지 지점을 추적하는 것이 유용합니다. 그들은 당신이 실행할 수 있도록 git pull
하고 git push
사용하는 상류 분기를 지정하지 않고. 지점이 다른 지점을 추적하도록 설정되어 있지 않으면 다음과 같은 오류가 발생합니다.
$ git checkout new-feature
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream new-feature <remote>/<branch>
다음을 실행하여 컴퓨터의 모든 원격 추적 분기 목록을 볼 수 있습니다 git branch -r
.
$ git branch -r
bitbucket/master
origin/master
origin/new-branch
각 원격 추적 지점에는 다음과 같은 파일이 있습니다 .git/refs/<remote>/
.
$ tree -F .git/refs/remotes/
.git/refs/remotes/
├── bitbucket/
│ └── master
└── origin/
├── master
└── new-branch
원격 추적 분기를 원격 시스템에 포함 된 로컬 캐시로 생각하십시오. 뒤에서 사용 git fetch
하는을 git pull
사용 하여 원격 추적 분기를 업데이트 할 수 있습니다 .
원격 추적 브랜치의 모든 데이터가 캐시와 같은 컴퓨터에 로컬로 저장되어 있어도 로컬 브랜치는 호출되지 않습니다. (적어도, 나는 그것을 부르지 않을 것입니다!) 그것은 단지 원격 추적 지점이라고 불립니다.
다음을 실행하여 모든 원격 분기 (즉, 원격 시스템의 분기)를 볼 수 있습니다 git remote show <remote>
.
$ git remote show origin
* remote origin
Fetch URL: git@github.com:Flimm/example.git
Push URL: git@github.com:Flimm/example.git
HEAD branch: master
Remote branches:
io-socket-ip new (next fetch will store in remotes/origin)
master tracked
new-branch tracked
Local ref configured for 'git pull':
master merges with remote master
new-branch merges with remote new-branch
Local ref configured for 'git push':
master pushes to master (up to date)
new-branch pushes to new-branch (fast-forwardable)
이 git remote
명령은 네트워크를 통해 원격 컴퓨터의 분기에 대해 쿼리합니다. 로컬 컴퓨터의 원격 추적 분기를 사용 git fetch
하거나 사용하지 않습니다 git pull
.
출력에서 "원격 지점"이라는 제목 ( "stale"으로 표시된 행은 무시)을보고 원격 시스템에 존재하는 모든 지점을 볼 수 있습니다.
원격 시스템에 로그인하여 파일 시스템에서 리포지토리를 찾을 수있는 경우 아래에서 모든 분기를 살펴볼 수 있습니다 refs/heads/
.
추적 여부와 상관없이 로컬 지점을 안전하게 삭제하려면 다음을 수행하십시오.
git branch -d <branchname>
추적 여부와 상관없이 로컬 지점을 삭제하려면 다음을 수행하십시오.
git branch -D <branchname>
원격 추적 분기를 삭제하려면
git branch -rd <remote>/<branchname>
새 로컬 비 추적 지점을 만들려면
git branch <branchname> [<start-point>]
새로운 로컬 추적 분기를 만들려면 : ( <start-point>
이 지정되고 같은 원격 추적 분기 인 origin/foobar
경우 --track
플래그가 자동으로 포함됩니다)
git branch --track <branchname> [<start-point]
예:
git branch --track hello-kitty origin/hello-kitty
원격 시스템에서 분기를 삭제하려면 다음을 수행하십시오.
git push --delete <remote> <branchname>
오래된 원격지, 즉 원격 시스템의 해당 분기가 더 이상 존재하지 않는 모든 원격 추적 분기를 삭제하려면 다음을 수행하십시오.
git remote prune <remote>
일부 명령에서는을 사용 <remote>/<branch>
하고 다른 명령은 을 사용하는 것을 알 수 있습니다 <remote> <branch>
. 예 : git branch origin/hello-kitty
및 git push --delete origin hello-kitty
.
임의의 것처럼 보일 수 있지만 슬래시 사용시기와 공백 사용시기를 기억하는 간단한 방법이 있습니다. 슬래시를 사용하는 경우 자신의 컴퓨터에서 원격 추적 분기를 참조하는 반면 공간을 사용하는 경우 실제로 네트워크를 통해 원격 컴퓨터의 분기를 처리하는 것입니다.
현지 지점 :
컴퓨터에서 작업하고 커밋을 추가 할 수있는 지점. 이 분기를로 나열 할 수 있습니다 git branch
.
현지 지점 (추적 포함) :
원격 지사에 해당하도록 구성된 일반 로컬 지사 이 할 수있는 능력과 같은 benfits있다 git pull
및 git push
저장소와 브랜치 이름을 지정하지 않고있다. 추적은 또한 git status
지점이 리모컨의 앞 또는 뒤에있을 때 알려줍니다.
원격 지점 :
원격 저장소, 일반적으로 GitHub 등의 서버에있는 지점
원격 추적 지점 :
원격 지사의 로컬 사본. 이 분기는 편집해서는 안됩니다. 그 목적은 원격 지점의 현재 상태를 추적하는 것입니다. 원격 추적 분기를 사용하여 볼 수 있으며 git branch -r
일반적으로 origin/master
리포 이름 뒤에 슬래시와 분기 이름이 있습니다. Running git fetch
은 원격 추적 분기를 업데이트하여 해당 원격 분기의 상태를 반영합니다.
git branch -avv
내 컴퓨터에있는 브랜치, 원격에있는 브랜치 및 각각의 최신 커밋에 대한 빠른 개요를 표시하는 데 개인적으로 가장 좋아합니다. 이 -a
부분은 모든 분기가 표시되도록 지정합니다 (원격 및 로컬). v
자세한에 대한 최종 스탠드의 (이것은 마지막이다 해시와 커밋 메시지). 두 번째 v
는 어떤 로컬 지점이 어떤 원격지를 추적하는지에 대한 정보를 추가 한다는 점을 지적한 @Flimm에게 감사드립니다 .