2017-11-06 11 views
1

master/develop/feature 브랜치와 함께 git를 사용하고 있습니다.git : 실수로 기능 브랜치를 master 대신 develop으로 병합했습니다.

마스터에만 README 파일이 있습니다. 불행하게도, 나는 지점을 개발하는 대신 마스터로 작업했던 지형지 물을 실수로 병합했습니다. 또한 지형지 ​​물을 제거했습니다.

나는 자식에 대해 거의 안다. 나는 무엇을해야할지 혼란 스럽다. 하지만 옳은 일은 이미 제거 된 지형지 물 분기의 변경 사항을 병합하여 병합을 마스터로 개발하고 되돌리는 것입니다. 그러나 이미 지형지 물을 제거한 경우 어떻게해야합니까?

답변

3

참고 :

또한 다음 명령을 실행하여, 당신은 당신의 전체 커밋 역사를 얻을 수 있습니다. 보유하고있는 경우에도 여전히 작동 할 수 있지만 repo를 사용하는 다른 모든 사용자에게 영향을주는 "강제 푸시"가 필요할 것입니다 (본질적으로 상황 인 것처럼 git rebase 문서의 "업스트림 rebase에서 복구"참조). 그러나 그렇지 않다면 걱정할 필요가 없습니다. 따라서 :

첫 번째로 지형지 물을 다시 만듭니다. 나는 그것이 단지 국부적으로 존재했다고 가정하고있다. (이 병합하기 전에 밀려 한 경우, 원격에서 복구 할 수 있습니다,하지만 어느 쪽이든이 방법은 아래에 작동합니다.) 그래서 이제 기능 분기 병합에 복원

git checkout master 
git checkout -b feature 
git reset --hard HEAD^2 

가의 커밋 " 두 번째 부모 "- 병합 이전의 위치 여야합니다.

다음으로 master에서 병합을 제거해야합니다.

git checkout master 
git reset --hard HEAD^ 

그리고 그게 전부입니다. 기능을 개발 분기에 병합 할 준비가되었습니다.

커밋 이전에 마스터를 다시 얻기의
+0

이미 병합을 밀어 넣었습니다. 나는 지금 git rebase를 연구 중이다. –

1

먼저 체크 아웃 마스터 지점 git checkout master을 사용하고 마스터 지점에서 feature라는 새로운 지점 작성 :

git checkout -b feature 

다시 체크 아웃 마스터 분기를, 다음과 같은 명령을 실행

git log 

것은이 제공해야합니다을 master 브랜치에있는 커밋 목록. 되돌리려는 커밋 ID를 복사하려면 커밋 목록을 스크롤해야합니다. 다음 명령을 쓸 필요가, 그 ID가 advcf456yhn8입니다 가정 :이 & 모든 변경 사항을 되돌릴 ID를 커밋 다시 실제 내용에 특정한에서 되돌아갑니다

git reset --hard advcf456yhn8 

.

feature 브랜치를 만들었습니다. develop에 병합 할 수 있습니다. 단순히 git checkout develop & git merge feature을 사용하여 feature 분기를 병합하십시오. 난 당신이하지 push 병합의 결과를 에드 가지고 여기에 있으리라 믿고있어

git reflog 
+1

확실하지 않음 하지만 알고있는 예제 ID는 유효하지 않습니다. 확약 ID는 16 진수 (0-9 및 a-f)로만 구성됩니다. 어쨌든 커밋 ID로 직접 작업하지 않아도되는이 작업을 수행하는 다소 간단한 명령이 있습니다. 그리고 두 지점에서 병합을 제거하라고 조언합니다. –

+0

방금 ​​예제를주었습니다. 그는 그가 새끼를 낳았다 고 언급 했으므로 변경 사항 되돌리기에 대한 기본 실행을 제안하는 것이 더 좋은 생각이었습니다. –

+0

나는 그 일을 생각하고 있었다. 그러나 마스터 브랜치를 리셋하면 새로운 기능 브랜치가 변경 될 수 있습니다. –

1

쉬운 방법 : 당신은 자식에 어떤 GUI를 사용하는 경우

  1. 복제하면, 사용 옵션이
  2. 을 ID를 저지 특정을 선택 "복귀"저장소
  3. 마스터
  4. 일단 되 돌리면 친절하게 커밋하고 마스터로 푸시합니다.

CMD :

  1. 자식 클론 마스터
  2. 자식이 다시 --hard HEAD^
  3. 자식이 ""-m 커밋
  4. 자식 푸시 당신이 경우
+0

해당 커밋은 병합입니다. 제공된 명령이 작동하지 않는 것을 포함하여 병합을 되돌리려 고 시도 할 때 여러 가지 복잡한 문제가 있습니다. 또한 병합이없는 경우에도 되돌리기는 이전 커밋으로 돌아 가지 않습니다. 이전 상태로만 컨텐츠를 갱신합니다. –