끌어 오기 후 커밋 된 (그러나 푸시되지 않은) 변경 사항을 새 분기로 이동
나는 (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
는 어때:
- 현재 HEAD에서 분기합니다.
- 새 지점이 아닌 master 에 있는지 확인하십시오 .
git reset
변경을 시작하기 전에 마지막 커밋으로 돌아갑니다.git pull
리셋으로 버린 원격 변경 사항 만 다시 잡아 당깁니다.
아니면 지점을 다시 병합하려고 할 때 폭발합니까?
또는 잘못된 분기를 커밋 한 직후 다음 단계를 수행하십시오.
git log
git diff {previous to last commit} {latest commit} > your_changes.patch
git reset --hard origin/{your current branch}
git checkout -b {new branch}
git apply your_changes.patch
1 단계와 2 단계에 대한 더 간단한 접근법이 있다고 상상할 수 있습니다.
당신의 소스의 신선한 사본을 체크 아웃
git clone ........
원하는 위치에서 분기 만들기
git checkout {position}
git checkout -b {branch-name}
원격 저장소 추가
git remote add shared ../{original sources location}.git
원격 소스 받기
git fetch shared
원하는 지점 확인
git checkout {branch-name}
소스 병합
git merge shared/{original branch from shared repository}
나에게 이것은 가장 좋은 방법이었다.
- 변경 사항 확인 및 병합 충돌
git fetch
- 새 지점을
git branch my-changes
만들고 원격으로 푸시 - 새로 생성 된 지점으로 업스트림 변경
git master -u upstream-branch remotes/origin/my-changes
- 커밋을 새로운 업스트림 브랜치로 푸시하십시오.
- 이전 업스트림으로 다시 전환
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
원하는 순서대로
훨씬 간단한 방법은 다음과 같습니다.
새로운 지점 만들기
새 지점에서 수행
git merge master
-커밋 된 (푸시되지 않은) 변경 사항을 새 지점으로 병합합니다.로컬 마스터 분기 삭제 분기를 강제로 삭제하기 때문에 대신
git branch -D master
사용하십시오 .-D
-d
그냥 할
git fetch
마스터 지점에와을git pull
당신이 당신의 팀의 최신 코드를 확인하기 위해 마스터 분기에.
'Programing' 카테고리의 다른 글
스피너 텍스트 크기와 텍스트 색상을 변경하는 방법은 무엇입니까? (0) | 2020.02.21 |
---|---|
윤곽 반경? (0) | 2020.02.21 |
AngularJS : 서비스 변수를 보는 방법? (0) | 2020.02.21 |
LaTeX 테이블에서 텍스트를 줄 바꿈하는 방법은 무엇입니까? (0) | 2020.02.21 |
Json.net을 사용하여 json 객체를 동적 객체로 직렬화 해제 (0) | 2020.02.21 |