[git] Git 인터랙티브 리베이스 선택 커밋 없음
나는 마스터이고 나는했다 rebase -i <my_branch>
알았어 :
noop
# Rebase c947bec..7e259d3 onto c947bec
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x <cmd>, exec <cmd> = Run a shell command <cmd>, and stop if it fails
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
일부는 환영받지 못하므로 일부 커밋을 선택하고 싶습니다. 또한 일부 파일을 유지하거나 항상 일부 분기에 ‘로컬’로 변경하려면 어떻게 작업합니까? 같은 도우미가 .gitignore
있습니까?
답변
비대화 형 리베이스처럼 특정 커밋을 리베이스해야합니다.
비대화 형 리베이스를 사용하면 현재 커밋의 직계 조상을 제공하면 아무것도 변경하지 않습니다. 대화 형 리베이스를 사용하면 커밋이 현재 커밋의 직접 조상 인 경우에도 리베이스중인 커밋 후에 커밋을 편집 할 수 있지만 앞으로 편집하려는 커밋을 지정해야합니다.
귀하의 상황에 대한 세부 사항은 모르지만 다음과 같은 것을 원할 수 있습니다.
# Opportunity to edit or prune commits between origin/master and current branch
git rebase -i origin/master
또는
# Edit some of the last ten commits
git rebase -i HEAD~10 # Note that ~10 uses a tilde("~") not a dash("-"_) !
답변
rebase -i
커밋 범위가 없으면 커밋이 표시되지 않습니다. 마지막으로 7 개의 커밋을 리베이스하려면 다음을 사용합니다.
git rebase -i HEAD~7
그러나 이것은 역사를 다시 쓸 것이라는 점에주의하십시오. 커밋이 이미 푸시 된 경우하지 마십시오.
두 번째 질문 : 변경 사항이있는 분기 (기본적으로 구성 분기)를 만들고 다른 분기 를 정기적으로 병합하십시오 . 이렇게하면 변경 사항이 다른 지점으로 이동하지 않습니다.
답변
을 사용할 때 git rebase -i
일반적으로 리베이스를 수행 할 커밋을 지정해야합니다. 따라서 예를 들어 현재 브랜치의 마지막 10 개 중 일부 커밋을 제거하려면 다음을 수행합니다.
git rebase -i HEAD~10
답변
다른 사람들이 언급했듯이 커밋 범위를 지정해야합니다.
git rebase -i <latest-commit-to-be-retained>
(편집 할 커밋과 동일한 분기에 있다고 가정)-
커밋을 지정하려면 HEAD ~ 5 속기 또는 sha 체크섬을 사용할 수 있습니다 (으로 얻을 수 있음 git log
).
사실 모든 커밋은 트리에서 삭제 / 편집 / 변경하려는 커밋의 이전 / 상위 인 경우 수행합니다. 그러면 <latest-commit-to-be-retained>
편집기 (git 구성에 정의 됨) 이후의 모든 커밋이 나열됩니다 . 목록에서 커밋을 삭제하려면 해당 행을 삭제하고 파일 + 편집기를 저장하고 종료 (vi habbits :))하고git rebase --continue
두 번째 대답은 knittl에 동의합니다.
변경 사항이있는 분기 (기본적으로 구성 분기)가 있고 다른 분기를 정기적으로 병합합니다. 이렇게하면 변경 사항이 다른 지점으로 이동하지 않습니다.