programing

Gitrebase --skip이 정확히 무엇을 합니까?

oldcodes 2023. 8. 12. 10:38
반응형

Gitrebase --skip이 정확히 무엇을 합니까?

방금 했어요.git pull --rebase origin master그리고 갈등이 있었습니다.

먼저, 이 충돌은 제가 건드리지 않은 파일에 있었고, 약 10개의 커밋이 되돌아왔습니다.왜 이런 일이 일어날까요?

그리고 나서 실수로 입력했습니다.git rebase --skip그리고 그것은 '그 패치를 제거합니다'.

커밋을 건너뛴 것이 걱정되어 새 버전의 마스터 브랜치를 확인하고 기본 재배치한 브랜치와 새 마스터 브랜치 간에 차이를 냈습니다.차이에 표시되는 변경 사항은 최신 커밋이며 로그를 보면 '건너진' 패치가 커밋 기록에 표시됩니다.

여기서 무슨 일이 일어나고 있는지 설명할 수 있는 사람이 있습니까?

말하는 대로 행동하고, 약속을 건너뜁니다.실행하는 경우rebase --abort나중에 동일한 기본 재배치 중에 충돌할 때 건너뛴 커밋도 당연히 되돌릴 것입니다.

업스트림에 변경사항이 이미 존재하는 경우 Git는 커밋을 적용할 수 없습니다(그러나 패치가 정확히 동일한 경우 일반적으로 자동으로 커밋을 건너뜁니다).사용자 자신의 커밋은 건너뛰지만 변경 사항은 이미 업스트림에 적용되었기 때문에 현재 HEAD에 여전히 존재합니다.

중요한 변경 사항을 제거하지 않았는지 정말 확인해야 합니다. ;) (reflog를 사용하여 리베이스 이전 상태로 돌아갑니다.)

갈등이 없어야 한다는 것을 알고 나열된 갈등이 말이 되지 않을 때 저는 종종 이것과 마주칩니다.예를 들어, 저는 다음과 같은 순서로 여러 개의 분기를 가지고 있었습니다.

A --> B --> C --> D --> E ...

D 지점의 수정 사항 중 하나는 파일을 추가하는 것이었고 저는 B 지점에서 파일을 추가하는 것이 더 말이 된다는 것을 깨달았습니다.그래서 했습니다.

  git switch B
  git checkout B -- path/to/new/file
  git commit --amend --no-edit

그다음에 제가.

  git switch C
  git rebase B

이것은 잘 작동했지만, 내가 했을 때.

  git switch D
  git rebase C

충돌이 있었습니다.수동으로 고칠 수도 있었지만, 다른 방법으로 고칠 수도 있었습니다.

  git rebase --skip

그리고 모든 것이 괜찮았습니다.그러면 제가 했을 때.

  git switch E
  git rebase D

동일한 충돌이 발생했습니다.다시, 수동으로 수정하거나 같은 결과로 건너뛸 수 있습니다.

저는 여전히 왜 이러한 갈등이 때때로 발생하는지 그리고 왜 그것이 때때로 효과가 있는지 이해하려고 노력하고 있습니다.

  git rebase --skip

이런 경우에는

그것은 그 약속을 건너뜁니다.대화형 기본 재배치에서 커밋을 삭제하고 병합 충돌을 건너뛰면 해당 커밋이 제거됩니다.

^ eee pick
| ddd pick
| ccc drop
| bbb drop
| aaa pick

병합 충돌이 있는 경우 commit: ddd에 해당합니다.:git rebase --skipgit은 이렇게 말할 것입니다:could not apply ddd.가지 모양은 다음과 같습니다.

^ eee
| aaa

참고:eee실제로는 다른 커밋 ID로 다시 작성됩니다.

언급URL : https://stackoverflow.com/questions/9539067/what-exactly-does-git-rebase-skip-do

반응형