체크인을 위해 변경된 파일을 다른 분기로 이동합니다.
코드를 작성하고 변경 사항을 확인하러 갔다가 변경 사항을 확인할 수 있는 적절한 지점이 아님을 깨닫는 경우가 많습니다.그러나 변경 내용이 복구되지 않으면 다른 분기로 전환할 수 없습니다.변경 사항을 다른 지점에서 체크인할 수 있는 방법이 있나요?
git stash
당신 친구예요
아직 확약을 하지 않았다면 그냥 실행하세요.git stash
. 그러면 변경 내용이 모두 저장됩니다 이겁니다.
변경하고자 하는 분기로 하여 실행하세요.git stash pop
요.
git stash에는 많은 용도가 있습니다.이것은 확실히 더 유용한 이유 중 하나입니다.
예를 들어 다음과 같습니다.
# work on some code
git stash
git checkout correct-branch
git stash pop
업데이트 데데트:: 할할필필필필필필 update update update update update update update update update update를 사용할 필요가 없습니다.stash
커밋되지않은 변경은 어느 지점에도 속하지 않기 때문에, 그냥 지사를 사용하세요.git checkout -b <new-branch>
아직 변경 사항을 커밋하지 않은 경우 다음을 사용하십시오.git checkout
새 분기로 이동한 다음 정상적으로 커밋합니다. 파일 변경은 커밋하기 전까지 특정 분기에 연결되지 않습니다.
변경 사항을 이미 커밋한 경우 다음을 수행합니다.
- 형형을 입력합니다.
git log
SHA를 소개합니다. - 커밋을 이동할 지점을 확인합니다.
- 형형을 입력합니다.
git cherry-pick SHA
SHA를 사용하세요. - 원래 분기로 다시 전환합니다.
- 사용하세요.
git reset HEAD~1
잘못된 결정을 내리기 전에 재설정해야 합니다.
cherry-pick
지정된 커밋을 가져와서 현재 체크아웃된 헤드에 적용하므로 커밋을 새 분기에 복사할 수 있습니다.
슬프게도 저도 이런 일이 자주 일어나는데, 저는 이런 말을 씁니다.git stash
제가 실수를 깨닫기 전에 깨달았는지요.git commit
이렇게 쓰세요.git cherry-pick
그렇지 않으면 두 명령어 모두 다른 답변에서 잘 설명되어 있습니다.
부분에 대해서 좀 더 명확히 하고 싶습니다.git checkout targetBranch
: 이 명령은 targetBranch가 현재 분기와 동일한 기록을 가지고 있는 경우에만 작업 디렉토리 및 스테이징된 스냅샷을 보존합니다.
아직 변경을 커밋하지 않았다면 git checkout을 사용하여 새 분기로 이동한 다음 정상적으로 변경하십시오.
@Amber의 진술은 거짓이 아닙니다. newBranch로 이동하면git checkout -b newBranch
새 포인터가 생성되고 현재 분기와 정확히 동일한 커밋을 가리키고 있습니다.
실제로 현재 지점(두 지점 모두 같은 커밋에 있는 지점)과 이력을 공유하는 다른 지점이 '변경 사항을 이동'할 수 있습니다.git checkout targetBranch
그러나 일반적으로 다른 브랜치는 다른 이력을 의미하며 Git은 지저분한 작업 디렉토리 또는 스테이징 영역을 가진 브랜치 간에 전환할 수 없습니다.이 경우, 당신은 할 수 있습니다.git checkout -f targetBranch
(청소 및 폐기 변경 사항) 또는git stage
+git checkout targetBranch
(변경사항 정리 및 저장), 단순히 실행됩니다.git checkout targetBranch
다음 오류가 표시됩니다.
오류: 다음 파일에 대한 로컬 변경 사항을 체크아웃에 의해 덮어씁니다. ...지점을 전환하기 전에 변경 내용을 커밋하거나 저장하십시오.중단합니다.
소프트 git 재설정은 커밋된 변경 사항을 인덱스로 되돌립니다.그런 다음 커밋하려는 지점을 확인합니다.그런 다음 새로운 커밋 메시지로 커밋합니다.
git reset --soft <commit>
git checkout <branch>
git commit -m "Commit message goes here"
git 문서에서 다음을 수행합니다.
git reset [<mode>] [<commit>]
이 양식은 현재 분기 헤드를 로 재설정하고 인덱스(의 트리로 재설정)와 작업 트리를 에 따라 업데이트할 수 있습니다. 이 항목을 생략하면 기본값은 --mixed입니다.는 다음 중 하나여야 합니다.
--soft
인덱스 파일이나 작업 트리에 전혀 손을 대지 않습니다(그러나 헤드는 모든 모드와 마찬가지로 로 재설정됨).이렇게 하면 git 상태가 나타내듯이 변경된 모든 파일이 "변경 사항"으로 남습니다.
새 파일을 만든 경우 다음을 수행할 수 있습니다.
git checkout main
git checkout -b branch-b
git checkout branch-a :rel/path/to/yourchangedfiles
git commit -m "w"
git checkout branch-a
git checkout main :rel/path/to/yourchangedfiles
# if this happens:
error: pathspec ':rel/path/to/yourchangedfiles' did not match any file(s) known to git
# then just rm the folder
trash-put rel/path/to/yourchangedfiles
언급URL : https://stackoverflow.com/questions/7217894/moving-changed-files-to-another-branch-for-check-in 입니다.
'programing' 카테고리의 다른 글
Eclipse CDT에서 C++11/C++0x 지원을 활성화하려면 어떻게 해야 합니까? (0) | 2023.04.25 |
---|---|
장고는 하루에 10만 명이 넘게 방문했나요? (0) | 2023.04.25 |
Windows 명령 프롬프트에서 .sh를 실행하는 방법은 무엇입니까? (0) | 2023.04.25 |
iOS 13에서 검출 시트가 해제되었습니다. (0) | 2023.04.20 |
내부 조인을 사용하여 PostgreSQL 삭제 (0) | 2023.04.20 |