아직 푸시되지 않은 Git 병합을 취소합니다.
실수로 뛰었어요.git merge some_other_branch
마스터로의 변경을 푸시하지 .오리진 마스터에 변경을 가하지 않았습니다.합을을을 소소취 병소 ?? ??? ??? ???
합치면, 합치면 이렇게 됩니다.git status
이렇게 말합니다.
# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.
이 모든 커밋을 취소하려면 어떻게 해야 합니까?
□□□□□□□□□git reflog
병합하기 전에 어떤 커밋이 하나인지 확인합니다(예: 1개입니다).git reflog
좋은 가 될 것 같습니다.git log
그런 다음 다음을 사용하여 재설정할 수 있습니다.
git reset --hard commit_sha
다른 방법도 있습니다.
git reset --hard HEAD~1
1개의 커밋을 돌려받을 수 있습니다.
수정되었거나 커밋되지 않았거나 저장되지 않은 파일은 수정되지 않은 상태로 재설정됩니다.변경 내용을 저장하거나 참조하려면 다음과 같이 하십시오.--merge
잘 알겠습니다.
@Velmont가 그의 답변에서 제안한 바와 같이, 이 직접적인 경우에는 다음을 사용합니다.
git reset --hard ORIG_HEAD
변경 사항을 보존할 수 있으므로 더 나은 결과를 얻을 수 있습니다. ORIG_HEAD
병합이 발생하기 직전에 커밋을 가리키므로 사용자가 직접 사냥할 필요가 없습니다.
또 하나의 팁은 '먹다'를 사용하시면 됩니다.--merge
바꿔서 쓰세요.--hard
불필요하게 파일이 재설정되지 않으므로 다음과 같이 하십시오.
git reset --merge ORIG_HEAD
--대화됩니다.
인덱스를 재설정하고 작업 트리에서 <commit>와 HEAD 간에 다른 파일을 업데이트하지만 인덱스와 작업 트리 간에 다른 파일(예: 추가되지 않은 변경 사항이 있음)은 유지합니다.
로컬 마스터가 원본/마스터보다 앞서 있지 않다고 가정하면 다음을 수행할 수 있습니다.
git reset --hard origin/<branch-name>
그래서 당신이 이걸 했다고 가정하면요master
그 다음 지역, 지역, 지역, 지역, 지역, 지역, 지역, 지역, 지역, 지역, 지역, 지역, 지역, 지역, 지역master
나뭇가지와 모양이 같아야 합니다.origin/master
요.
Git북의 4장과 Linus Torvalds의 원본 게시물을 참조하십시오.
이미 푸시된 병합을 취소하려면 다음과 같이 하십시오.
git revert -m 1 commit_hash
리너스가 말한 것처럼 브랜치를 다시 커밋할 경우 반드시 되돌리십시오.
가장 간단한 명령어가 빠진 것이 이상합니다.대부분의 응답은 작동하지만 방금 한 병합을 취소하면 다음과 같은 쉽고 안전한 방법을 사용할 수 있습니다.
git reset --merge ORIG_HEAD
참고 자료입니다.ORIG_HEAD
이겁니다.
(그것은) 그렇다, 아니다.--merge
이겁니다.그냥 그래요.git reset --hard ORIG_HEAD
그러나 아직 확정되지 않은 변경은 건드리지 않으므로 안전합니다.)
새로운 Git 버전에서 아직 병합을 커밋하지 않았고 병합 충돌이 있는 경우 다음과 같이 간단히 수행할 수 있습니다.
git merge --abort
터터에서요.man git merge
다음을 참조하십시오
[this]는 병합으로 충돌이 발생한 후에만 실행할 수 있습니다.
git merge --abort
는 병합 프로세스를 중단하고 이전 상태를 재구성하려고 합니다.
이전 커밋으로 재설정해야 합니다.이렇게 하면 됩니다.
git reset --hard HEAD^
아니면 심지어요HEAD^^
이겁니다.몇 걸음 뒤로 물러나야 할지 모르는 경우 언제든지 전체 SHA 참조를 제공할 수 있습니다.
만약 가 있고 마스터 브랜치가 로컬에 변화가 로 재설정할 수 있습니다.origin/master
요.
요즘 계속 쓰고 있어요.git reflog
잘 알겠습니다.이 작업은 병합이 방금 발생했으며 시스템에 있는 경우에만 작동합니다.
git reflog
이겁니다.
fbb0c0f HEAD@{0}: commit (merge): Merge branch 'master' into my-branch
43b6032 HEAD@{1}: checkout: moving from master to my-branch
e3753a7 HEAD@{2}: rebase finished: returning to refs/heads/master
e3753a7 HEAD@{3}: pull --rebase: checkout e3753a71d92b032034dcb299d2df2edc09b5830e
b41ea52 HEAD@{4}: reset: moving to HEAD^
8400a0f HEAD@{5}: rebase: aborting
첫 번째 줄은 병합이 발생했음을 나타냅니다.이렇게 이야기합니다.저는 단순해요git reset --hard 43b6032
병합 및 휴대품 이전부터 이 분기를 강제로 추적합니다.
병합 중이면 언제든지 중단할 수 있습니다.
git merge --abort
최신 Git으로 다음을 수행할 수 있습니다.
git merge --abort
이전 구문:
git reset --merge
구식입니다.
git reset --hard
하지만 사실, 주목할 가치가 있습니다.git merge --abort
에만 해당합니다.git reset --merge
을 고려하면MERGE_HEAD
병합 명령의Git 도움말에서 읽을 수 있습니다.이것은 병합 명령에 대한 Git 도움말에서 읽을 수 있습니다.
git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.
병합에 한 후, 병합이 없는 경우입니다.MERGE_HEAD
, 실패한 병합은 , 로 취소할 수 있습니다git reset --merge
그러나 반드시 ,와 함께 하는 것은 아니다.git merge --abort
따라서 동일한 항목에 대한 오래된 구문일 뿐만 아니라 새로운 구문일 수도 있습니다.
개인적으로 저는 발견합니다.git reset --merge
일상 업무에서 훨씬 더 강력하고 유용하기 때문에 항상 사용하고 있습니다.
분기가 병합되고 푸시되지 않은 경우 아래에 제공된 git reset 명령을 사용하여 병합을 취소합니다.
git reset --merge ORIG_HEAD
예를 들어 다음과 같습니다.
git reset --merge origin/master
다른 사람들이 준 대답은 비슷했지만 효과가 없었어요제가 한 일은 이렇습니다.
이렇게 하니까...
git reset --hard HEAD^
git status
...나에게 다음과 같은 상황을 알려줘요.
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 3 and 3 different commit(s) each, respectively.
그리고 같은 내용을 입력해야 했습니다.git reset
이겁니다.그럴 때마다 아래와 같이 메시지가 하나씩 바뀌었습니다.
> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 3 and 3 different commit(s) each, respectively.
> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 2 and 3 different commit(s) each, respectively.
> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 1 and 3 different commit(s) each, respectively.
> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch is behind 'origin/master' by 3 commits, and can be fast-forwarded.
때 상태 메시지가 바뀌어 있는 것을 보고 '아까부터'를 해보았습니다.git pull
이겁니다.
> git pull
Updating 2df6af4..12bbd2f
Fast forward
app/views/truncated | 9 ++++++---
app/views/truncated | 13 +++++++++++++
app/views/truncated | 2 +-
3 files changed, 20 insertions(+), 4 deletions(-)
> git status
# On branch master
간단히 말하자면, 제 명령은 다음과 같습니다.
git reset --hard HEAD^
git reset --hard HEAD^
git reset --hard HEAD^
git reset --hard HEAD^
git pull
당신은 당신의 헤드를 바꿔야 합니다. 물론 당신의 것이 아니라 git HEAD...
답하기 전에 배경을 조금 더 설명을 해드릴게요.HEAD
요.
First of all what is HEAD?
HEAD
는 현재 분기의 현재 커밋(커밋)에 대한 참조일 뿐입니다.
한 개만 있을 수 있어요.HEAD
제외) 입니다.git worktree
을(를) 참조하십시오.
ㅇㅇㅇㅇㅇㅇㅇ의 내용입니다.HEAD
이 안에 저장되어 있습니다..git/HEAD
SHA-1이라고 합니다.
detached HEAD
최근에 약속하지 않은 경우, 즉 '약속하다'를 의미합니다.HEAD
에서는 라고 하는 과거 커밋을 가리키고 있습니다.
에는 지점 이름 대신 SHA-1로 표시됩니다. SHA-1은 SHA-1로 지정되기 때문입니다.HEAD
는 현재 지점의 끝을 있지 않습니다.
분리된 헤드에서 복구하는 방법에 대한 몇 가지 옵션은 다음과 같습니다.
git checkout
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
원하는 커밋을 가리키는 새 분기가 체크아웃됩니다.
이 명령은 지정된 커밋으로 체크아웃합니다.
이 시점에서 분기를 만들고 이 시점부터 작업을 시작할 수 있습니다.
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# create a new branch forked to the given commit
git checkout -b <branch name>
git reflog
항상 사용하실 수 있습니다.reflog
네, 그렇습니다.
git reflog
에서는 를업트 the the the the the the the the the the the the the the the the the the the the the the the the the the the를 업데이트한 모든 변경 사항이 표시됩니다.HEAD
원하는 reflog 항목을 하면 reflog 항목이 설정됩니다.HEAD
이겁니다.
가 수정될 마다 HEAD에 새 항목이 표시됩니다.reflog
git reflog
git checkout HEAD@{...}
그러면 원하는 약속으로 돌아갑니다.
git reset --hard <commit_id>
HEAD를 원하는 커밋으로 "이동"합니다.
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.
git revert <sha-1>
지정된 커밋 또는 커밋 범위를 "실행 취소"합니다.
reset 은 지정된 commit.reset의 변경 사항을 "실행 취소"합니다.
원래 커밋도 기록에 남아 있는 동안 실행 취소 패치가 적용된 새 커밋이 커밋됩니다.
# add new commit with the undo of the original one.
# the <sha-1> can be any commit(s) or commit range
git revert <sha-1>
이 스키마는 어떤 명령이 무엇을 하는지 보여줍니다.
보시다시피요.reset && checkout
수정해 주세요.HEAD
요.
여러 가지 방법으로 할 수 있습니다.
1) 병합을 중단합니다.
잘못된 병합(잘못된 분기로 잘못 처리됨) 사이에 있는 경우 다음과 같이 분기로 가장 늦게 돌아가기 위해 병합을 피하려면 다음과 같이 하십시오.
git merge --abort
2) HEAD를 원격 분기로 재설정합니다.
원격 개발 분기에서 작업 중인 경우 다음과 같이 HEAD를 원격 분기의 마지막 커밋으로 재설정할 수 있습니다.
git reset --hard origin/develop
3) 현재 분기를 삭제하고 원격 저장소에서 다시 체크아웃합니다.
로컬 repo에서 원격/개발 지점과 동기화하는 지점 개발 작업을 수행 중임을 고려하면 다음과 같이 수행할 수 있습니다.
git checkout master
##to delete one branch, you need to be on another branch, otherwise you will fall with the branch :)
git branch -D develop
git checkout -b develop origin/develop
이렇게 하면 됩니다.git reflog
이겁니다.네, 그렇습니다
구체적으로는요.
$ git reflog
$ git reset --hard HEAD@{0}
커밋 ID를 조회하지 않는 단일 명령으로 이 문제를 해결할 수 있었습니다.
git reset --hard remotes/origin/HEAD
수락된 답변은 효과가 없었지만 이 명령어는 제가 원하는 결과를 달성했습니다.
충돌 및 병합이 완료되지 않은 경우 다음을 수행합니다.
git reset --hard HEAD~1
병합을 수행하는 동안 충돌이 발생한 경우 중단하면 최근 병합 변경 사항에서 제외됩니다.
git merge --abort
또는 특정 커밋 ID로 되돌리려는 경우입니다.
git reset --hard <commit-id>
아직 커밋하지 않은 경우만 사용할 수 있습니다.
$ git checkout -f
병합(및 사용자가 수행한 모든 작업)이 취소됩니다.
일치 기점으로 되돌리기 위한 질문(즉, 기점보다 먼저 커밋 없음)도 확인했습니다.더 조사해보니, 한 가지 더 있어요reset
이겁니다.
git reset --hard @{u}
참고: 고: 입니다.@{u}
줄임말이에요.origin/master
이 기능이 작동하려면 원격 저장소가 필요합니다.
"아직 푸시되지 않은 Git 병합을 취소합니다."라는 질문에 답합니다.
이렇게 사용하시면 됩니다.
git reset --hard HEAD~1
두 지점 마스터와 기능-1이 있는 다음 상황을 고려합니다.
$ git log --graph --oneline --all
Git 병합을 수행합니다.
$ git merge feature-1
$ git log --graph --oneline --all
Git 병합을 취소합니다.
$ git reset --hard HEAD~1
$ git log --graph --oneline --all
특정 커밋으로 병합 또는 재시작을 되돌리려면 다음 두 가지 명령만 사용할 수 있습니다.
git reset --hard commitHash
(예: 44a587491e32eafa1638aca7738)(44a587491e32eafa1638aca7738)을 다시 시작할 커밋을 사용해야 합니다git push origin HEAD --force
새 로컬 마스터 분기를 오리진/마스터로 보냅니다)(으)
행운을 빌어요!
가장 간단한 답은 오디뉴 벨몬트입니다.
먼저 하세요.git reset --merge ORIG_HEAD
변경을 누른 후 재설정하려는 사용자의 경우, 이 작업을 수행하십시오(git 재설정 병합 질문에 대한 첫 번째 게시물이기 때문입니다).
git push origin HEAD --force
이렇게 하면 꺼낸 후 병합된 변경 사항을 다시 가져오지 않는 방식으로 재설정됩니다.
추가 옵션을 살펴보기 위해, 저는 여기서 설명하는 분기 모델을 주로 따라왔습니다: http://nvie.com/posts/a-successful-git-branching-model/ 등--no-ff
네, 그렇습니다.
방금 이 페이지를 읽었는데, 실수로 릴리스 지점이 아닌 테스트 지점을 배포용 마스터와 병합한 것입니다(웹 사이트, 마스터는 라이브).테스트 브랜치에는 두 개의 다른 브랜치가 병합되어 있으며 총 6개의 커밋이 있습니다.
그래서 모든 커밋을 되돌리려면 하나가 필요했어요git reset --hard HEAD^
병합이 빠르게 전달되지 은 블록이었고 한 단계 뒤로 "분기가 병합되지 않음"이 되었습니다.병합이 빠르게 전달되지 않았기 때문에 병합은 블록이었고 한 단계 뒤로 "분기가 병합되지 않음"이 되었습니다.
병합과 해당 커밋이 아직 푸시되지 않은 경우 언제든지 다른 분기로 전환하고 원래 분기를 삭제한 후 다시 생성할 수 있습니다.
예를 들어 실수로 개발 분기를 마스터로 병합하여 실행 취소하려고 했습니다.다음 단계를 수행합니다.
git checkout develop
git branch -D master
git branch -t master origin/master
부일라! 마스터는 원점과 같은 단계에 있으며, 잘못 병합된 상태는 지워집니다.
전략은 다음과 같습니다.모든 것이 좋았던 곳에서 새로운 지점을 만듭니다.
근거: 병합을 되돌리는 것은 어렵습니다.병합을 커밋했는지, 푸시했는지, 병합 후 새 커밋이 있는지 등 여러 요소에 따라 솔루션이 너무 많습니다.또한 이러한 솔루션을 귀하의 사례에 적용하기 위해서는 git에 대한 비교적 깊은 이해가 여전히 필요합니다.일부 지침을 맹목적으로 따른다면 아무것도 병합되지 않는 "빈 병합"으로 끝날 수 있으며, 추가 병합 시도 시 Git은 "이미 최신 상태"라고 알려줍니다.
해결 방법:
를 들어 '합치자'고 가정해 보겠습니다.dev
안으로feature-1
요.
병합을 받을 리비전을 찾습니다.
git log --oneline feature-1 a1b2c3d4 Merge branch 'dev' into 'feature-1' <-- the merge you want to undo e5f6g7h8 Fix NPE in the Zero Point Module <-- the one before the merge, you probably want this one
확인해 보십시오(시간으로 되돌아가십시오).
git checkout e5f6g7h8
여기에서 새 분기를 만들고 확인합니다.
git checkout -b feature-1
이제 병합을 다시 시작할 수 있습니다.
병합: 합:: 병합:
git merge dev
병합 충돌을 수정합니다.
커밋: 밋:: 밋밋:
git commit
결과가 스러우면 오래된 가지를 삭제합니다.
git branch --delete feature-1
명령줄 솔루션을 원한다면 MBO의 답변을 따르는 것이 좋습니다.
초보자인 경우 그래픽 방식을 선호할 수 있습니다.
- 킥오프합니다.
gitk
명령줄에서 또는 있는 경우 파일 브라우저를 마우스 오른쪽 버튼으로 클릭하십시오.) - 두 개의 상위 노드가 있는 맨 위의 첫 번째 노드인 병합 커밋을 쉽게 찾을 수 있습니다.
- 첫 번째/왼쪽 부모(합병 전 현재 분기에 있는 부모, 일반적으로 빨간색)로 연결되는 링크를 따라갑니다.
- 선택한 커밋에서 "여기에 분기 재설정"을 마우스 오른쪽 버튼으로 클릭하고 하드 재설정을 선택합니다.
새 브랜치를 만든 다음 원하는 커밋을 선택하기만 하면 됩니다.
위의 많은 답변에서 설명한 바와 같이 보호되고 재설정되는 것보다 간단합니다.
할 수 있을 것 같아요.git rebase -i [hash] [branch_name]
여기서, where where에 where[hash]
다시 되돌리기(또는 다시 되돌리기(또는 다시 되돌리기) 원하는 커밋 수)에 대한 식별 해시입니다. 그런 다음 편집기에서 더 이상 원하지 않는 커밋 행을 삭제합니다.이겁니다.나가세요, 기도하세요.이겁니다.이렇게 하다를 해야 될 수도 있어요.git reset --hard
이겁니다.또한 특정 커밋을 기록에 보관하지 않으려는 경우 이를 사용하여 스택에서 꺼낼 수 있지만, 이 경우 리포지토리가 원하지 않는 상태로 남을 수 있습니다.
병합을 중단하려면 다음 명령을 사용합니다.
git merge --개요
먼저, 모든 것을 약속했는지 확인하세요.
그런 다음 리포지토리를 이전 작동 상태로 재설정합니다.
$ git reset f836e4c1fa51524658b9f026eb5efa24afaf3a36
아니면 ㄴㄴㄴ데 있다를 쓰거나요.
--hard
(커밋되지 않은 로컬 변경 사항이 모두 제거됩니다!)$ git reset f836e4c1fa51524658b9f026eb5efa24afaf3a36 --hard
잘못 병합된 커밋 전에 있었던 해시를 사용합니다.
다음을 통해 이전 올바른 버전의 맨 위에서 다시 커밋할 커밋을 선택하십시오.
$ git log 4c3e23f529b581c3cbe95350e84e66e3cb05704f commit 4c3e23f529b581c3cbe95350e84e66e3cb05704f ... commit 16b373a96b0a353f7454b141f7aa6f548c979d0a ...
다음을 수행하여 올바른 리포지토리 버전의 맨 위에 올바른 커밋을 적용합니다.
체리 픽(일부 기존 커밋에서 도입된 변경 사항)을 사용합니다.
git cherry-pick ec59ab844cf504e462f011c8cc7e5667ebb2e9c7
또는 다음과 같이 커밋 범위를 선택할 수 있습니다.
먼저 올바른 변경 사항을 확인한 후 병합합니다.
git diff 5216b24822ea1c48069f648449997879bb49c070..4c3e23f529b581c3cbe95350e84e66e3cb05704f
먼저 올바른 변경 사항을 확인한 후 병합합니다.
git cherry-pick 5216b24822ea1c48069f648449997879bb49c070..4c3e23f529b581c3cbe95350e84e66e3cb05704f
여기서 이는 잘못 커밋된 병합을 제외한 올바른 커밋의 범위입니다.
가장 간단한 기회 중 가장 간단한 기회입니다. 여기서 말하는 그 어떤 것보다도 훨씬 간단합니다.
로컬 지점(원격 아님 로컬 지점)을 제거한 후 다시 꺼냅니다.이렇게 하면 마스터 분기의 변경 사항을 실행 취소할 수 있으며, 모든 사용자가 적용하지 않을 변경 사항에 영향을 받게 됩니다.다시 시작하세요.
언급URL : https://stackoverflow.com/questions/2389361/undo-a-git-merge-that-hasnt-been-pushed-yet 입니다.
'programing' 카테고리의 다른 글
Eclipse에서 SVN 저장소의 자격 증명을 변경하려면 어떻게 해야 합니까? (0) | 2023.04.25 |
---|---|
WPF/C#에서 전역 키보드 후크(WH_KEYBOARD_LL)를 사용합니다. (0) | 2023.04.25 |
Eclipse 보안 스토리지입니다. (0) | 2023.04.25 |
Excel MATCH()가 일치하는 항목을 찾지 못하는 이유는 무엇입니까? (0) | 2023.04.25 |
다른 테이블에 없는 행 선택 (0) | 2023.04.20 |