답변:
커밋하지 않은 경우 :
git stash
git checkout some-branch
git stash pop
다음 이후에 커밋하고 변경하지 않은 경우 :
git log --oneline -n1 # this will give you the SHA
git checkout some-branch
git merge ${commit-sha}
추가 작업을 수행 한 후 수행 한 경우 :
git stash
git log --oneline -n1 # this will give you the SHA
git checkout some-branch
git merge ${commit-sha}
git stash pop
git show
또는 사용 git rev-parse HEAD
)를 확인하고 분기로 전환 한 git cherry-pick
다음 커밋 해시 를 따르십시오.
git merge _hash_
git merge <hash-of-the-commit-you-just-made>
.
이것은 나를 도왔다
git checkout -b newbranch
git checkout master
git merge newbranch
git branch -d newbranch
git checkout master
결과는 다음과 같습니다.
Warning: you are leaving 2 commits behind, not connected to
any of your branches:
1e7822f readme
0116b5b returned to clean django
If you want to keep them by creating a new branch, this may be a good time to do so with:
git branch new_branch_name 1e7822f25e376d6a1182bb86a0adf3a774920e1e
이제 해봅시다 :
git merge 1e7822f25e376d6a1182bb86a0adf3a774920e1e
git gc
당신이 그 커밋을 잃게 두 명령을 실행 사이,하지만 당신은 실행하지 않는 한 git gc
자동으로는 상당히 자유로운 접근 위험을 감수해야한다. 나는 여전히 babay의 대답을 따를 것입니다.하지만 두 개의 추가 명령을 작성하지 않고 저장하려면이 방법이 필요합니다.
여기 다른 길을 떠나
git branch newbranch
git checkout master
git merge newbranch
또는 기본 분리 된 헤드 상태가 아닌 분기를 체크 아웃하도록 서브 모듈을 설정할 수 있습니다.
추가하기 위해 편집 :
한 가지 방법은 -b 플래그와 함께 서브 모듈을 추가 할 때 서브 모듈의 특정 분기를 체크 아웃하는 것입니다.
git submodule add -b master <remote-repo> <path-to-add-it-to>
또 다른 방법은 하위 모듈 디렉토리로 가서 체크 아웃하는 것입니다.
git checkout master
gitmodules
아마도 업데이트 ?
이 상황에서 끝나는 한 가지 방법은 원격 지점에서 리베이스를 수행 한 후입니다. 이 경우 새로운 커밋은 가리 키지 HEAD
만 master
가리 키지 않습니다. 다른 브랜치를 리베이스하기 전의 위치를 가리 킵니다.
다음 master
을 수행 하여이 커밋을 새로 만들 수 있습니다 .
git branch -f master HEAD
git checkout master
이 설정은 강제로 업데이트 master
하고 HEAD
(켜지 않은 상태 master
)로 전환됩니다 master
.
최근 에이 문제가 다시 발생했습니다. 마지막으로 서브 모듈을 다루고 git에 대해 더 많이 알게 된 지 오래되었습니다. 커밋하려는 브랜치를 체크 아웃하는 것으로 충분하다는 것을 깨달았습니다. Git은 작업 트리를 숨기지 않아도 유지합니다.
git checkout existing_branch_name
새로운 지점에서 일하고 싶다면 다음과 같이하십시오.
git checkout -b new_branch_name
작업 트리에 충돌이 있으면 체크 아웃이 실패하지만 매우 드문 일이며 발생하면 숨기고 팝업하여 충돌을 해결할 수 있습니다.
수락 된 답변과 비교 하여이 답변은 어쨌든 실행하는 데 오래 걸리지 않는 두 명령의 실행을 절약합니다. 그러므로 나는 현재 받아 들여진 답보다 기적적으로 더 많은 찬사를 받거나 (또는 적어도 가까운)이 대답을 받아들이지 않을 것이다.
다음 방법이 효과적 일 수 있습니다.
git rebase HEAD master
git checkout master
이렇게하면 현재 HEAD 변경 사항이 마스터 위에 리베이스됩니다. 그런 다음 지점을 전환 할 수 있습니다.
다른 방법은 지점을 먼저 체크 아웃하는 것입니다.
git checkout master
그런 다음 Git은 분리 된 커밋의 SHA1을 표시해야합니다. 예를 들어 체리를 선택할 수 있습니다.
git cherry-pick YOURSHA1
또는 최신 것을 병합 할 수도 있습니다.
git merge YOURSHA1
서로 다른 브랜치에서 커밋을 모두 보려면 (이를 확인하십시오) git reflog
.
나는 2012 년에 babay에게 누군가가 지점에 있지 않고 커밋하지 않았다는 사실을 알지 못할 것이라고 생각했다는 것을 알고 있습니다. 이것은 단지 나에게 일어난 일이므로, 내가 틀렸다는 것을 인정해야한다고 생각하지만, 이것이 나에게 일어나기까지 2016 년이 걸렸다는 것을 고려할 때 실제로는 그렇지 않을 것이라고 주장 할 수 있습니다.
어쨌든, 새로운 지사를 만드는 것은 제 생각에는 지나치지 않습니다. 당신이해야 할 일은 :
git checkout some-branch
git merge commit-sha
다른 브랜치를 체크 아웃하기 전에 커밋을 복사하지 않은 경우 다음을 실행하여 쉽게 찾을 수 있습니다.
git reflog