git로 작업하고 '커밋'하고 '푸시'한 후 잘못된 브랜치를 사용하고 있음을 깨달았습니다!
이제 나는 wrong_branch의 변경 사항을 어떤 식 으로든 제거하고 right_branch의 변경 사항을 커밋하고 푸시해야합니다.
이를 수행하는 가장 좋은 (그리고 간단한) 방법은 무엇입니까?
감사합니다
git로 작업하고 '커밋'하고 '푸시'한 후 잘못된 브랜치를 사용하고 있음을 깨달았습니다!
이제 나는 wrong_branch의 변경 사항을 어떤 식 으로든 제거하고 right_branch의 변경 사항을 커밋하고 푸시해야합니다.
이를 수행하는 가장 좋은 (그리고 간단한) 방법은 무엇입니까?
감사합니다
답변:
해당 분기로 전환하고 git log
및 git revert
해당 커밋을 개별적으로 확인하십시오 . 그런 다음 원하는 분기로 다시 전환 git cherry-pick
하면 git refs에서 특정 커밋을 선택하고 올바른 분기에 병합하는 데 사용할 수 있습니다 .
git checkout wrong_branch
git revert commitsha1
git revert commitsha2
git checkout right_branch
git cherry-pick commitsha1
git cherry-pick commitsha2
커밋이 함께 그룹화되고 더티 커밋 후에 푸시 된 커밋이없는 경우를 사용 git reset
하여 커밋 직전 상태로 잘못된 브랜치를 가져온 다음 다시 사용 git cherry-pick
하여 커밋을 올바른 브랜치로 가져올 수 있습니다.
git checkout wrong_branch
git reset commitsha3 #commit just before commitsha2
git checkout right_branch
git cherry-pick commitsha1
git cherry-pick commitsha2
git cherry-pick commitsha1 commitsha2
.
revert
너무 깨끗하고보다 덜 극적이다 reset
당신이 정말로 중요한 것을 삭제하지 않으려면 (자격 증명을?)
가장 간단한 방법은 git rebase
. 해당 설정이 있다고 가정합니다.
A -- B -- C -- C1 -- C2 # right branch
\
\-- D -- C3 -- C4 # wrong branch
변경 C3, C4를 오른쪽 분기로 이동하려고합니다.
git checkout -b new_wrong_branch D
git checkout wrong_branch
git rebase D --onto right_branch
git checkout right_branch
git merge right_branch wrong_branch
git branch -d wrong_branch
git branch rename new_wrong_branch wrong_branch
이제 설정은
A -- B -- C -- C1 -- C2 -- C3 -- C4 # right_branch
\
\ -- D # wrong_branch
그런 다음 강제로 결과를 푸시해야합니다 (아직 원격 저장소와 동기화하지 않은 경우).
git push -f remote:right_branch
git push -f
더 나은 사용 git push --force-with-lease
. 적어도 아무도 커밋 위에 다른 커밋을 푸시하지 않은 경우에만 원격 참조가 업데이트되도록합니다.