새(그리고 비어 있음!)를 만드는 방법"뿌리" 지점?
이 git 저장소에 새 "root" 브랜치를 정의하려고 합니다.루트 분기란 저장소의 다른 모든 분기와1 완전히 독립적인 분기를 의미합니다.
불행하게도, 그 약속조차도 (그것을 부르자.A
repo의 커밋 트리의 맨 아래에는 많은 파일이 포함되어 있습니다(이것은 이미 상당히 성숙한 프로젝트에서 초기화된 저장소였습니다).
이 말은 내가 주더라도A
새 지부의 사무실로서<start-point>
이 새로운 분기는 "깨끗한 슬레이트"에서 시작하지 않고, 오히려 커밋된 모든 파일을 포함합니다.A
.
이 저장소에 완전히 비어 있는 분기를 만들 수 있는 방법이 있습니까?<start-point>
에 가까운A
가능한 한?
1참고로, 이것은 새 레포를 만드는 것과 같지 않습니다.여러 가지 이유로 인해 별도의 저장소가 필요하지 않습니다.
편집: 좋아요. vcsjons의 답변을 토대로 한 것은 다음과 같습니다.
# save rev of the current earliest commit
OLDBASE=$(git rev-list --max-parents=0 HEAD)
# create a new orphan branch and switch to it
git checkout --orphan newbranch
# make sure it's empty
git rm -rf .
# create a new empty commit in the new branch, and
# save its rev in NEWBASE
git commit --allow-empty -m 'base commit (empty)'
NEWBASE=$(git rev-list HEAD)
# specify $NEWBASE as the new parent for $OLDBASE, and
# run filter-branch on the original branch
echo "$OLDBASE $NEWBASE" > .git/info/grafts
git checkout master
git filter-branch
# NOTE: this assumes that the original repo had only one
# branch; if not, a git-filter-branch -f <branch> command
# need to be run for each additional branch.
rm .git/info/grafts
이 절차가 약간 관련되어 있지만, 최종 결과는 다음과 같은 역할을 할 수 있는 빈 기본 커밋입니다.<start-point>
새로운 "깨끗한 슬레이트 지점"을 위해, 내가 해야 할 일은.
git checkout -b cleanslate $(git rev-list --max-parents=0 HEAD)
앞으로는 항상 다음과 같은 새 리포지토리를 만들 것입니다.
git init
git commit --allow-empty -m 'base commit (empty)'
...첫 번째 커밋이 비어 있고 새로운 독립 지점을 시작하는 데 항상 사용할 수 있도록 합니다. (이것은 매우 드물게 필요한 시설이지만 쉽게 사용할 수 있도록 하는 것은 매우 간단합니다.)
사용--orphan
분기를 생성할 때:
git checkout --orphan YourBranchName
이렇게 하면 커밋이 0인 새 분기가 생성되지만 모든 파일이 준비됩니다.그 시점에서 제거할 수 있습니다.
("제거": Agit reset --hard
인덱스를 비우고 빈 작업 트리를 남깁니다.)
--orphan에 대한 자세한 정보는 체크아웃을 위한 man 페이지를 보세요.
허용된 답변에 추가하는 것이 좋습니다. 정리 상태로 되돌리는 가장 좋은 방법은 초기 빈 커밋을 만들어 나중에 분기를 설정하는 동안 쉽게 기본을 바꿀 수 있도록 하는 것입니다.또한 정리 상태를 원하기 때문에 그러면 안 되는 파일을 커밋했기 때문에 인덱스에서 제거해야 합니다.이를 염두에 두고 다음을 수행해야 합니다.
$ git checkout --orphan dev2
Switched to a new branch 'dev2'
$ git reset # unstage all the files, you probably don't want to commit all of them
$ git commit --allow-empty -m 'Initial empty commit'
[dev2 (root-commit) a515c28] Initial empty commit
이 저장소에 완전히 비어 있는 분기를 만들 수 있는 방법이 있습니까?
Git 2.28+와 함께 사용하는 실제 명령은 다음과 같습니다.
git switch --discard-changes --orphan newBranch
# or
git switch -f --orphan newBranch
git switch
Git 2.23(2019년 8월)부터 사용할 수 있으며, 이전의 혼란스러운 명령어를 대체합니다.
하지만 저는 Git 2.28(2020년 3분기)을 추천하고 싶습니다.git switch --discard-changes --orphan
해당 버전에서 최적화되었습니다.
commit 8d3e33d, commit 8186128(2020년 5월 21일)을 brian m. carlson()bk2204
의 commit 8d를 참조하십시오.
(Junio C Hamano에 의해 합병됨 -- -- 2020년 6월 9일 44af로 확정됨)
builtin/checkout
메타데이터 초기화 단순화사인 오프 바이: 브라이언 칼슨.
리뷰 담당자: 데릭 스톨리우리가 전화할 때
init_checkout_metadata
reset_tree,
필터에 전달할 수 있도록 해당 커밋의 개체 ID를 전달하거나 커밋이 없는 경우 트리를 전달하고자 합니다.우리는 체크아웃 코드의 다른 곳에서 발생할 수 있는 이 후자의 경우를 예상했지만, 여기서는 발생할 수 없습니다.
커밋 개체가 없는 유일한 경우는 다음을 사용하여 호출할 때입니다.
--orphan
.또한 다음 중 하나를 사용하여 추가적으로 커밋 개체 없이 이 코드 경로만 히트할 수 있습니다.
--force
또는--discard-changes
.이러한 경우 커밋 트리로 체크아웃 메타데이터를 초기화하는 것은 의미가 없습니다.
- 약속은 없고, 빈 나무만 있고, 그리고.
- 파일이 없는 분기를 체크아웃할 때 파일이 번지지 않기 때문에 데이터를 절대 사용하지 않습니다.
이 경우 올바른 포인터 값이 필요하므로 all-zero 개체 ID를 전달합니다.
테스트:
git switch master
echo foo >foo.txt
git switch --discard-changes --orphan new-orphan2
git ls-files >tracked-files
# test_must_be_empty tracked-files
만약 당신이 git 2.23 또는 그 이상을 사용한다면 당신은 그리고 대신에 익숙해질 것입니다.git checkout
그렇다면, 깃발은 이 답변에서 언급한 것과 같습니다.
git switch --orphan YourBranchHere
언급URL : https://stackoverflow.com/questions/15034390/how-to-create-a-new-and-empty-root-branch
'IT' 카테고리의 다른 글
logging.info 이 콘솔에 표시되지 않지만 경고 및 오류가 나타납니다. (0) | 2023.07.17 |
---|---|
tslint가 모듈을 허용하지 않는 것이 권장되는 이유는 무엇입니까? (0) | 2023.07.17 |
스프링 부트 테스트를 특정 프로필이 활성화된 경우에만 실행되도록 표시할 수 있습니까? (0) | 2023.07.17 |
브라우저를 통한 카메라 액세스 (0) | 2023.07.17 |
Spring-boot을 사용한 보안 구성 (0) | 2023.07.17 |