Programing

끌어 오기 후 커밋 된 (그러나 푸시되지 않은) 변경 사항을 새 분기로 이동

lottogame 2020. 2. 21. 22:03
반응형

끌어 오기 후 커밋 된 (그러나 푸시되지 않은) 변경 사항을 새 분기로 이동


나는 (37 개의 커밋으로 '출발지 / 마스터'보다 앞서있다.) 공정한 약간의 일을 해냈다 master. 이러한 커밋은 내 로컬 컴퓨터에만 존재하며 추진되지 않았지만 origin다른 개발자가 추진하고 origin/master있으며 이러한 변경 사항을 적용 했기 때문에 상황이 다소 복잡 합니다.

37 개의 로컬 커밋을 소급하여 새로운 지점으로 소급 이동하려면 어떻게해야합니까? 문서를 기반으로하면 이 작업을 수행 git rebase --onto my-new-branch master하거나 수행 ...origin/master해야하지만 둘 다 "치명적 : 단일 개정이 필요합니다"라는 오류가 발생합니다. man git-rebase에 개정을 제공하는 것에 대해 아무 말도 rebase하지 않으며 예제는 그렇게하지 않으므로이 오류를 해결하는 방법을 모르겠습니다.

이 것을 (참고 하지 의 중복 기존 이동, 힘내에서 새로운 지점에 미트되지 않은 작업 또는 다른 힘내 지점에 내 로컬 커밋되지 않은 변경 내용을 병합하는 방법은? 그 질문은 로컬 작업 트리에서 커밋되지 않은 변경되지 않은 변경 사항 처리로 현지에서 커밋되었습니다.)


커밋을 아직 다른 곳으로 푸시하지 않았기 때문에 괜찮을 것입니다. 그리고 당신은 이후 지점의 역사를 자유롭게 다시 쓸 수 있습니다 origin/master. 우선은이 실행됩니다 git fetch origin있는지 확인하기 위해 origin/master최신입니다. 현재에 있다고 가정하면 다음 master을 수행 할 수 있습니다.

git rebase origin/master

...하는 수없는 커밋의 모든 재생됩니다 origin/master상을 origin/master. rebase의 기본 동작은 병합 커밋 (예 : git pull아마도 도입 된 커밋)을 무시 하는 것 origin/master입니다. 각 커밋이 도입 한 패치를에 적용하려고합니다 . (이 과정에서 약간의 충돌을 해결해야 할 수도 있습니다.) 결과에 따라 새 분기를 만들 수 있습니다.

git branch new-work

... 다음 다시 master돌아 가기를 origin/master:

# Use with care - make sure "git status" is clean and you're still on master:
git reset --hard origin/master

와 조작 지사의 이런 종류의 일을 할 때 git branch, git reset등 I를이와 그래프 커밋에 유용 자주보고 찾을 gitk --all또는 유사한 도구를 단지 다른 모든 심판이 가리키는 곳 이해하는지 확인.

또는 마스터가 처음있는 위치 ( git branch new-work-including-merges)를 기반으로 주제 분기를 만든 다음 master위와 같이 재설정 할 수 있습니다. 그러나 주제 분기에 병합이 포함되며 origin/master아직 변경 사항을 푸시하지 않았으므로 기록을 더 깔끔하게 유지하기 위해 리베이스를 수행하는 것이 좋습니다. 또한 결국 토픽 브랜치를 다시 마스터로 병합하면 변경 사항이 더 분명해집니다.


커밋 수가 적고 하나의 메가 커밋으로 결합되어 있는지 상관하지 않으면 잘 작동하며 그렇게하는 것이 무섭지 않습니다 git rebase.

파일을 스테이지 해제하십시오 (1을 커밋 수로 대체)

git reset --soft HEAD~1

새 지점을 만들다

git checkout -b NewBranchName

변경 사항을 추가하십시오

git add -A

커밋하다

git commit -m "Whatever"

