사용 git rebase --interactive
이전 커밋 실행 편집에 git reset HEAD~
다음, 그리고 git add -p
다음 몇 가지 더 추가 한 다음 커밋 할 몇 가지를 추가하고 다른 당신 같은 수만큼, 커밋 확인합니다. 완료되면를 실행 git rebase --continue
하면 스택의 모든 분할 커밋이 이전에 시작됩니다.
중대한 : 당신은 항상 실행할 수 있기 때문에 당신은 오래된 변경을 잃어 버릴까 걱정에 놀러와 당신이 원하는 모든 변경 사항을 확인하지있을 수 있습니다 git reflog
원하는 변경 사항이 포함되어 프로젝트의 지점을 찾기 위해, (현실을 부르 자 a8c4ab
) 다음 git reset a8c4ab
.
작동 방식을 보여주는 일련의 명령은 다음과 같습니다.
mkdir git-test; cd git-test; git init
이제 파일을 추가하십시오 A
vi A
이 줄을 추가하십시오 :
one
git commit -am one
그런 다음이 줄을 A에 추가하십시오.
two
git commit -am two
그런 다음이 줄을 A에 추가하십시오.
three
git commit -am three
이제 파일 A는 다음과 같습니다.
one
two
three
그리고 우리 git log
는 다음과 같이 보입니다.git log --pretty=oneline --pretty="%h %cn %cr ---- %s"
bfb8e46 Rose Perrone 4 seconds ago ---- three
2b613bc Rose Perrone 14 seconds ago ---- two
9aac58f Rose Perrone 24 seconds ago ---- one
두 번째 커밋을 나누고 싶다고 가정 해 봅시다. two
.
git rebase --interactive HEAD~2
다음과 같은 메시지가 나타납니다.
pick 2b613bc two
pick bfb8e46 three
커밋을 편집하려면 첫 번째 pick
를로 변경하십시오 e
.
git reset HEAD~
git diff
우리는 두 번째 커밋에 대해 커밋을 단계적으로 해제했음을 보여줍니다.
diff --git a/A b/A
index 5626abf..814f4a4 100644
--- a/A
+++ b/A
@@ -1 +1,2 @@
one
+two
변경 사항을 준비하고 file의 해당 줄에 "및 세 번째"를 추가합시다 A
.
git add .
이것은 보통 대화식 rebase 동안 실행할 시점입니다 git rebase --continue
. 왜냐하면 보통 커밋 스택으로 돌아가서 이전 커밋을 편집하기 때문입니다. 그러나 이번에는 새로운 커밋을 만들고 싶습니다. 그래서 우리는 실행할 것 git commit -am 'two and a third'
입니다. 이제 파일을 편집 A
하고 행을 추가합니다 two and two thirds
.
git add .
git commit -am 'two and two thirds'
git rebase --continue
커밋과 충돌이 three
있으므로 해결해 보겠습니다.
우리는 변할거야
one
<<<<<<< HEAD
two and a third
two and two thirds
=======
two
three
>>>>>>> bfb8e46... three
에
one
two and a third
two and two thirds
three
git add .; git rebase --continue
이제 우리 git log -p
는 다음과 같이 보입니다 :
commit e59ca35bae8360439823d66d459238779e5b4892
Author: Rose Perrone <roseperrone@fake.com>
Date: Sun Jul 7 13:57:00 2013 -0700
three
diff --git a/A b/A
index 5aef867..dd8fb63 100644
--- a/A
+++ b/A
@@ -1,3 +1,4 @@
one
two and a third
two and two thirds
+three
commit 4a283ba9bf83ef664541b467acdd0bb4d770ab8e
Author: Rose Perrone <roseperrone@fake.com>
Date: Sun Jul 7 14:07:07 2013 -0700
two and two thirds
diff --git a/A b/A
index 575010a..5aef867 100644
--- a/A
+++ b/A
@@ -1,2 +1,3 @@
one
two and a third
+two and two thirds
commit 704d323ca1bc7c45ed8b1714d924adcdc83dfa44
Author: Rose Perrone <roseperrone@fake.com>
Date: Sun Jul 7 14:06:40 2013 -0700
two and a third
diff --git a/A b/A
index 5626abf..575010a 100644
--- a/A
+++ b/A
@@ -1 +1,2 @@
one
+two and a third
commit 9aac58f3893488ec643fecab3c85f5a2f481586f
Author: Rose Perrone <roseperrone@fake.com>
Date: Sun Jul 7 13:56:40 2013 -0700
one
diff --git a/A b/A
new file mode 100644
index 0000000..5626abf
--- /dev/null
+++ b/A
@@ -0,0 +1 @@
+one