- Git 은 리베이스
- 기 전에 리베
- 정기적인 재구축
- 인터랙티브 리베
- 포스-푸
- 충돌
이 가이드를 얻을 수 있도록 도와줍 시작과 리베이스,강진,그리고 fixingmerge 충돌습니다.
이 문서에 다이빙하기 전에 명령 줄을 통해 usingGit 에 익숙한지 확인하십시오.이 작업을 수행하려면 다음과 같은 작업을 수행해야합니다., 다음과 같은 rebase 옵션이 있습니다.
- 일반 rebase.
- 대화식 리베이스.
rebasing 전에
git rebase
커밋 기록을 다시 작성합니다. 그것을하는 것이 해로울 수 있습니다.나뭇 가지. 복잡하고 해결하기 어려운 병합 충돌을 일으킬 수 있습니다. 이러한 경우 기본 브랜치에 대해 브랜치를 리베이스하는 대신 대신 가져 오는 것이 좋습니다(git pull origin master
). 그것은 비슷한 것을 가지고 있습니다.기여자의 작업을 손상시키지 않으면 서 효과.,변경 사항을 잃지 않도록 리베이스하기 전에 분기를 백업하는 것이 더 안전합니다. 예를 들어,기능 branchcalledmy-feature-branch
-
열기 기능을 지점에서 터미널:
git checkout my-feature-branch
-
체크아웃 새로운 지점에서 그것:
git checkout -b my-feature-branch-backup
-
Go 다시 원점:
git checkout my-feature-branch
이제할 수 있습이 안전하게 재구축니다., 아무것도 잘못되면 복구할 수 있습니다 yourchanges 다시 설정하여my-feature-branch
에 대해my-feature-branch-backup
경우에는 추가되는 변경을my-feature-branch
후 백업을 만들 지점,당신은 그들을 잃을 다시 설정할 때.
일반 rebase
일반 rebase 를 사용하면 defaultbranch(또는 다른 분기)로 기능 분기를 업데이트 할 수 있습니다.이것은 Git 기반 개발 전략을위한 중요한 단계입니다., 코드베이스에 추가하는 변경 사항이 featurebranch 를 만든 후에 대상 분기에 추가 된 기존 변경 사항을 중단하지 않도록 할 수 있습니다.,
For example, to update your branch my-feature-branch
with master
:
-
Fetch the latest changes from
master
:git fetch origin master
-
Checkout your feature branch:
git checkout my-feature-branch
-
Rebase it against
master
:git rebase origin/master
-
Force-push to your branch.,
경우 리베:
- Git 수입 모든 커미 제출한
master
후 themoment 당신이 만든 기능을 지점까지는 순간이다. - Git 두사 당신은 당신의 기능을 지점에서 상의 모든 커밋에서 수입된
master
:
교체할 수 있습니다master
으로 다른 모든 지점하려는 리베이스에 대하여,예를 들어, release-10-3
., 할 수도 있습니다 바꾸기origin
기타 remoterepositories,예를 들어,upstream
. Localrepository 에 연결된 리모컨을 확인하려면git remote -v
를 실행할 수 있습니다.
병합 충돌이있는 경우 git 은 rebase 를 계속하기 전에 fixthem 을 입력하라는 메시지를 표시합니다.
자세한 내용은 rebasingand rebasing 전략에 대한 Git 의 문서를 확인하십시오.
대화 형 rebase
대화 형 rebase 를 사용하여 커밋을 수정할 수 있습니다. 예를 들어 commitmessage,스쿼시(여러 커밋을 하나로 결합),편집 또는 deletecommits 를 수정합니다., 과거 커밋 메시지를 변경하고 분기의 커밋 기록을 정리하여 깨끗하게 유지하기 위해 리베이스를 사용하십시오.
할 때 아무것도 변경하고 싶약에 사용 interactiverebase 전달하여 국기--interactive
(또는-i
)하는 튜토리얼 명령입니다.,
경우,예를 들어,편집할 마지막 세 범하지점(HEAD~3
)다음을 실행합니다.
git rebase -i HEAD~3
Git 열리면 마지막 세 commits 터미널에서 텍스트 편집기 describesall 대화형 리베이스 옵션을 사용하실 수 있습니다. 기본 옵션은pick
이며 커밋은 변경되지 않습니다. 각 커밋에서 수행하려는 작업에 따라pick
키워드를 바꿉니다. 그렇게하려면 편집해야합니다.터미널의 텍스트 편집기에서 커밋.,
예를 들어,사용하는 경우 Vim 텍스트 편집기로 ina macOS 의ZSH
포탄,그리고 당신은 스쿼시하려면 모든 세 가지 커밋(가로):
- 보이온의 키보드 스위치 Vim 의 수정 모드를 시작할 수 있습니다.
- 탐색 키보드와 화살표를 편집 두 번째 commit keywordfrom
pick
을squash
(또는s
). 세 번째 커밋에도 똑같이하십시오.첫 번째 커밋은 변경되지 않은 채로 두 번째 및 세 번째 커밋을 첫 번째 커밋으로 스쿼시 할 때(pick
)그대로 두어야합니다., - 탈출을 눌러 편집 모드를 벗어납니다.
:wq
를”쓰기”(저장)및”종료”로 입력하십시오.- Git 은 출력 커밋 메시지도 당신은 기회를 편집:
- 모든 라인을 시작으로
#
는 무시되고에 포함되지 않습 commitmessage. 다른 모든 것이 포함되어 있습니다. - 그대로 두려면
:wq
를 입력하십시오. 커밋 메시지를 편집하려면:편집 모드로 전환하고 커밋 메시지를 편집 한 다음 방금 한 것처럼 저장하십시오.,
- 모든 라인을 시작으로
- 하지 않은 경우 밀어의 커밋하여 원격 지기 전에 리베이스 밀어 변경합니다. 이러한 커밋을 이미 푸시했다면 대신 강제로 푸시하십시오.
명령 줄을 통한 편집 단계는 운영 체제 및 사용중인 쉘에 따라 약간 다를 수 있습니다.
git 에서 수많은 실행 취소 가능성을 확인하십시오.대화 형 리베이스를 더 깊이 살펴보십시오.,
포스-푸
를 수행할 때는 더 복잡한 작업,예를 들어,스쿼시,커밋 리셋 orrebase 의 지점,당신은 당해 업데이트를 원격니다.이러한 작업을 의미 다시 쓰기 commit 의 역사는 지점에 있습니다.를 업데이트를 통과,국기--force
또는-f
을push
명령입니다. 예를 들어:
git push --force origin my-feature-branch
강제 업데이트를 추천하지 않는 경우에는 sharedbranches.
또는 대신--force-with-lease
플래그를 전달할 수 있습니다., 그것이 더 안전하고,그것을 덮어쓰지 않는 모든 일에 remotebranch 면을 더 추가한에 추가되었 원격지점이 다른 사람에 의해
git push --force-with-lease origin my-feature-branch
경우에는 지점을 강제로 밀어 보호할 수 없습니다 강제 강요하지 않는 한 당신이 그것의 보호를 해제합니다. 그런 다음 강제 푸시하고 다시 보호 할 수 있습니다.,
충돌
로 Git 을 기반으로 비교하는 버전의 fileline-여 줄 때마다 라인을 변경 지점에서와 일치하 sameline 에서 변경된 지점(후 순간 당신이 만든 기능을 지점에서 그것),Gitidentifies 이러한 변경 내용으로 병합하다. 그것을 고치려면 선택해야합니다.유지하려는 해당 라인의 어떤 버전.
대부분의 충돌은 GitLab UI 를 통해 해결할 수 있습니다.더 복잡한 경우에는 해결하기위한 다양한 방법이 있습니다. 거기에 있습니다또한 Git GUI 앱이 도움이 될 수 있습니다.차이점을 확인하십시오.,
을 충돌을 해결 로컬로,당신은 다음과 같은 방법을 사용할 수 있습니다.
-
열 터미널 및 체크아웃 기능을 지는,예를 들어,
my-feature-branch
:git checkout my-feature-branch
-
리베이스의 지점에 대한 대상 지점은 그래서 Gitprompts 당신이와 충돌:
git rebase origin/master
- 열어 충돌하는 파일에서 코드의 편집니다.
- 충돌 블록을 찾습니다.
- 마커로 시작합니다.
<<<<<<< HEAD
., - 아래에는 변경 내용이 있습니다.
- 마커:
=======
는 변경 사항의 끝을 나타냅니다. - 아래에는 대상 분기의 최신 변경 내용이 있습니다.
- 마커
>>>>>>>
는 충돌의 끝을 나타냅니다.
- 마커로 시작합니다.
- 파일을 편집:버전을 선택(전 또는 후
=======
)당신이 원하는 참조하십시오,그리고 다음 부분을 삭제 내용을 원하지 않는 파일에서. - 마커를 삭제합니다.
- 파일을 저장합니다.,
- 충돌하는 다른 파일이있는 경우 프로세스를 반복하십시오.
-
단계 변경합니다.
git add .
-
Commit 변경사항:
git commit -m "Fix merge conflicts"
-
계속 리베:
git rebase --continue
cautionUp 이 시점에, 실행할 수 있습니다git rebase --abort
프로세스를 중지.Git 은 rebase 를 중단하고 브랜치를 beforerunninggit rebase
로 롤백합니다.,git rebase --continue
를 실행 한 후에는 rebase 를 중단 할 수 없습니다. - 원격 분기로 강제 푸시합니다.리>팔자>
Leave a Reply