code

진행중인 git rebase가 있는지 확인하는 방법은 무엇입니까?

codestyles 2020. 11. 25. 07:59
반응형

진행중인 git rebase가 있는지 확인하는 방법은 무엇입니까?


를 시작할 때 , 또는 git rebase -i같은 명령을 실행할 수 있습니다 . 이러한 명령은 rebase가 진행중인 경우에만 작동합니다.git rebase --continuegit rebase --abort

진행중인 리베이스가 있는지 어떻게 알 수 있습니까?

(내부적으로 리베이스가 어떻게 작동하는지에 대한 세부 사항에 대해 매우 감사하겠습니다. git은 "rebase in progress"상태를 제공하는 리포지토리에 어떤 작업을 수행합니까?)


우선, ORIG_HEAD REBASE 동안 장소에 (하지만이 REBASE 명령에 제한되지 않는다)

그러나 2010 Git 1.7.0 git-rebase.sh스크립트 자체를 살펴볼 수도 있습니다 (;).
이와 같은 줄은 또 다른 단서를 줄 수 있습니다.

dotest="$GIT_DIR"/rebase-merge
test -d "$dotest" -o -d "$GIT_DIR"/rebase-apply || die "No rebase in progress?"

sabgenton 의견 :

  • 폴더 rebase-applyrebase,
  • 그러나 폴더 rebase-mergerebase -i.

그리고 히피의견을 , 2017 년, 그 :

코딩 지침은 -o(참조 Documentation/CodingGuidelines) 의 사용을 권장하지 않으므로 현재 올바른 방법 (2017 년부터 2011 년부터 Git 1.7.6) 은 다음과 같습니다.

(test -d ".git/rebase-merge" || test -d ".git/rebase-apply") || die "No rebase in progress?"

Jelaby의견에서 다음과 같이 제안 합니다 .

(test -d "$(git rev-parse --git-path rebase-merge)" || \
 test -d "$(git rev-parse --git-path rebase-apply)" )

이것은 작업 트리 .git와 디렉토리 가없는 비정상적이거나 비표준 레이아웃을 올바르게 처리 하고 작업 디렉토리의 하위 디렉토리에서이 테스트를 실행할 수 있도록합니다.

그 이유는 git rev-parse --git-path <path>:가 " $GIT_DIR/<path>"을 (를) 해결 하기 때문 입니다.


Git 2.6 이상 (2015 년 3 분기)은 리베이스 중에 더 많은 정보를 인쇄합니다.

참조 592e412 커밋 , 84e6fb9 커밋 (2015 7월 6일)를 84e6fb9 커밋 (2015 년 7 월 06), 및 df25e94 커밋 , 05eb563 커밋 에 의해 (2015 6월 30일) 기욤 페이지 ( gitster) .
(Merged by Junio ​​C gitsterHamano -- in commit 178d2c7 , 03 Aug 2015)

status: 더 많은 정보 제공 rebase -i

git statusrebase -irebase 중에 수행되는 명령 목록에 대한 자세한 정보를 제공합니다 .
다음을 표시합니다.

  • 실행 된 마지막 두 명령 및
  • 실행할 다음 두 줄.

또한 .git디렉토리 에서 전체 파일을 찾을 수있는 힌트를 제공합니다 .


git-aware bash 프롬프트에 사용할 수있는 __git_ps1함수에서contrib/completion/git-prompt.sh 이러한 감지가 수행되는 방법을 확인할 수도 있습니다.

                if [ -f "$g/rebase-merge/interactive" ]; then
                        r="|REBASE-i"
                        b="$(cat "$g/rebase-merge/head-name")"
                elif [ -d "$g/rebase-merge" ]; then
                        r="|REBASE-m"
                        b="$(cat "$g/rebase-merge/head-name")"
                else
                        if [ -d "$g/rebase-apply" ]; then
                                if [ -f "$g/rebase-apply/rebasing" ]; then
                                        r="|REBASE"
                                elif [ -f "$g/rebase-apply/applying" ]; then
                                        r="|AM"
                                else
                                        r="|AM/REBASE"
                                fi

당신이있는 경우 EasyGit을 , eg status당신을 말할 것이다 :

$ eg status
(Not currently on any branch.)
(YOU ARE IN THE MIDDLE OF A INTERACTIVE REBASE; RUN 'eg help topic middle-of-rebase' FOR MORE INFO.)
Changes ready to be committed ("staged"):
    modified:   .gitmodules
    renamed:    config_loader.rb -> code/config_loader.rb
Newly created unknown files:
    vendor/
(YOU ARE IN THE MIDDLE OF A INTERACTIVE REBASE; RUN 'eg help topic middle-of-rebase' FOR MORE INFO.)

컬러 터미널에서는 알림이 매우 눈에 띄게 표시됩니다.

<code> 예 : 상태 </ code> Rebase 중간 데모 스크린 샷

( eg help topic middle-of-rebase불완전한 rebase를 해결하거나 중단하는 방법 ”설명서를 표시합니다 .)


진행중인 대화 형 리베이스가있는 경우 진행중인 위치를 알려줍니다.

$ cat .git/rebase-merge/done 
pick 786139e lrg
edit 668b8a6 ktio
$ 

지금은 인터랙티브 리베이스에서 "ktio"패치를 편집하고 있습니다.

진행중인 리베이스가 없으면 다음과 같이 표시됩니다.

$ cat .git/rebase-merge/done 
cat: .git/rebase-merge/done: No such file or directory
$ 

bash 명령 줄에서 :

ls `git rev-parse --git-dir` | grep rebase

rebase 폴더가 있으면 종료 코드 0 (성공)을 반환하고 rebase 폴더를 STDOUT에 출력합니다. 리베이스 중에 있지 않으면 아무것도 출력하지 않고 0이 아닌 종료 코드를 반환합니다. 따라서 다음과 같이 할 수도 있습니다.

ls `git rev-parse --git-dir` | grep rebase || echo no rebase

이 명령을 사용하고 있습니다 is_rebase=$(git status | grep "rebasing" | wc -l)

참고 URL : https://stackoverflow.com/questions/3921409/how-to-know-if-there-is-a-git-rebase-in-progress

반응형