충돌을 미리 알려주는 일종의 'git rebase --dry-run'이 있습니까?
리베이스를 스크립트하려고하는데 내 스크립트는 리베이스로 인해 충돌이 발생하는지 여부에 따라 다른 경로를 사용합니다.
리베이스를 실행하기 전에 리베이스로 인해 충돌이 발생하는지 확인할 수있는 방법이 있습니까?
작성 당시 (Git v2.6.1v2.10.0), git rebase
명령은 --dry-run
옵션을 제공하지 않습니다 . 실제로 리베이스를 시도하기 전에 충돌이 발생할지 여부를 알 수있는 방법이 없습니다.
그러나 실행 git rebase
하고 충돌이 발생하면 프로세스가 중지되고 0이 아닌 상태로 종료됩니다. 당신이 할 수있는 일은 rebase 작업의 종료 상태를 확인하고 0이 아닌 경우 실행 git rebase --abort
하여 rebase를 취소하는 것입니다.
git rebase ... || git rebase --abort
rebase 가 성공할 것인지 확인하고 "롤백" 하려면 항상 분기 팁 을 원래 커밋으로 다시 배치 할 수 있습니다 . 원래 SHA에 태그를 지정하거나 메모하기 만하면됩니다.
또는 더 쉬운 방법은 리베이스를 "스테이징"할 새 임시 분기를 만드는 것입니다.
git checkout your-branch
git checkout -b tmp
git rebase other-branch
성공했지만 "롤백"하려는 경우에는 your-branch
그대로 둡니다. 그냥 git branch -D tmp
당신이에서 시작 어디 수있는 좋은 방법입니다 다시.
충돌이 있었고이를 해결하기 위해 몇 가지 작업을 수행했고 이제 리베이스를 유지하려면 분기 팁 위치를 tmp
(다음 git branch -D tmp
)으로 변경하십시오 .
git rebase ... --dry-run
다음과 같은 이유로 불가능하다고 생각합니다 .
을 수행 할 때 git rebase
git은 시작 지점으로 롤백 한 다음 각 커밋에 대해 점진적으로 패치를 적용하여 분기를 최신 상태로 만듭니다. 충돌이 발생하면 중지하고 계속하기 전에 충돌을 해결할 때까지 기다립니다. 충돌 후 리베이스가 취하는 경로는 충돌을 해결하는 방법에 따라 다릅니다. 특정 방식으로 해결하면 나중에 충돌이 발생하거나 제거 될 수 있습니다.
따라서 첫 번째 충돌 git rebase ... --dry-run
만 제공 할 수 있습니다. 이후 충돌에 대한보고는 첫 번째 충돌이 어떻게 해결되었는지에 따라 달라집니다.
제가 생각할 수있는 유일한 방법 git diff
은 현재 위치와 리베이스하려는 브랜치의 마지막 커밋 사이 를 통하는 것 입니다. 그러나 그것은 당신이 찾고있는 것을 실제로 제공하지 않을 것입니다-당신은 정말로 두 지점 사이 에 상충되는 변화 의 목록이 필요합니다 . 로 할 수있는 방법 이 있을 수 git diff
있지만 일반적인 패치는 아닙니다.
이전의 모든 변경 사항을 복구하는 것보다 git rebase를 수행하고 원하는대로 재생할 수 있습니다. 으로 일부 분기의 리베이스를 수행 master
했으며 마음에 들지 않는다고 가정합니다.
git reflog -20
-약간의 설명과 함께 HEAD의 마지막 20 개 위치를 제공합니다.git checkout <the_branch_name>
-HEAD를 브랜치에 배치git reset --hard <old_sha1_found_in_reflog>
-HEAD 및 분기를 이전 참조에 배치하면 이전 분기를 복구 할 수 있습니다.
여기에서 이해해야 할 몇 가지 메커니즘이 있습니다.
- 어쨌든 명령이 아닌 git에서 아무것도 삭제하지 마십시오. 참조되지 않은 분기를 통과하여 삭제하는 가비지 수집기입니다 (기본값 3 개월). 따라서 리베이스 이전의 브랜치는 여전히 존재합니다.
- 동일한 분기 리베이스에 대해서도 동일하며 이전 트리 옆에 새 트리가 다시 작성됩니다.
rebase
HEAD 조작에 대한 모든 이력 및 기타는reflog
- 다음
@{N}
에서 주석을 사용할 수 있습니다.reflog
따라서, 이후에는 아무것도 손실되지 않으며 rebase
, 찾는 방법과 복구 방법 만 알면됩니다.
예를 들어 태그를 rebase
되돌 리거나 삭제할 수 있습니다. 모든 SHA1 연구 단계를 회피합니다.
'program tip' 카테고리의 다른 글
로지스틱 회귀에서 예측에 대한 신뢰 구간 (0) | 2020.12.09 |
---|---|
MVC 4 목록 모델 바인딩은 어떻게 작동합니까? (0) | 2020.12.09 |
스크립트가 tty에서 실행 중인지 확인하는 방법은 무엇입니까? (0) | 2020.12.09 |
SaveOrUpdate 대 업데이트 및 NHibernate에서 저장 (0) | 2020.12.09 |
html에서 프레임이 사용되지 않는 이유는 무엇입니까? (0) | 2020.12.09 |