새로운 프로젝트를위한 새로운 빈 브랜치 생성


351

우리는 프로젝트를 저장하기 위해 자식 저장소를 사용하고 있습니다. 우리는 원래 지점에서 출발하는 지점을 가지고 있습니다. 그러나 이제 문서를 추적 할 작은 새 프로젝트를 만들고 싶습니다. 이를 위해 파일을 저장하기 위해 비어있는 새 분기를 만들고 네트워크의 다른 사용자가 해당 분기를 복제하기를 원합니다.

우리는 어떻게 할 수 있습니까?

몇 가지를 시도했지만 작동하지 않았습니다.

$ mkdir proj_doc; cd proj_doc
$ git init
$ git add .
$ git commit -m 'first commit'
$ git br proj_doc
$ git co proj_doc
$ git br -d master
$ git push origin proj_doc

분기를 정상적으로 푸시하는 것처럼 보이지만 가져 오기 또는 가져 오기를 수행하면 다른 분기에서 정보를 다운로드 한 다음 다른 프로젝트에서 추가 파일을 얻습니다. 가장 좋은 해결책은 무엇입니까?


11
왜 이것을 지점에 저장해야합니까? 브랜치는 일반적으로 동일한 코드 기반과 약간의 차이가 있습니다. 새로운 저장소를 시작하는 것이 더 나은 솔루션 일 수 있습니다.
Benjamin Bannier

2
글쎄, 우리는 이전에 IIRC를
해왔고

3
"새로운 프로젝트" -@honk와 같이 이것을 새로운 저장소에 넣을 것을 제안합니다. 두 가지 옵션을 통합 할 수 있습니다. submodule예를 들어 docs/다른 리포지토리를 가리키는 원래 프로젝트에서 a 로 만드십시오 . 또는 나중에 코드를 병합하려면 원격으로 추가하십시오.
gertvdijk

1
고아 접근법 의 또 다른 단점은 .gitignore'd 파일 을 유지 하고 두 루트 (분기) 사이를 지속적으로 전환 해야한다는 것 입니다. 그래서 나는 또한 새로운 폴더에서 같은 리모컨을 사용하고 다른 지점으로 밀어 넣는 새로운 repo 접근 방식을 찾고 있습니다.
simo

답변:


666

고아로 분기를 만들 수 있습니다.

git checkout --orphan <branchname>

부모가없는 새 지점이 만들어집니다. 그런 다음 다음을 사용하여 작업 디렉토리를 지울 수 있습니다.

git rm --cached -r .

문서 파일을 추가하고 커밋 한 다음 github에 푸시하십시오.

pull 또는 fetch는 항상 모든 원격 브랜치에 대한 로컬 정보를 업데이트합니다. 단일 원격 브랜치에 대한 정보 만 가져 오거나 가져 오려면이를 지정해야합니다.


18
좋은 대답이지만, 새로운 브랜치가 이전 브랜치의 모든 파일을 단계별로 시작한다는 것은 짜증나는 일입니다.
매트 펜윅

12
발행 할 때 git checkout --orphan <branch>; 에 <branch> 목록이 없습니다 git branch.
Santosh Kumar

51
git checkout --orphan하나를 사용할 수 있습니다 git reset --hard남은 파일을 삭제합니다.
Ilya Kozhevnikov

16
분기 이후에 분기 git checkout --orphan <branch>가 보이지 않는 이유는 아직 커밋이 없기 때문입니다. 첫 번째 커밋 후 git branch새 분기를 인쇄합니다.
Krøllebølle

13
git clean -fd는 추적되지 않은 파일을 제거합니다.
stefgosselin 2012

71

정답은 고아 지점을 만드는 것입니다. 내 블로그 에서이 작업을 수행하는 방법을 자세히 설명합니다 . (아카이브 링크)

...

시작하기 전에 최신 버전의 GIT로 업그레이드하십시오. 최신 버전을 실행하려면 다음을 실행하십시오.

which git

이전 버전이 나오면 방금 설치 한 버전이 포함 된 폴더로 PATH를 보강해야 할 수도 있습니다.

좋아, 준비 됐어 자식 체크 아웃이 들어있는 폴더에 CD를 넣은 후 고아 지점을 만듭니다. 이 예에서는 지점 이름을 "mybranch"로 지정합니다.

git checkout --orphan mybranch

고아 지점의 모든 항목을 삭제하십시오.

git rm -rf .

약간 변경

vi README.txt

변경 사항 추가 및 커밋

git add README.txt
git commit -m "Adding readme file"

그게 다야. 당신이 실행하는 경우

git log

커밋 히스토리는 처음부터 시작됨을 알 수 있습니다. 마스터 브랜치로 다시 전환하려면 다음을 실행하십시오.

git checkout master

다음을 실행하여 고아 지점으로 돌아갈 수 있습니다.

git checkout mybranch

16
링크 전용 답변은 권장되지 않습니다. 링크가 이동되거나 제거되면 답변이 가치가 없게됩니다. 이 정답에 꼭 필요한 부분을 추가해보십시오. 사전 답변으로 다루지 않은 문제에 특별한주의를 기울이십시오.
바이트 버스터

3
불행히도이 링크는 더 이상 유효하지 않습니다.
Alexey

