리베이스는 다른 기본 이동 위에 커밋을 다시 적용하는 프로세스입니다. 개별 분기의 일련의 커밋을 최종 커밋에 적용하는 데 사용됩니다. git merge 명령의 대안입니다. 이는 병합의 선형 프로세스입니다.
Git에서 리베이스라는 용어는 일련의 커밋을 새로운 기본 커밋으로 이동하거나 결합하는 프로세스를 의미합니다. 리베이스는 매우 유익하며 기능 분기 워크플로우 환경에서 프로세스를 시각화했습니다.
브랜치를 병합하기 전에 브랜치를 리베이스하는 것이 좋습니다.
일반적으로 git merge 명령의 대안입니다. 병합은 항상 앞으로 변화하는 레코드입니다. 이에 비해 rebase는 git의 강력한 기록 재작성 도구입니다. 서로 다른 커밋을 하나씩 병합합니다.
master 브랜치에서 3개의 커밋을 수행하고 test라는 다른 브랜치에서 3개의 커밋을 수행했다고 가정합니다. 이것을 병합하면 모든 커밋이 한 번에 병합됩니다. 그러나 리베이스하면 선형 방식으로 병합됩니다. 아래 이미지를 고려하십시오.
위 이미지는 git rebase의 작동 방식을 설명합니다. 마스터 브랜치의 세 가지 커밋은 테스트 브랜치의 커밋과 선형적으로 병합됩니다.
병합은 브랜치를 통합하는 가장 간단한 방법입니다. 두 개의 최신 분기 커밋 간에 3방향 병합을 수행합니다.
리베이스하는 방법
기능 브랜치(테스트 브랜치)에서 일부 커밋을 수행하고 마스터 브랜치에서 일부 커밋을 수행한 경우. 이러한 분기 중 하나를 리베이스할 수 있습니다. git log 명령을 사용하여 변경 사항(커밋 기록)을 추적합니다. 리베이스하려는 원하는 브랜치로 체크아웃하세요. 이제 다음과 같이 rebase 명령을 수행하십시오.
통사론:
$git rebase
분기에 충돌이 있는 경우 이를 해결하고 아래 명령을 수행하여 변경을 계속합니다.
$ git status
상태를 확인하는데 사용되며,
$git rebase --continue
위 명령은 변경 사항을 계속 적용하는 데 사용됩니다. 변경 사항을 건너뛰려면 다음과 같이 건너뛸 수 있습니다.
C++ GUI
$ git rebase --skip
리베이스가 완료되면. 저장소를 원본으로 푸시합니다. git merge 명령을 이해하려면 아래 예를 고려하십시오.
당신이 말하는 지점이 있다고 가정하십시오 테스트2 당신이 일하고 있는 곳. 이제 test2 분기에 있으며 프로젝트 파일을 일부 변경했습니다. 새파일1.txt .
이 파일을 저장소에 추가하십시오.
$ git add newfile1.txt
이제 변경 사항을 커밋합니다. 아래 명령을 사용하십시오.
$ git commit -m 'new commit for test2 branch.'
출력은 다음과 같습니다.
[test2 a835504] new commitfor test2 branch 1 file changed, 1 insertion(+)
브랜치를 마스터로 전환합니다.
$ git checkout master
산출:
데이터베이스의 정규화
Switched to branch 'master.' Your branch is up to date with 'origin/master.'
이제 마스터 브랜치에 있습니다. 내 파일에 변경 사항을 추가했습니다. 새파일.txt . 아래 명령은 저장소에 파일을 추가하는 데 사용됩니다.
$ git add newfile.txt
이제 변경 사항을 위해 파일을 커밋합니다.
$ git commit -m ' new commit made on the master branch.'
산출:
[master 7fe5e7a] new commit made on master 1 file changed, 1 insertion(+) HiMaNshU@HiMaNshU-PC MINGW64 ~/Desktop/GitExample2 (master)
로그 기록을 확인하려면 아래 명령어를 수행하세요.
$ git log --oneline
산출:
로그 기록에서 볼 수 있듯이 master 브랜치에 새로운 커밋이 있습니다. test2 브랜치를 리베이스하려면 어떻게 해야 합니까? 아래 리베이스 분기 시나리오를 참조하세요.
리베이스 브랜치
서로 다른 브랜치에서 많은 커밋이 있고 이를 하나로 병합하려는 경우. 그렇게 하려면 병합하거나 리베이스하는 두 가지 선택이 있습니다. 지점을 리베이스하는 것이 좋습니다.
위의 예에서 우리는 master 브랜치를 커밋했으며 test2 브랜치에서 이를 리베이스하려고 합니다. 아래 명령을 살펴보겠습니다.
$ git checkout test2
이 명령은 마스터의 test2 분기로 전환합니다.
산출:
Switched to branch 'test2.'
이제 test2 분기에 있습니다. 따라서 test2 분기를 master 분기로 리베이스할 수 있습니다. 아래 명령을 참조하세요.
$ git rebase master
이 명령은 test2 분기를 리베이스하고 다음과 같이 표시됩니다. 적용 중: test2 분기의 새 커밋 . 아래 출력을 고려하십시오.
산출:
Git 대화형 리베이스
Git은 Interactive Rebase를 통해 촉진합니다. 다음과 같은 다양한 작업을 가능하게 하는 강력한 도구입니다. 편집, 다시 작성, 재정렬, 기존 커밋에 대한 자세한 내용. Interactive Rebase는 현재 체크아웃된 브랜치에서만 동작 가능합니다. 따라서 사이드바에 로컬 HEAD 분기를 설정하세요.
Git 대화형 리베이스는 rebase 명령으로 호출할 수 있습니다. 다음을 입력하면 됩니다. -나 rebase 명령과 함께. 여기 ' 나 '는 대화형을 의미합니다. 이 명령의 구문은 다음과 같습니다.
통사론:
$ git rebase -i
사용 가능한 모든 대화형 옵션이 나열됩니다.
산출:
자바 입력 문자열
지정된 출력 후에 사용 가능한 옵션이 포함된 편집기가 열립니다. 아래 출력을 고려하십시오.
산출:
git Interactive rebase 명령을 실행하면 위 출력과 함께 기본 텍스트 편집기가 열립니다.
여기에 포함된 옵션은 다음과 같습니다.
- 선택하다
- 바꾸어 말하다
- 편집하다
- 스쿼시
- 고치다
- 임원
- 부서지다
- 떨어지다
- 상표
- 초기화
- 병합
위 옵션은 git-rebase를 사용하여 특정 작업을 수행합니다. 이러한 각 옵션을 간략하게 이해해 보겠습니다.
선택(-p):
Pick은 커밋이 포함되어 있음을 의미합니다. 커밋 순서는 리베이스 중 선택 명령의 순서에 따라 달라집니다. 커밋을 추가하지 않으려면 전체 줄을 삭제해야 합니다.
다시 말함(-r):
reword는 pick 명령과 매우 유사합니다. reword 옵션은 리베이스 프로세스를 일시 중지하고 커밋 메시지를 변경할 수 있는 기회를 제공합니다. 커밋으로 인한 변경 사항에는 영향을 미치지 않습니다.
편집:
편집 옵션을 사용하면 커밋을 수정할 수 있습니다. 수정이란 커밋을 완전히 추가하거나 변경할 수 있음을 의미합니다. rebase continue 명령 전에 추가 커밋을 할 수도 있습니다. 이를 통해 대규모 커밋을 더 작은 커밋으로 분할할 수 있습니다. 게다가 커밋에서 발생한 잘못된 변경 사항을 제거할 수도 있습니다.
스쿼시(-s):
스쿼시 옵션을 사용하면 두 개 이상의 커밋을 단일 커밋으로 결합할 수 있습니다. 또한 변경 사항을 설명하기 위한 새로운 커밋 메시지를 작성할 수도 있습니다.
수정(-f):
이는 squash 명령과 매우 유사합니다. 병합할 커밋의 메시지를 삭제했습니다. 이전 커밋 메시지는 두 가지 변경 사항을 모두 설명하는 데 사용됩니다.
실행(-x):
exec 옵션을 사용하면 커밋에 대해 임의의 셸 명령을 실행할 수 있습니다.
중단(-b):
break 옵션은 정확한 위치에서 리베이스를 중지합니다. 나중에 '를 사용하여 계속 리베이스할 예정입니다. git rebase --계속 ' 명령.
삭제(-d):
drop 옵션은 커밋을 제거하는 데 사용됩니다.
레이블(-l):
label 옵션은 현재 헤드 위치를 이름으로 표시하는 데 사용됩니다.
재설정(-t):
재설정 옵션은 헤드를 라벨로 재설정하는 데 사용됩니다.
안드로이드에서 사과 이모티콘을 얻는 방법
GitMerge와 리베이스
언제 merge 명령을 사용할지, 언제 rebase를 사용할지는 git 사용자에게 가장 일반적인 수수께끼 질문입니다. 두 명령 모두 유사하며 둘 다 저장소의 서로 다른 분기에서 수행된 커밋을 병합하는 데 사용됩니다.
리베이스 프로세스는 일관되지 않은 저장소를 생성하므로 공유 브랜치에서는 리베이스를 권장하지 않습니다. 개인의 경우 병합보다 리베이스가 더 유용할 수 있습니다. 전체 기록을 보려면 병합을 사용해야 합니다. Merge는 커밋의 전체 기록을 추적하는 반면, rebase는 새로운 커밋 기록을 다시 작성합니다.
Git rebase 명령은 git merge의 대안으로 사용됩니다. 그러나 몇 가지 주요 차이점이 있습니다.
힘내 병합 | 힘내 리베이스 |
---|---|
병합은 병합 시 최종 커밋을 생성합니다. | Git rebase는 리베이스 시 커밋을 생성하지 않습니다. |
모든 커밋을 단일 커밋으로 병합합니다. | 커밋의 선형 트랙을 생성합니다. |
이해하기 다소 복잡할 수 있는 그래픽 기록을 생성합니다. | 쉽게 이해할 수 있는 선형적인 역사를 만들어냅니다. |
두 개의 분기를 병합하는 것이 안전합니다. | Git 'rebase'는 심각한 작업을 다룹니다. |
병합은 퍼블릭 브랜치와 프라이빗 브랜치 모두에서 수행될 수 있습니다. | 공개 브랜치에서 리베이스를 사용하는 것은 잘못된 선택입니다. |
병합은 기능 분기의 콘텐츠를 마스터 분기와 통합합니다. 따라서 마스터 브랜치가 변경되고 기능 브랜치 기록이 일관성을 유지합니다. | 마스터 브랜치를 리베이스하면 기능 브랜치에 영향을 미칠 수 있습니다. |
병합하면 기록이 보존됩니다. | 리베이스는 기록을 다시 작성합니다. |
Git 병합은 모든 충돌을 한 번에 표시합니다. | Git rebase는 충돌을 하나씩 제시합니다. |