새로운 기능에 대한 작업을 시작했고 잠시 코딩한 후 이 기능이 자체 분기에 있어야 한다고 결정했습니다.
커밋되지 않은 기존 변경 사항을 새 분기로 이동하고 현재 변경 사항을 재설정하려면 어떻게 합니까?
새 기능에 대한 기존 작업을 유지하면서 현재 분기를 재설정하고 싶습니다.
질문자 :Dane O'Connor
새로운 기능에 대한 작업을 시작했고 잠시 코딩한 후 이 기능이 자체 분기에 있어야 한다고 결정했습니다.
커밋되지 않은 기존 변경 사항을 새 분기로 이동하고 현재 변경 사항을 재설정하려면 어떻게 합니까?
새 기능에 대한 기존 작업을 유지하면서 현재 분기를 재설정하고 싶습니다.
Git 2.23 checkout
의 과부하된 사용(분기 전환, 파일 복원, HEAD 분리 등)으로 인한 혼란을 해결하기 위해 switch
이 Git 버전부터 checkout 명령을 다음으로 바꿉니다.
git switch -c <new-branch>
동작은 동일하며 변경되지 않습니다.
다음을 사용하십시오.
git checkout -b <new-branch>
이것은 현재 브랜치를 그대로 두고 새 브랜치를 생성 및 체크아웃하고 모든 변경 사항을 유지합니다. 그런 다음 커밋할 파일의 변경 사항을 준비할 수 있습니다.
git add <files>
다음을 사용하여 새 분기에 커밋하십시오.
git commit -m "<Brief description of this commit>"
작업 디렉토리의 변경 사항과 인덱스에 준비된 변경 사항은 아직 분기에 속하지 않습니다. 이렇게 하면 수정 사항이 끝나는 지점이 변경됩니다.
원래 분기를 재설정 하지 않고 그대로 유지됩니다. <old-branch>
의 마지막 커밋은 여전히 동일합니다. 따라서 checkout -b
한 다음 커밋합니다.
또는:
임시 보관함에 현재 변경 사항을 저장합니다.
$ git stash
이 숨김을 기반으로 새 분기를 만들고 새 분기로 전환합니다.
$ git stash branch <new-branch> stash@{0}
팁: 탭 키를 사용하여 숨김 이름 입력을 줄이십시오.
코딩을 하는 동안 메인 브랜치에서 커밋 을 하고 있었지만 이제 그 커밋을 다른 브랜치로 옮기고 싶다면 다음과 같이 하면 됩니다.
현재 기록을 새 분기에 복사하고 커밋되지 않은 변경 사항도 함께 가져옵니다.
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
는 해당 분기에 대한 추적 정보를 재설정합니다. origin/master
아닌 다른 위치로 푸시하도록 master
분기를 구성한 경우 해당 구성이 손실됩니다.
경고: 분기 후 리베이스하면 일부 커밋이 손실될 수 있는 위험이 있습니다. 이에 대해 여기에 설명되어 있습니다. 그것을 피하는 유일한 방법은 체리 픽을 사용하여 새로운 역사를 만드는 것입니다. 그 링크는 덜 편리하지만 가장 안전한 바보 방지 방법을 설명합니다. (당신이 커밋되지 않은 변경이있는 경우, 당신은해야 할 수도 있습니다 git stash
시작과에서 git stash pop
끝.)
일반적인 시나리오는 다음과 같습니다. 새 기능에 대한 새 분기를 만드는 것을 잊었고 이전 기능 분기에서 모든 작업을 수행하고 있었습니다. 나는 모든 "이전" 작업을 마스터 브랜치에 커밋했으며 내 새 브랜치가 "마스터"에서 성장하기를 원합니다. 나는 내 새 작업에 대해 단 한 번도 커밋하지 않았습니다. 다음은 분기 구조입니다. "master"->"Old_feature"
git stash git checkout master git checkout -b "New_branch" git stash apply
커밋하면 단일 커밋 ID를 체리픽할 수도 있습니다. 나는 master에서 작업을 시작할 때 자주 이 작업을 수행한 다음 내 origin/에 푸시하기 전에 로컬 분기를 만들고 싶습니다.
git cherry-pick <commitID>
여기 에 설명된 대로 체리 픽으로 할 수 있는 일이 많이 있지만 이것은 당신을 위한 유스 케이스가 될 수 있습니다.
이전에는 기능이 없었다고 생각하지만 지금은 GitHub Desktop으로 이 작업을 수행하는 정말 쉬운 방법이 있습니다.
GitHub Desktop에서 새 분기로 전환하기만 하면 현재 분기에 변경 사항을 그대로 두거나(저장될) 변경 사항을 새 분기로 가져오라는 메시지가 표시됩니다. 변경 사항을 새 분기로 가져오려면 두 번째 옵션을 선택하기만 하면 됩니다. 그런 다음 평소와 같이 커밋할 수 있습니다.
이것은 GIT용 도구를 사용하는 모든 사람에게 도움이 될 수 있습니다.
명령
분기 전환 - 변경 사항을 새 분기로 이동합니다. 그런 다음 변경 사항을 커밋할 수 있습니다.
$ git checkout -b <new-branch>
거북이GIT
저장소를 마우스 오른쪽 버튼으로 클릭한 다음 TortoiseGit->Switch/Checkout을 사용합니다.
소스 트리
분기를 전환하려면 "체크아웃" 버튼을 사용하십시오. 지점을 클릭하면 상단에 "결제" 버튼이 표시됩니다. 현재 분기의 변경 사항이 자동으로 적용됩니다. 그런 다음 커밋할 수 있습니다.
@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
! 리포지토리에 둘 이상의 stash가 있는 경우 새 브랜치에 적용할 stash를 확인하세요.
git stash list stash@{0}: WIP on ... stash@{1}: WIP on ...
다음을 통해 개별 보관함을 검사합니다.
git stash show stash@{1}
또는 모든 은닉물을 한 번에 검사:
git stash list -p
feature-branch 라는 이름으로 GitHub에 새 분기를 생성했다고 가정합니다.
술책
git pull --all Pull all remote branches git branch -a List all branches now
기능 분기 디렉토리를 체크아웃하고 전환합니다. 위의 branch -a 명령의 출력에서 분기 이름을 복사하기만 하면 됩니다.
git checkout -b feature-branch
확인
다음으로 git branch 명령을 사용하여 현재 분기를 확인합니다. 앞에 *가 있는 기능 분기가 표시됩니다.
git branch
저 지르다
git add . add all files git commit -m "Rafactore code or use your message"
원본 서버에서 업데이트 및 푸시 변경 사항 받기
git pull origin feature-branch git push origin feature-branch
출처 : 여기를 클릭하세요
출처 : http:www.stackoverflow.com/questions/1394797/move-existing-uncommitted-work-to-a-new-branch-in-git
특정 인덱스의 배열에 항목을 삽입하는 방법(JavaScript) (0) | 2021.10.05 |
---|---|
'for' 루프를 사용하여 사전 반복 (0) | 2021.10.05 |
정규식을 사용하여 이메일 주소를 확인하려면 어떻게 해야 합니까? (0) | 2021.10.05 |
Android UserManager.isUserAGoat()의 적절한 사용 사례는 무엇입니까? (0) | 2021.10.05 |
로컬 파일 시스템에서 파일을 삭제하지 않고 Git 리포지토리에서 파일 제거 (0) | 2021.10.05 |