git 대화식 기본 변경 : 개발 효율성을 향상시키는 강력한 도구
GIT 버전 제어는 현대 개발자의 도구 상자에서 표준이되었습니다. ,
및 와 같은 명령은 오랫동안 근육 기억이되었습니다. 그러나 비교적 말하면, GIT의 "고급"기능과 이러한 기능의 큰 가치를 이해하는 개발자는 거의 없습니다! 이 기사는 GIT에서 가장 강력한 도구 중 하나 인 "Interactive Rebase"를 탐색 할 것입니다.
commit
코어 포인트 push
pull
대화식 Rebase는 개발자가 잘 구조화 된 커밋 기록을 만들 수 있도록 강력한 GIT 도구입니다.
대화식 Rebase는 오래된 커밋 정보를 편집하고, 커밋을 삭제하고, 여러 커밋을 병합하고, 재주문하고, 오래된 커밋을 수리하고, 편집을 위해 오래된 커밋을 분할/재개하는 데 사용될 수 있습니다.
원격 저장소에서 동료들과 공유 된 커밋에 대화식 Rebase를 사용하지 않는 것이 중요합니다. 대신, 팀 지점에 합병하기 전에 로컬 커밋을 정리하는 데 사용해야합니다.
대화식 기본 연산의 기본 메커니즘에는 작동 할 제출 기록 부분을 식별하고
대답해야 할 첫 번째 질문은 "커밋 역사의 어느 부분이 운영하고 싶은가?" 실용적인 예를 들어, 우리가 이전 커밋 정보를 편집하고 싶다고 가정 해 봅시다 (이것은 우리가 나중에 실제로 할 일이다).
우리의 시작 상황은 아래 그림에 나와 있으며, 대화식 변경 기준을 통해 이전 제출 정보를 편집합니다.
C2에서 커밋 정보를 변경하려면 부모 커밋 (또는 선호하는 경우 이전)에서 대화식 Rebase 세션을 시작해야합니다. 이 예에서는 대화식 Rebase 세션의 시작점으로 C1을 사용합니다.
2 단계 : 실제 세션을 시작하십시오!
실제 세션을 시작하는 것은 매우 간단합니다
우리는
플래그와 함께 명령을 사용하고 (우리가 실제로 "대화식"이되기를 원한다는 것을 나타냅니다) 기본 커밋 (위의 첫 단계에서 제시 한)을 제공합니다. 이 예에서, 나는
를 사용하여 "머리 뒤에 널리 퍼진 3 커밋"이라는 커밋을 지정했습니다. 또는 특정 SHA-1 해시를 제공 할 수도 있습니다.
3 단계 : 당신이하고 싶은 일을 >에게 알려주십시오
대화식 Rebase 세션을 시작한 후 GIT가 최신 커밋에서 기본 커밋 제출으로 선택한 기본 커밋까지의 모든 커밋에서 일련의 커밋을 나열하는 편집기 창이 표시됩니다. .
이 단계에서는 다음에주의를 기울여야합니다.
제출물은 역순으로 나열됩니다! 우리는 - 의 상단에 나타나는 최신 제출물이 목록의 하단에 나타날 것으로 예상합니다. 걱정하지 마십시오 : 당신의 git 저장소는 손상되지 않습니다! 우리는 대화식 변경 기본 작동을 수행하고 있으며, 이는 조작이 끝날 때 구식에서 새로 커밋해야합니다.
이 편집기 창에서 실제 변경하지 마십시오! 이 편집기 창에서 커밋 정보를 직접 변경하려는 유혹을받을 수도 있지만 (결국, 바로 우리가 원하는 것입니다 ...) 인내심을 가져야합니다. 여기서 우리는 단지 실제 변경을하기보다는 우리가하고 싶은 일을 Git에게 말하고 있습니다. 나는 이것을 곧 실제로 시연 할 것이다!
이 이론적 개요를 통해 몇 가지 실용적인 사례를 함께 살펴 보겠습니다!
오래된 제출 정보 편집 -
대화식 Rebase의 가장 인기있는 사용 사례 중 하나는 나중에 이전 제출물을 편집 할 수 있다는 것입니다. 를 사용하면 제출 된 정보를 변경할 수 있음을 알 수 있지만 최신 제출물에만 적용됩니다. 이보다 나이가 많은 커밋의 경우 대화식 Rebase를 사용해야합니다!
특정 시나리오를 살펴 보겠습니다. 아래는 수정 해야하는 오류 제출 정보의 이미지입니다.
참고 : 더 나은 개요와 명확한 시각화를 위해 일부 스크린 샷에서 Tower Git 데스크탑 클라이언트를 사용했습니다. 이 튜토리얼을 따르기 위해 타워가 필요하지 않습니다.
이 예에서는 "인덱스에서 마크 업 구조 최적화 ..."라는 제목의 현재 제출물에 대한 메시지를 편집하려고한다고 가정 해 봅시다.
첫 번째 단계는이 대화식 Rebase 세션의 기본 커밋을 결정하는 것입니다. 우리는 (적어도) "Bad Apple"커밋의 부모 커밋으로 돌아 가야하므로 (헤드 커밋 뒤에 3 개의 커밋, 즉 "변경 헤드 라인 ...")를 사용하여 시작점으로 사용합니다. 세션 :
git commit --amend
이 명령을 실행 한 후, 좋아하는 편집기는 방금 선택한 커밋 목록을 열고 기본 커밋을 제공합니다.
<:> A 알림 :이 작업을 수행하려는 유혹을받을 수 있지만 여기에서 제출 정보를 변경하지 않을 것입니다. 우리는 "작동 키워드" 만 사용하여 해당 의 해당 행을 표시합니다. 우리의 경우, 우리는 커밋을 무시하고자합니다 (즉, 커밋 정보를 변경하고 나머지 커밋을 유지하려고합니다).
실제로 사용 가능한 모든 조치 키워드는이 창의 맨 아래에 지정되어 있으므로 아무것도 기억할 필요가 없습니다!
일단 표준
키워드를 선호하는 액션 키워드로 바꾸면 ( "그대로 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를 사용하여 커밋 순서를 변경할 수 있습니다. 커밋 목록에서 단순히 행 순서를 변경하여 커밋 순서를 변경할 수 있습니다. 이것은 당신이 당신의 커밋 역사를 더 논리적이거나 명확하게 만들고 싶다면 매우 유용합니다.
위 내용은 실용적인 예제와 함께 git 대화식 Rebase에 대한 안내서의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!