실제로 사용 가능한 모든 조치 키워드는이 창의 맨 아래에 지정되어 있으므로 아무것도 기억할 필요가 없습니다!
일단 표준
키워드를 선호하는 액션 키워드로 바꾸면 ( "그대로 commits 수락"을 의미 함) 창을 저장하고 닫습니다.
이 작업을 수행 한 후 현재 커밋 정보가 포함 된 새로운 편집기 창이 열립니다. 마지막으로, 우리는 처음에 계획했던 일을 할 수 있습니다.이 오래된 커밋 메시지를 편집하십시오!
우리가 변경하고 편집기 창을 저장하고 닫은 후, 대화식 Rebase 세션이 완료되었습니다. 우리의 제출 정보가 업데이트되었습니다! ?
원치 않는 제출 삭제
대화식 Rebase를 사용하면 필요하지 않은 역사에서 오래된 커밋을 삭제할 수 있습니다. 최근 제출에 실수로 개인 비밀번호를 포함한다고 상상해보십시오. 대부분의 경우 이러한 민감한 정보는 코드 기반에 포함되지 않아야합니다.
또한 정보를 간단히 삭제하고 다시 커밋하는 것은 실제로 문제를 해결하지 못한다는 것을 기억하십시오. 즉, 비밀번호는 여전히 저장소에 오래된 커밋으로 저장되어 있음을 의미합니다. 당신이 정말로 원하는 것은이 데이터가 저장소에서 완전히 깨끗하게 삭제하는 것입니다!
먼저 대화식 Rebase 세션의 기본 커밋을 결정하겠습니다. 우리는 최소한 잘못된 커밋의 부모 커밋으로 시작해야하므로 "마크 업 구조 최적화"를 사용합니다 ... .
이번에는
명령에 특정 SHA-1 해시를 사용했습니다. 물론 Commit Hash 외에도 를 사용하여 해당 커밋을 처리 할 수 있습니다.
이 명령을 실행 한 후 커밋 목록이 다시 표시됩니다.
이번에는
액션 키워드를 사용하여 원치 않는 커밋을 제거합니다. 또는이 특별한 경우에 편집기에서 전체 라인을 간단히 삭제할 수 있습니다. 창을 저장하고 닫을 때 행이 더 이상 존재하지 않으면 (커밋을 나타냅니다) Git은 해당 커밋을 삭제합니다.
선택한 내용, 편집기 창을 저장하고 닫은 후 저장소는 저장소 기록에서 삭제됩니다!
여러 커밋을 하나의 로 병합합니다
대화식 Rebase의 또 다른 사용 사례는 여러 개의 별도의 커밋을 하나로 병합하려는 경우입니다. 우리가 일하는 방법에 뛰어 들기 전에, 그것이 언제 또는 왜 가치가 있는지에 대해 논의하는 데 몇 분을 보내 봅시다.
일반적으로 말하자면, 커밋을 "더 큰"(여러 커밋을 하나로 결합하여)를 만드는 것은 대부분의 경우 좋은 전략이 아닙니다. "작은"은 "더 작은"이 "읽기 쉽고 이해하기 쉽다"는 것을 의미하기 때문에 일반적인 경험 법칙은 가능한 한 작은 커밋을 유지하는 것입니다. 그러나 어떤 경우에는 여전히 의미가 있습니다. 다음은 두 가지 예입니다.
당신이 오래된 커밋에 뭔가 잘못되었다고 상상해보십시오. 그런 다음 문제를 해결하기 위해 new 를 생성 할 수 있습니다. 이 경우 이러한 커밋을 하나로 병합하는 것이 합리적입니다. 결국, 새로운 커밋은 존재하지 말아야 할 문제를 해결하기위한 "중지"입니다. 이 커밋을 결합함으로써 전혀 문제가없는 것 같습니다!
또 다른 예는 당신이 너무 상세하게하고 있다는 것을 알았을 때입니다. 작은 커밋을 만드는 것이 좋지만, 많은 불필요한 작은 - 커밋으로 커밋 기록을 채우는 것은 목표를 초과하는 것을 의미합니다.
두 예제의 기본 원칙은 동일합니다. 커밋이었던 두 가지 (또는 그 이상) 커밋을 결합함으로써 더 깨끗하고 더 읽기 쉬운 커밋 기록을 만들고 있습니다!
실용적인 예를 함께 완성하고 다음 그림에 표시된 상황을 우리의 시작 상황으로 사용합시다.
의미 적 으로이 두 커밋을 하나의 커밋으로 병합하는 것이 더 합리적이라고 가정합니다. 대화식 Rebase 도구를 사용하면 다음을 수행 할 수 있습니다.
지금까지, 당신은 무슨 일이 일어나고 있는지에 익숙해졌습니다. 편집기 창이 제출 목록과 함께 열립니다.
이 경우 작동 키워드를 사용할 것이라고 언급했습니다.
가 어떻게 작동하는지에 대해 알아야 할 중요한 사항이 있습니다.
키워드로 표시된 줄은 바로 위의 줄과 병합됩니다! 이것은 예제에서 2 행을 키워드로 표시 한 이유를 설명합니다. squash
이 창을 저장하고 닫은 후 새 창이 열립니다. 여러 커밋을 결합함으로써 우리는 물론 새로운 커밋을 만들 것이기 때문입니다. 그리고이 제출물은 다른 제출과 마찬가지로 제출 정보도 필요합니다!
<code>$ git rebase -i HEAD~3</code>
위의 스크린 샷에서 볼 수있는 것은 Git이 우리를 위해 준비한 것입니다. 해당 원본 커밋의 제출 정보와 몇 가지 의견을 결합합니다. 이전 메시지를 삭제하고 다시 시작하거나 계속 유지하고 더 많은 정보를 추가하십시오.
이 편집기 창을 저장하고 닫은 후, 우리는 자랑스럽게 말할 수 있습니다. 그것은 두 가지 별도의 커밋 이었지만 이제는 하나의 커밋입니다!
대화식 기본 변경의 강력한 기능을 사용하십시오
Git의 대화식 Rebase 도구가 매우 가치가 있다는 데 동의하기를 바랍니다. 개발자로서 우리는 깨끗하고 명확한 헌신 역사를 위해 노력해야합니다. 이것은 코드 기반을 건강하고 이해하기 쉽게 유지하는 핵심 요소입니다 (시간이 지나면 팀원과 자신을 위해).
더 알고 싶다면 "git 응급 처치 키트"를 적극 권장합니다. 이것은 (무료) 짧은 비디오 컬렉션으로 GIT에서 오류를 정리하고 실행 취소하는 방법을 보여줍니다.
재미있어!
git 대화식 변경 기본 FAQ (FAQ)
git rebase와 git merge의 차이점은 무엇입니까?
git rebase 및 git merge는 한 분기에서 다른 분기로 변경을 통합하는 두 가지 다른 방법입니다. Git Merge는 두 개의 다른 지점에서 코드를 직접 결합하는 방법입니다. 그것은 역사에 새로운 커밋을 만듭니다. 반면에 Git Rebase는 일련의 커밋을 새로운 기본 커밋으로 이동하거나 결합하는 방법입니다. "내 변화에 다른 사람들의 작업을 추가하고 싶다"고 말하는 것과 같습니다. 다시 말해, 다른 지점 상단의 현재 지점을 변경할 수 있습니다.
git rebase를 취소하는 방법?
git rebase를 취소하려는 경우 명령을 사용하여 반환하려는 커밋을 찾은 다음 명령 를 사용할 수 있습니다. 명령은 헤드에 대한 각 변경 목록을 표시하고
명령을 사용하면 현재 헤드를 지정된 상태로 설정할 수 있습니다.
git 대화식 Rebase의 목적은 무엇입니까?
git interactive rebase를 사용하면 편집, 삭제 및 압축과 같은 다양한 방식으로 커밋을 변경할 수 있습니다. 커밋 정보를 변경할뿐만 아니라 실제 코드를 변경할 수도 있습니다 (실수가있는 경우). 이것은 프로젝트의 제출 기록을 완전히 제어 할 수있는 강력한 도구입니다.
git 대화식 가변 기반 압축 제출을 사용하는 방법은 무엇입니까?
압축은 여러 커밋을 하나의 커밋으로 병합하는 행위입니다. GIT에서는 명령을 사용하여 커밋을 압축 한 다음 커밋 해시를 사용하여 압축 할 수 있습니다. Open Text 편집기에서 를 또는 로 교체하여 압축하려는 커밋을 표시 할 수 있습니다.
git 대화식 Rebase를 사용하는 위험은 얼마입니까?
git 대화식 Rebase는 강력한 도구이지만 부적절하게 사용하면 위험 할 수 있습니다. 그것은 커밋 기록을 다시 작성하여 다른 사람들이 다루고있는 공개 지점을 다루는 경우 문제를 일으킬 수 있습니다. 아직 밀리지 않은 현지 지점에서 사용하는 것이 좋습니다.
git 변경 기반 동안 갈등을 해결하는 방법은 무엇입니까?
충돌은 리바이스 과정에서 발생할 수 있습니다. GIT는 일시 중지하고 계속하기 전에 이러한 갈등을 해결할 수 있습니다. 파일을 편집하여 충돌하는 변경 사항을 수정 한 다음 git reflog
를 사용하여 해결 된 파일을 추가하여 충돌을 해결할 수 있습니다. 모든 충돌이 해결되면 를 사용하여 기본을 계속 변경할 수 있습니다. git reset --hard HEAD@{number}
git 대화식 변경베이스를 사용하여 커밋을 분할 할 수 있습니까?
예, git 대화식 Rebase를 사용하여 커밋을 작은 커밋으로 나눌 수 있습니다. 이것은 하나의 커밋을 여러 번 변경하지만 별도의 커밋이어야한다고 결정하는 경우에 매우 유용합니다.
git 대화식 변경 기준을 사용하여 제출 정보를 편집하는 방법은 무엇입니까?
대화식 Rebase에서 제출 정보를 편집 할 수 있습니다. 제출 목록에서
또는 또는
로 바꾸려면 편집 할 제출을 표시하십시오. 계속할 때 GIT는 로 표시된 각 제출에 대한 텍스트 편집기를 열어 제출 정보를 변경할 수 있습니다. pick
git rebase와 git pull의 차이점은 무엇입니까? reword
r
는 원격 저장소에서 변경하여 현재 지점으로 병합되는 명령입니다. 반면에 는 일련의 커밋을 새로운 기본 커밋으로 이동하거나 결합시키는 명령입니다. 두 명령 모두 통합 변경에 사용되지만 다르게 수행됩니다. reword
git 대화식 Rebase를 사용하여 커밋 순서를 변경할 수 있습니까?
예, git 대화식 Rebase를 사용하여 커밋 순서를 변경할 수 있습니다. 커밋 목록에서 단순히 행 순서를 변경하여 커밋 순서를 변경할 수 있습니다. 이것은 당신이 당신의 커밋 역사를 더 논리적이거나 명확하게 만들고 싶다면 매우 유용합니다.