방금 잘못된 지점에 완벽하게 최선을 다했습니다. 마스터 브랜치에서 마지막 커밋을 취소 한 다음 동일한 변경 사항을 적용하여 업그레이드 브랜치로 가져 오려면 어떻게해야합니까?
답변
변경 사항을 아직 푸시하지 않은 경우 소프트 리셋을 수행 할 수도 있습니다.
git reset --soft HEAD^
커밋을 되돌 리지만 커밋 된 변경 사항을 다시 인덱스에 넣습니다. 브랜치가 서로에 대해 상대적으로 최신 상태라고 가정하면 git은 다른 브랜치로 체크 아웃 할 수있게하면 간단하게 커밋 할 수 있습니다.
git checkout branch
git commit
단점은 커밋 메시지를 다시 입력해야한다는 것입니다.
답변
이 주제에 대해 4 년이 늦었지만 이것은 누군가에게 도움이 될 수 있습니다.
마스터에서 커밋하고 모두 커밋하기 전에 새 브랜치를 생성하지 않은 경우 커밋 수에 관계없이 다음 방법이 더 쉽습니다.
git stash # skip if all changes are committed
git branch my_feature
git reset --hard origin/master
git checkout my_feature
git stash pop # skip if all changes were committed
이제 마스터 브랜치가 같고 origin/master
모든 새로운 커밋이 켜져 my_feature
있습니다. 참고 my_feature
로컬 지점이 아닌 원격 하나입니다.
답변
깨끗한 (수정되지 않은) 작업 사본이있는 경우
한 커밋을 롤백하려면 다음 단계에 대한 커밋 해시를 확인하십시오.
git reset --hard HEAD^
커밋을 다른 브랜치로 가져 오려면 :
git checkout other-branch
git cherry-pick COMMIT-HASH
변경 사항을 수정했거나 추적하지 않은 경우
또한주의 git reset --hard
할 어떤 비 추적 및 수정 변경 죽일 당신이 그있는 경우에 그래서 당신이 선호 할 수도, 당신이있을 수 있습니다를 :
git reset HEAD^
git checkout .
답변
변경 사항을 이미 푸시 한 경우 HEAD를 재설정 한 후 다음 푸시를 강제 실행해야합니다.
git reset --hard HEAD^
git merge COMMIT_SHA1
git push --force
경고 : 강제 재설정은 원격 브랜치의 상태를 로컬 브랜치의 현재 상태로 완전히 덮어 쓰는 반면 하드 리셋은 작업 복사본에서 커밋되지 않은 수정 사항을 취소합니다.
Windows의 경우 (Bash가 아닌 Windows 명령 줄 사용) 실제로 ^^^^
는 1이 아닌 4가 되므로
git reset --hard HEAD^^^^
답변
나는 최근에 다른 지점에 헌신해야했을 때 실수로 마스터로 변경을 저지른 동일한 작업을 수행했습니다. 그러나 나는 아무것도 밀지 않았다.
방금 잘못된 지점에 최선을 다하고 그 이후로 아무것도 변경하지 않았고 repo로 푸시하지 않은 경우 다음을 수행 할 수 있습니다.
// rewind master to point to the commit just before your most recent commit.
// this takes all changes in your most recent commit, and turns them into unstaged changes.
git reset HEAD~1
// temporarily save your unstaged changes as a commit that's not attached to any branch using git stash
// all temporary commits created with git stash are put into a stack of temporary commits.
git stash
// create other-branch (if the other branch doesn't already exist)
git branch other-branch
// checkout the other branch you should have committed to.
git checkout other-branch
// take the temporary commit you created, and apply all of those changes to the new branch.
//This also deletes the temporary commit from the stack of temp commits.
git stash pop
// add the changes you want with git add...
// re-commit your changes onto other-branch
git commit -m "some message..."
참고 : 위 예제에서 git reset HEAD ~ 1로 1 commit을 되 감았습니다. 그러나 n 커밋을 되 감고 싶다면 git reset HEAD ~ n을 수행 할 수 있습니다.
또한 잘못된 분기에 커밋하고 잘못된 분기에 커밋했다는 것을 깨닫기 전에 코드를 더 작성하면 git stash를 사용하여 진행중인 작업을 저장할 수 있습니다.
// save the not-ready-to-commit work you're in the middle of
git stash
// rewind n commits
git reset HEAD~n
// stash the committed changes as a single temp commit onto the stack.
git stash
// create other-branch (if it doesn't already exist)
git branch other-branch
// checkout the other branch you should have committed to.
git checkout other-branch
// apply all the committed changes to the new branch
git stash pop
// add the changes you want with git add...
// re-commit your changes onto the new branch as a single commit.
git commit -m "some message..."
// pop the changes you were in the middle of and continue coding
git stash pop
참고 : 나는이 웹 사이트를 참조
https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/
답변
따라서 시나리오가 master
커밋했지만 커밋하려는 의도 another-branch
(아직 존재하지 않을 수도 있음)이지만 아직 푸시하지 않은 경우 쉽게 해결할 수 있습니다.
// if your branch doesn't exist, then add the -b argument
git checkout -b another-branch
git branch --force master origin/master
이제 모든 커밋이 시작 master
됩니다 another-branch
.
http://haacked.com/archive/2015/06/29/git-migrate/ 에서 사랑으로 공급
답변
예 를 들어 다음 과 같이 여러 커밋 이 필요한 경우이 답변 을 자세히 설명하십시오 .develop
new_branch
git checkout develop # You're probably there already
git reflog # Find LAST_GOOD, FIRST_NEW, LAST_NEW hashes
git checkout new_branch
git cherry-pick FIRST_NEW^..LAST_NEW # ^.. includes FIRST_NEW
git reflog # Confirm that your commits are safely home in their new branch!
git checkout develop
git reset --hard LAST_GOOD # develop is now back where it started