1
아카이브 는 훌륭한 것입니다.
lucid_dreamer

3
사소하지 않은 프로젝트는 추적되지 않은 파일 (구성, 환경, 캐시 등)을 가지므로 작업 디렉토리의 모든 것을 제거하는 것은 위험합니다.
Slava Fomin II

12

다음과 같이 빈 새 분기를 만드십시오.

true | git mktree | xargs git commit-tree | xargs git branch proj-doc

proj-doc 파일이 이미 단일 하위 디렉토리에서 커밋에있는 경우 다음과 같이 새 분기를 만들 수 있습니다.

git commit-tree thatcommit:path/to/dir | xargs git branch proj-doc

그것이 git branch --orphan당신에게 많은 것을 git rm하고 떠나야 할 때보 다 더 편리 git mv할 것입니다.

시험

git branch --set-upstream proj-doc origin/proj-doc

너무 많은 페치 문제에 도움이되는지 확인하십시오. 또한 실제로 단일 브랜치를 가져 오려면 명령 줄에서 지정하는 것이 가장 안전합니다.


1
이 답변은 완전히 비어있는 첫 번째 커밋으로 다른 분기 / 루트를 시작할 수 있기 때문에 흥미 롭습니다.
Stéphane Gourichon

빈 분기로 전환하지 않아도되는 다른 방법은 다음과 같습니다.git checkout --orphan new-branch; git reset --hard
jthill

의 사용법은 무엇입니까 xargs?
플럭스

@Flux 그것은 트리 ID를 커밋 트리 인수로 포함시키는 또 다른 방법입니다.
jthill

이 방법을 사용하면 현재 지점을 떠나지 않고 빈 새 분기를 만들 수 있으며 시작 지점으로 빈 커밋이 있습니다.
Brice

8

git 버전에 --orphan 옵션이없는 경우이 방법을 사용해야합니다.

git symbolic-ref HEAD refs/heads/<newbranch> 
rm .git/index 
git clean -fdx 

몇 가지 작업을 수행 한 후 :

git add -A
git commit -m <message>
git push origin <newbranch>

2
조심 git clean삭제하지 않으려는 파일을 삭제할 수 있습니다! 옵션을 git clean -ndx사용하여 실제로 실행하기 전에 삭제할 파일을 보려면 먼저 실행하십시오 -f.
Lassi

7

master파일 / 디렉토리 가있는 브랜치 가 있다고 가정 해 보겠습니다 .

> git branch  
master
> ls -la # (files and dirs which you may keep in master)
.git
directory1
directory2
file_1
..
file_n

빈 가지를 만드는 방법을 단계별로 살펴보십시오.

  1. git checkout —orphan new_branch_name
  2. 다음 명령을 실행하기 전에 올바른 디렉토리에 있는지 확인하십시오.
    ls -la |awk '{print $9}' |grep -v git |xargs -I _ rm -rf ./_
  3. git rm -rf .
  4. touch new_file
  5. git add new_file
  6. git commit -m 'added first file in the new branch'
  7. git push origin new_branch_name

2 단계에서는 새 브랜치의 파일과 보관하는 파일과 혼동되지 않도록 모든 파일을 로컬에서 간단히 제거합니다. master 브랜치에 . 그런 다음 3 단계에서 모든 파일의 연결을 해제합니다. 마지막으로 4 단계와 그 이후에 새로운 빈 분기를 사용합니다.

완료되면 지점간에 쉽게 전환 할 수 있습니다.

git checkout master 
git checkout new_branch

1

자료의이 Hiery Nomus에서 대답 .

고아로 분기를 만들 수 있습니다.

git checkout --orphan <branchname>

부모가없는 새 지점이 만들어집니다. 그런 다음 다음을 사용하여 작업 디렉토리를 지울 수 있습니다.

git rm --cached -r .

그런 다음 빈 커밋으로 분기를 커밋 한 다음 푸시

git commit -m <commit message> --allow-empty
git push origin <newbranch>

1

체크 아웃 이 문서를 , 그것은에 대한 세부 정보를 지 웁니다있다

--orphan <new_branch>
<new_branch>시작 하는 새로운 고아 브랜치 를 <start_point>만들고 시작 하십시오. 이 새로운 브랜치에서 첫 커밋은 부모가 없으며 다른 모든 브랜치와 커밋에서 완전히 분리 된 새로운 역사의 근원이 될 것입니다.

인덱스와 작업 트리는 이전에 git checkout을 실행 한 것처럼 조정됩니다. 이를 통해 git commit -a를 쉽게 실행하여 루트 커밋을 만들어 비슷한 경로 집합을 기록하는 새로운 기록을 시작할 수 있습니다.


1
솔루션에 대한 링크는 환영하지만 답변없이 유용한 답변을 얻으십시오 . 링크 주위에 컨텍스트를 추가 하여 동료 사용자가 그 이유와 그 이유를 파악한 다음 페이지의 가장 관련성이 높은 부분을 인용하십시오. 대상 페이지를 사용할 수없는 경우 다시 연결 링크에 불과한 답변은 삭제 될 수 있습니다.
Yunnosch

1

이 도움을 찾았습니다.

git checkout --orphan empty.branch.name
git rm --cached -r .
echo "init empty branch" > README.md
git add README.md
git commit -m "init empty branch"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.