나는 같은 문제를 고수했다. 공유하고 싶은 가장 쉬운 솔루션을 찾았습니다.

1) 변경 사항으로 새 지점을 만듭니다.

git checkout -b mybranch

2) 원격 서버에서 새 분기 코드를 푸시하십시오.

git push origin mybranch

3) 마스터 지점으로 다시 체크 아웃하십시오.

git checkout master

4) 원격 서버로 마스터 분기 코드를 재설정하고 로컬 커밋을 제거하십시오.

git reset --hard origin/master

또 다른 방법은 branch1-커밋 된 변경 사항이있는 branch입니다. branch2-바람직한 분기입니다.

git fetch && git checkout branch1
git log

이동해야 할 커밋 ID를 선택하십시오.

git fetch && git checkout branch2
git cherry-pick commit_id_first..commit_id_last
git push

이제 초기 브랜치에서 푸시되지 않은 커밋을 되돌립니다.

git fetch && git checkout branch1
git reset --soft HEAD~1

는 어때:

  1. 현재 HEAD에서 분기합니다.
  2. 새 지점이 아닌 master 에 있는지 확인하십시오 .
  3. git reset 변경을 시작하기 전에 마지막 커밋으로 돌아갑니다.
  4. git pull 리셋으로 버린 원격 변경 사항 만 다시 잡아 당깁니다.

아니면 지점을 다시 병합하려고 할 때 폭발합니까?


또는 잘못된 분기를 커밋 한 직후 다음 단계를 수행하십시오.

  1. git log
  2. git diff {previous to last commit} {latest commit} > your_changes.patch
  3. git reset --hard origin/{your current branch}
  4. git checkout -b {new branch}
  5. git apply your_changes.patch

1 단계와 2 단계에 대한 더 간단한 접근법이 있다고 상상할 수 있습니다.


  1. 당신의 소스의 신선한 사본을 체크 아웃

    git clone ........

  2. 원하는 위치에서 분기 만들기

    git checkout {position} git checkout -b {branch-name}

  3. 원격 저장소 추가

    git remote add shared ../{original sources location}.git

  4. 원격 소스 받기

    git fetch shared

  5. 원하는 지점 확인

    git checkout {branch-name}

  6. 소스 병합

    git merge shared/{original branch from shared repository}


나에게 이것은 가장 좋은 방법이었다.

  1. 변경 사항 확인 및 병합 충돌 git fetch
  2. 새 지점을 git branch my-changes만들고 원격으로 푸시
  3. 새로 생성 된 지점으로 업스트림 변경 git master -u upstream-branch remotes/origin/my-changes
  4. 커밋을 새로운 업스트림 브랜치로 푸시하십시오.
  5. 이전 업스트림으로 다시 전환 git branch master --set-upstream-to remotes/origin/master

내가 사용하고있는 더 간단한 접근법 (4 개의 커밋을 옮기고 싶다고 가정) :

git format-patch HEAD~4

(4 개의 .patch파일에 대한 마지막 명령을 실행 한 디렉토리를보십시오 )

git reset HEAD~4 --hard

git checkout -b tmp/my-new-branch

그때:

git apply /path/to/patch.patch

원하는 순서대로


훨씬 간단한 방법은 다음과 같습니다.

  1. 새로운 지점 만들기

  2. 새 지점에서 수행 git merge master-커밋 된 (푸시되지 않은) 변경 사항을 새 지점으로 병합합니다.

  3. 로컬 마스터 분기 삭제 분기를 강제로 삭제하기 때문에 대신 git branch -D master사용하십시오 .-D-d

  4. 그냥 할 git fetch마스터 지점에와을 git pull당신이 당신의 팀의 최신 코드를 확인하기 위해 마스터 분기에.

참고 URL : https://stackoverflow.com/questions/5066041/moving-committed-but-not-pushed-changes-to-a-new-branch-after-pull



반응형