2017-02-20 1 views
1

내가 내 분기에 약 10 커밋을,이 전 스쿼시 원하는 (10)를 통해 ID 1 함께 4, 5, 6을 커밋 가정 해 봅시다,하지만 나머지 그대로 둡니다. 내가 찾은 모든 튜토리얼은 현재 HEAD로 시작하여 git rebase -i HEAD ~ (x amount)로 거꾸로 간다. 하지만 이전 커밋에서 rebase를 시작하고 git rebase -i 6 ... 4와 같은 범위를 지정하려면 어떻게해야합니까?어떻게 저번 커밋을 스쿼시 할 수 있습니까?

는 감사

+0

자습서는 방법입니다. Rebase * copies * 커밋은 원본을 그대로 둡니다 (커밋 된 내용은 Git에서 변경할 수 없습니다). 따라서 원래의 복사되지 않은 커밋은 원래의 원래의 커밋되지 않은 커밋을 다시 가리 키기 때문에 픽스 업 이후의 모든 커밋을 다시 복사해야합니다. 아래 jared의 답변을 참조하십시오. – torek

답변

2

그냥 대화 형 REBASE, 오류 복구의 스쿼시 당신이 눌려 있거나 fixupped이 (고쳐?)

git rebase HEAD~10

pick a4461d3 
pick d998164 
pick 0a1f6e1 
f 310ba9d 
f 60b7e01 
f 7baef60 
pick bb9a551 
pick badbad1 
pick fd9a10c 
pick 59ed66f 

# Rebase e7e1369..60b7e01 onto fd9a10c (10 command(s)) 
# 
# 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, exec = run command (the rest of the line) using shell 
# d, drop = remove commit 
# 
# These lines can be re-ordered; they are executed from top to bottom. 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# 
# However, if you remove everything, the rebase will be aborted. 
# 
# Note that empty commits are commented out 
+0

내가 그 일을 할 수 있다는 것을 깨닫지 못했습니다. 감사합니다 – thatDubstepSound

1

음, @jaredr 이미 응답 한 원하는 커밋을 너의 질문. 질문의 두 번째 부분에서 GIT는 그러한 명령을 제공하지 않습니다 (git rebase -i 4..6). 실제로는 안된다! GIT가 커맨드를 제공하기 시작하면 GIT가 얼마나 많은 저글링을 수행해야할지 상상해보십시오 (일부 커밋에서 작업을 수행하고 다른 작업을 스택해야하는 경우). 병합을 제대로하면 복잡성이 더해 지므로이 작업을 사용자에게 전달합니다/그녀는 코드를 잘 알고있는 사람이다.) 또한, 당신이 일시적으로 커밋을 덤프하고 뭔가 다른 작업을 할 수있는 Git squash 같은 메커니즘을 도움을 제공합니다. 그들이해야하기 때문에

+0

나는 당신이 의미하는 것을 얻을 sorta. 그러나 완전히 선형적인 커밋 히스토리 (병합이 발생하지 않았다는 가정하에)에서 나는 이것이 복잡성을 추가하는 방법을 아직 보지 못했다. 결국, 우리는 3, 4, 5가 모두 한꺼번에 일어난 것으로 생각할 수 있습니다. 그런 다음 6으로 이동하십시오. – thatDubstepSound

관련 문제