나는 새로운 기능에 대한 연구를 시작했으며 약간의 코딩을 한 후에이 기능이 자체 지점에 있어야한다고 결정했습니다.
커밋되지 않은 기존 변경 사항을 새 브랜치로 옮기고 현재 브랜치를 재설정하려면 어떻게해야합니까?
새 기능에 대한 기존 작업을 유지하면서 현재 지점을 재설정하고 싶습니다.
답변
다음을 사용하십시오.
git checkout -b <new-branch>
현재 지점을 그대로두고 새 지점을 생성 및 체크 아웃하고 모든 변경 사항을 유지합니다. 그런 다음 커밋 할 파일의 변경 사항을 준비 할 수 있습니다.
git add <files>
다음과 같이 새 지점에 커밋하십시오 .
git commit -m "<Brief description of this commit>"
작업 디렉토리의 변경 사항과 인덱스에서 준비된 변경 사항은 아직 어떤 브랜치에도 속하지 않습니다. 수정이 끝나는 지점이 변경됩니다.
원래 브랜치를 재설정 하지 않고 그대로 유지합니다. 마지막 커밋 <old-branch>
은 여전히 동일합니다. 그러므로 당신은 checkout -b
다음 커밋합니다.
2020 업데이트 / 힘내 2.23
Git 2.23 switch
은 과부하 된 사용법 checkout
(브랜치 전환, 파일 복원, HEAD 분리 등)으로 인한 혼란을 없애기 위해 새로운 하위 명령을 추가합니다 .
이 버전의 Git부터는 위의 명령을 다음과 같이 바꾸십시오.
git switch -c <new-branch>
동작은 동일하며 변경되지 않습니다.
답변
또는
-
임시 변경 사항에 현재 변경 사항을 저장하십시오.
$ git stash
-
이 숨김을 기반으로 새 분기를 작성하고 새 분기로 전환하십시오.
$ git stash branch <new-branch> stash@{0}
팁 : 숨김 키 입력을 줄이려면 Tab 키를 사용하십시오.
답변
코딩하는 동안 메인 브랜치에서 커밋 을 수행했지만 이제 해당 커밋을 다른 브랜치로 이동하려면 다음과 같이하십시오.
-
커밋되지 않은 변경 사항을 모두 가져 와서 현재 기록을 새 브랜치에 복사하십시오.
git checkout -b <new-feature-branch>
-
이제 원래 “지저분한”브랜치를 강제로 롤백하십시오 (전환하지 않고).
git branch -f <previous-branch> <earlier-commit-id>
예를 들면 다음과 같습니다.
git branch -f master origin/master
또는 4 번 커밋 한 경우 :
git branch -f master HEAD~4
경고 : git branch -f master origin/master
것입니다 추적 정보 다시 그 지점에있다. 따라서master
분기 이외의 다른 곳으로 푸시하도록 지점을구성한 경우origin/master
해당 구성이 손실됩니다.
경고 : 분기 후 리베이스하면 여기 에 설명 된 위험이 있습니다 . 이를 피할 수있는 유일한 방법은 cherry-pick을 사용하여 새 기록을 만드는 것입니다. 이 링크 는 가장 안전한 방법을 설명 합니다 . 커밋되지 않은 변경 사항이 있으면git stash
시작과git stash pop
끝 부분에있을 수 있습니다.
답변
일반적인 시나리오는 다음과 같습니다. 새 기능에 대한 새 분기를 만드는 것을 잊었으며 이전 기능 분기에서 모든 작업을 수행하고있었습니다. 나는 모든 “오래된”작업을 마스터 브랜치에 맡기고 새 브랜치가 “마스터”에서 성장하기를 원합니다. 나는 새로운 일을 한 번도하지 않았습니다. 분기 구조는 다음과 같습니다. “master”-> “Old_feature”
git stash
git checkout master
git checkout -b "New_branch"
git stash apply
답변
커밋하면 단일 커밋 ID를 체리 픽으로 선택할 수도 있습니다. 나는 마스터에서 일을 시작할 때 종종이 작업을 수행 한 다음 내 원산지 /에 도달하기 전에 로컬 지점을 만들고 싶습니다.
git cherry-pick <commitID>
여기 에 설명 된 것처럼 체리 피킹으로 할 수있는 많은 것이 있지만 이것은 유스 케이스 일 수 있습니다.
답변
이것은 GIT 도구를 사용하는 모든 사람에게 도움이 될 수 있습니다
명령
스위치 브랜치-변경 사항을 새 브랜치로 이동합니다. 그런 다음 변경 사항을 커밋 할 수 있습니다.
$ git checkout -b <new-branch>
거북이 GIT
저장소를 마우스 오른쪽 버튼으로 클릭하고 TortoiseGit-> 스위치 / 체크 아웃을 사용하십시오.
소스 트리
“체크 아웃”버튼을 사용하여 분기를 전환하십시오. 지점을 클릭하면 상단에 “체크 아웃”버튼이 표시됩니다. 현재 지점의 변경 사항이 자동으로 적용됩니다. 그런 다음 커밋 할 수 있습니다.
답변
@Robin 답변을 사용 하고 내가 한 모든 것을 나열했습니다.
git status <-- review/list uncommitted changes
git stash <-- stash uncommitted changes
git stash branch <new-branch> stash@{1} <-- create a branch from stash
git add . <-- add local changes
git status <-- review the status; ready to commit
git commit -m "local changes ..." <-- commit the changes
git branch --list <-- see list of branches incl the one created above
git status <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch> <-- switch back
! 저장소에 둘 이상의 숨김이있는 경우 새 분기에 적용 할 저장소를 확인하십시오.
git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ...
개별 숨김을 검사하여
git stash show stash@{1}
또는 모든 숨김을 한 번에 검사하십시오.
git stash list -p