이전 커밋을 여러 커밋으로 분할
분기를 생성하고 새 분기에 대해 많은 작업을 수행하지 않고 로컬 저장소에 커밋된 후 단일 커밋을 몇 개의 서로 다른 커밋으로 분할할 수 있습니까?
git rebase -i
할 것입니다.
디렉토리로 합니다: 먼저깨작로시작다니합리토렉디업한끗다▁first니.git status
보류 중인 수정, 삭제 또는 추가 사항이 표시되지 않아야 합니다.
이제 분할할 커밋을 결정해야 합니다.
가장 최근 커밋 분할
가장 최근의 약속을 분할하려면 먼저:
$ git reset HEAD~
이제 일반적인 방식으로 개별적으로 커밋하고 필요한 만큼 커밋을 생성합니다.
커밋을 더 뒤로 분할
이를 위해서는 리베이스, 즉 기록을 다시 작성해야 합니다.올바른 커밋을 지정하려면 다음과 같은 몇 가지 옵션을 선택할 수 있습니다.
만약 3 커밋백이라면,
$ git rebase -i HEAD~3
3
커밋백 횟수입니다.만약 그것이 당신이 세고 싶은 것보다 더 멀리 나무 뒤에 있다면,
$ git rebase -i 123abcd~
123abcd
분할할 커밋의 SHA1입니다.분기, " " " " " " (" " " " " " " " " " " " " " " " " " " " " 로
master
:$ git rebase -i master
기본 재배치 편집 화면이 나타나면 분리할 커밋을 찾습니다.해당 줄의 시작 부분에서 대체pick
와 함께edit
(e
저장 후합니다.버퍼를 저장하고 종료합니다.이제 편집할 커밋 직후 기본 재배치가 중지됩니다.그러면:
$ git reset HEAD~
일반적인 방식으로 개별적으로 커밋하고 필요한 만큼 커밋을 생성합니다.
마침내.
$ git rebase --continue
Git-rebase 매뉴얼(SPLITING COMMITS 섹션)에서
대화형 모드에서는 커밋을 "edit" 작업으로 표시할 수 있습니다.그러나 Gitrebase에서 이 편집 결과가 정확히 하나의 커밋으로 예상된다는 것을 의미하지는 않습니다.실제로 커밋을 실행 취소하거나 다른 커밋을 추가할 수 있습니다.이를 사용하여 커밋을 두 개로 나눌 수 있습니다.
재시작치로
git rebase -i <commit>^
서, 디에어<commit>
분할할 커밋입니다.실제로 커밋 범위가 포함되어 있는 한 모든 커밋 범위가 좋습니다.분할할 커밋을 "편집" 작업으로 표시합니다.
커밋을 는 해당커편때는할을 실행합니다.
git reset HEAD^
효과는 HEAD가 하나씩 되감겨지고 지수가 그 뒤를 따릅니다.그러나 작업 트리는 그대로 유지됩니다.이제 첫 번째 커밋에서 적용할 인덱스에 변경 사항을 추가합니다.사용할 수 있습니다.
git add
또는 (상호작용적으로) 또git gui
(또는 둘 다) 그렇게 하는 것.현재 인덱스를 지금 적합한 커밋 메시지로 커밋합니다.
작업 트리가 깨끗해질 때까지 마지막 두 단계를 반복합니다.
기본 재배치를 계속합니다.
git rebase --continue
.
이전 답변에서는 의 사용에 대해 설명했습니다.git rebase -i
분할할 커밋을 편집하고 부분적으로 커밋합니다.
이 기능은 파일을 서로 다른 커밋으로 분할할 때 잘 작동하지만 개별 파일의 변경 사항을 분할하려면 더 많은 정보를 알아야 합니다.
하여 분할커도경우, 사용을 사용합니다.rebase -i
그리고 그것을 표시합니다.edit
두 가지 옵션이 있습니다.
을 한 후
git reset HEAD~
를 사 하여로패적을 사용하여 개별적으로 합니다.git add -p
합니다.작업 복사본을 편집하여 원하지 않는 변경사항을 제거하고 임시 상태를 커밋한 다음 다음 라운드에 대한 전체 커밋을 취소합니다.
옵션 2는 큰 커밋을 분할할 경우 병합의 일부로 중간 버전이 올바르게 빌드되고 실행되는지 확인할 수 있기 때문에 유용합니다.이것은 다음과 같이 진행됩니다.
을 한 후rebase -i
그리고.edit
use , 용사
git reset --soft HEAD~
커밋을 실행 취소하지만 커밋된 파일은 인덱스에 남깁니다.또한 초기 커밋이 최종 결과에 얼마나 가까운지에 따라 소프트를 생략하여 혼합 재설정을 수행할 수 있습니다.유일한 차이점은 모든 변경사항을 스테이징된 상태로 시작하느냐 아니면 모든 변경사항을 스테이징되지 않은 상태로 시작하느냐입니다.
이제 들어가서 코드를 편집합니다.변경 사항을 제거하고, 추가된 파일을 삭제하고, 원하는 시리즈의 첫 번째 커밋을 구성할 수 있습니다.또한 빌드하고 실행하여 일관된 소스 집합이 있는지 확인할 수 있습니다.
원하는 대로 파일을 준비/해제합니다(사용하고 싶습니다).git gui
), 내용을 .
git commit
그것이 첫 번째 약속입니다.이제 작업 복사본을 분할할 커밋 후의 상태로 복원하여 다음 커밋에 대해 더 많은 변경 사항을 적용할 수 있습니다. 편집중커을인의찾다사니다용합으음을면려밋1를 사용합니다.git status
상태의 처음 몇 줄에는 현재 실행 중인 rebase 명령이 표시되며, 여기서 원래 커밋의 sha1을 찾을 수 있습니다.
$ git status
interactive rebase in progress; onto be83b41
Last commands done (3 commands done):
pick 4847406 US135756: add debugging to the file download code
e 65dfb6a US135756: write data and download from remote
(see more in file .git/rebase-merge/done)
...
이 경우 편집 중인 커밋에 sha1이 있습니다.65dfb6a
이를 알면 작업 디렉토리에서 다음 형식을 사용하여 커밋의 내용을 확인할 수 있습니다.git checkout
커밋과 파일 위치를 모두 사용합니다.사용하는 위치.
전체 작업 복사본을 대체할 파일 위치:
git checkout 65dfb6a .
끝에 있는 점을 놓치지 마세요!
이렇게 하면 편집 중인 커밋 이후의 파일이 체크아웃되고 스테이징되지만 이전 커밋과 비교되므로 이미 커밋한 변경 내용은 커밋의 일부가 되지 않습니다.
지금 바로 커밋하여 분할을 완료하거나 다른 중간 커밋을 수행하기 전에 커밋의 일부를 삭제하여 다시 커밋할 수 있습니다.
하나 이상의 커밋에 대해 원래 커밋 메시지를 다시 사용하려면 기본 재배치의 작업 파일에서 직접 사용할 수 있습니다.
git commit --file .git/rebase-merge/message
마지막으로, 당신이 모든 변화를 이루면,
git rebase --continue
기본 재배치 작업을 수행하고 완료합니다.
사용하다git rebase --interactive
커밋을 하려면 를 실행합니다.git reset HEAD~
,그리고 나서.git add -p
일부를 추가한 다음 커밋을 수행하고 추가한 다음 원하는 횟수만큼 다른 커밋을 수행합니다.작업이 끝나면 실행git rebase --continue
모든 분할 커밋이 스택의 초기 단계에 표시됩니다.
중요:언제든지 실행할 수 있기 때문에 이전 변경 사항을 잃어버릴 염려 없이 원하는 모든 변경 사항을 변경할 수 있습니다.git reflog
사항이 (프젝트원이변하경사찾지포기점함항된킴가이리서에는를로이▁it▁to)찾(기▁in지▁that'lets▁call킴▁point가▁(리점▁the▁find▁you▁the포를함)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
번째 첫번변경째▁the를 합니다.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
하고, 에 "의 1"을해 봅시다A
.
git add .
이 지점은 일반적으로 대화형 리베이스 중에 실행되는 지점입니다.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
git rebase --interactive
커밋을 더 작은 커밋으로 분할하는 데 사용할 수 있습니다.Gitdocson rebase에는 프로세스에 대한 간략한 설명이 있습니다. - 커밋 분할:
대화형 모드에서는 커밋을 "edit" 작업으로 표시할 수 있습니다.그러나, 이것이 반드시 다음을 의미하는 것은 아닙니다.
git rebase
에서는 이 편집 결과가 정확히 한 번의 커밋으로 예상됩니다.실제로 커밋을 실행 취소하거나 다른 커밋을 추가할 수 있습니다.이를 사용하여 커밋을 두 개로 나눌 수 있습니다.
재시작치로
git rebase -i <commit>^
서, 디에어<commit>
분할할 커밋입니다.실제로 커밋 범위가 포함되어 있는 한 모든 커밋 범위가 좋습니다.분할할 커밋을 "편집" 작업으로 표시합니다.
커밋을 는 해당커편때는할을 실행합니다.
git reset HEAD^
효과는 HEAD가 하나씩 되감겨지고 지수가 그 뒤를 따릅니다.그러나 작업 트리는 그대로 유지됩니다.이제 첫 번째 커밋에서 적용할 인덱스에 변경 사항을 추가합니다.사용할 수 있습니다.
git add
(인터랙티브 방식으로) 또는 git gui(또는 둘 다)를 사용합니다.현재 인덱스를 지금 적합한 커밋 메시지로 커밋합니다.
작업 트리가 깨끗해질 때까지 마지막 두 단계를 반복합니다.
기본 재배치를 계속합니다.
git rebase --continue
.중간 개정판이 일관성이 있는지 확신할 수 없는 경우(편집, 테스트 제품군 통과 등) 사용해야 합니다.
git stash
각 커밋, 테스트 및 수정이 필요한 경우 커밋 후 아직 확인되지 않은 변경 사항을 저장합니다.
이제 최신 Toroise Git on Windows에서는 매우 쉽게 실행할 수 있습니다.
기본 재배치 대화 상자를 열고 구성한 후 다음 단계를 수행합니다.
- 오른쪽 단추로 하고 "Commit"을선택합니다.
Edit
(픽, 스시쿼, 제삭......) 중). - 릭클"를
Start
리베이스를 시작합니다. - 하면 "을 합니다.
Edit/Split
버튼을 누른 후 "을 클릭합니다.Amend
상자가 커밋 대화 상자가 열립니다.
- 별도의 커밋에 넣을 파일의 선택을 취소합니다.
- 메시지를 한 후 "Commit Message"를합니다.
commit
". - 커밋할 파일이 있을 때까지 커밋 대화 상자가 계속 열립니다.커밋할 파일이 더 이상 없을 경우 커밋을 하나 더 추가할지 묻는 메시지가 계속 표시됩니다.
매우 도움이 되었습니다. 감사합니다. TorothyGit!
기본적으로 수행할 작업을 알고 있지만 항상 올바른 구문을 잊어버리기 때문에 필요한 명령의 빠른 참조:
git rebase -i <sha1_before_split>
# mark the targeted commit with 'edit'
git reset HEAD^
git add ...
git commit -m "First part"
git add ...
git commit -m "Second part"
git rebase --continue
Emmanuel Bernard의 블로그 게시물에 대한 크레딧.
또한 다음과 같은 것들도 있습니다.git reset --soft HEAD^
은 니다합비와 git reset
은 ()입니다.--mixed
인덱스 내용을 유지합니다.따라서 파일을 추가/제거한 경우 이미 인덱스에 파일이 있습니다.
거대한 커밋의 경우 매우 유용한 것으로 밝혀졌습니다.
대화형 기본 재배치를 수행할 수 있습니다.git rebase -i
맨 페이지는 바로 당신이 원하는 것을 가지고 있습니다.
http://git-scm.com/docs/git-rebase#_splitting_commits
대화형 기본 재배치 없이 가장 쉽게 수행할 수 있는 작업은 분할할 분기를 커밋하기 전에 커밋에서 시작하여 새 분기를 만들고, 커밋, 재설정, 저장, 파일 이동 커밋을 수행하고, 다시 스택을 적용하고 변경 사항을 커밋한 다음 이전 분기와 병합하거나 이후의 커밋을 선택하는 것입니다.(그런 다음 이전 지사 이름을 현재 헤드로 전환합니다.) (MBO의 조언에 따라 대화형 리베이스를 수행하는 것이 더 나을 수 있습니다.)
IntelliJ IDEA, PyCharm, PphStorm 등에서 커밋 하나를 분할하는 방법은 다음과 같습니다.
Version Control 로그 창에서 분할할 커밋을 선택하고 마우스 오른쪽 단추를 클릭한 다음
분할할 항목을 다음으로 표시합니다.
헤드가 해당 커밋으로 설정되었음을 의미하는 노란색 태그가 배치되어 있어야 합니다.해당 커밋을 마우스 오른쪽 버튼으로 클릭하고 선택합니다.
이제 이러한 커밋이 스테이징 영역으로 돌아가서 별도로 커밋할 수 있습니다.모든 변경 사항이 커밋된 후에는 이전 커밋이 비활성화됩니다.
최신 커밋으로 작업
기존 커밋에서 무언가를 추출하고 원래 커밋을 유지하려면 다음을 사용할 수 있습니다.
git reset --patch HEAD^
에 git reset HEAD^
이 명령을 사용하면 필요한 청크만 재설정할 수 있습니다.
재설정할 청크를 선택한 후에는 이전 커밋의 변경 사항을 재설정하는 청크가 준비됩니다.이제 변경 사항을 제거하는 마지막 커밋을 변경합니다.
git commit --amend --no-edit
그리고 별도의 커밋에 추가할 수 있는 준비되지 않은 청크가 있습니다.
git add .
git commit -m "new commit"
최신 커밋으로 작업하지 않음
그리고 물론 사용합니다.git rebase --interactive
위에서 제안한 대로 이전 커밋으로 이동합니다.
주제와 다른 사실:
수은에 있어서 그들이 가지고 있습니다.hg split
두특번집 다음의 hg absorb
저는 그것을 보고 싶습니다.
8년이 넘었지만, 어쨌든 누군가는 도움이 될 것입니다.나는 그 속임수를 쓸 수 있었습니다.rebase -i
그 아이디어는 당신이 그것을 하기 전과 같은 상태로 이끄는 것입니다.git commit
:
# first rewind back (mind the dot,
# though it can be any valid path,
# for instance if you want to apply only a subset of the commit)
git reset --hard <previous-commit> .
# apply the changes
git checkout <commit-you-want-to-split>
# we're almost there, but the changes are in the index at the moment,
# hence one more step (exactly as git gently suggests):
# (use "git reset HEAD <file>..." to unstage)
git reset
이 후에 당신은 이 빛나는 것을 보게 될 것입니다.Unstaged changes after reset:
그리고 당신의 레포는 당신이 이 모든 파일들을 커밋하려는 상태입니다.이제부터는 평소처럼 쉽게 다시 저지를 수 있습니다.도움이 되길 바랍니다.
내 생각에 내가 사용하는 가장 좋은 방법은git rebase -i
커밋을 분할하는 단계를 보여주기 위해 비디오를 만들었습니다. https://www.youtube.com/watch?v=3EzOz7e1ADI
다음이 있는 경우:
A - B <- mybranch
커밋 B에서 일부 내용을 커밋한 경우:
/modules/a/file1
/modules/a/file2
/modules/b/file3
/modules/b/file4
그러나 B를 C - D로 나누고 다음과 같은 결과를 얻으려고 합니다.
A - C - D <-mybranch
예를 들어 콘텐츠를 다음과 같이 나눌 수 있습니다(예: 서로 다른 커밋에 있는 서로 다른 디렉터리의 콘텐츠)...
분기를 분할하기 전에 다시 커밋으로 재설정합니다.
git checkout mybranch
git reset --hard A
첫 번째 커밋 만들기( C):
git checkout B /modules/a
git add -u
git commit -m "content of /modules/a"
두 번째 커밋 만들기( D):
git checkout B /modules/b
git add -u
git commit -m "content of /modules/b"
대부분의 기존 답변은 대화형 리베이스 사용을 제안합니다.git rebase -i
또는 그와 유사합니다.저처럼 '대화형' 접근에 대한 공포증이 있고 계단을 내려갈 때 난간을 붙잡고 있는 것을 좋아하는 사람들을 위한 대안이 있습니다.
당신의 이력이 다음과 같다고 말합니다.… —> P –> Q –> R –> … –> Z = mybranch
그리고 당신은 헤어지기를 원합니다.P –> Q
커밋으로 두번커로는, 에국결으밋으로 .P –> Q1 –> Q' –> R' –> … Z' = mybranch
는 가명위치된시드코입니다.Q'
,R'
는 등과동과 .Q
,R
타기.
시작하기 전에 편집증이 있는 경우 백업을 작성합니다.mybranch
역사를 잃을 위험이 없도록 하기 위해:
git checkout mybranch
git checkout -b mybranch-backup
먼저, 먼저, 체웃아를 .P
), 할 새 . (으)로 설정합니다.
git checkout P
git checkout -b mybranch-splitting
에서 원하는 해 보세요.Q
원하는 대로 편집하여 새 중간 커밋을 만듭니다.
git checkout Q file1.txt file2.txt
[…edit, stage commit with “git add”, etc…]
git commit -m "Refactored the widgets"
다음과 같이 이 커밋의 해시를 기록합니다.Q1
, 그럼 이제 해 보세요.Q
HEAD
Q1
(생성)Q'
.
git checkout Q
git reset --soft Q1
git commit -m "Added unit tests for widgets"
git branch -f mybranch-splitting
이제 시작합니다.mybranch-splitting
Q'
그리고 정확히 같은 코드 상태를 가져야 합니다.Q
했니다습다▁(fromase)를 다시 기준으로 . 이제 원래 분기를 다시 기준으로 합니다.Q
Z
기여에에 :
git rebase --onto HEAD Q mybranch
지금이다mybranch
처럼 합니야다여처럼 보여야 .… P -> Q1 –> Q' –> R' –> … Z'
원하신 대로따라서 모든 것이 올바르게 작동하는지 확인한 후 작업 지점과 백업 지점을 삭제하고(해당하는 경우) 다시 작성된 지점을 푸시할 수 있습니다.mybranch
류의상 할 이고, 로 밀 인 주의 이 모두 이미 밀렸다면 강제로 밀어야 할 것이고, 강제로 밀 때의 일반적인 주의 사항이 모두 적용됩니다.
git push --force mybranch
git branch -d mybranch-splitting mybranch-backup
리베이스로 했어요.커밋을 편집하는 것은 커밋 파일을 이미 선택하고 수정할 수 있기 때문에 저에게는 효과가 없습니다. 하지만 저는 모든 파일을 추적되지 않은 파일로 추가하여 일부만 선택할 수 있도록 하고 싶었습니다.단계는 다음과 같습니다.
git rebase -i HEAD~5
는 제 역사상 커밋을- 대상 커밋 ID 복사(나중에 필요)
- 을 밋커표대로 합니다.
d
그것을 떨어뜨리다; a를 추가합니다.b
기본 재배치 프로세스를 중지하고 나중에 계속하려면 커밋 직후에 줄을 그어야 합니다.이것이 마지막 약속일지라도, 이것은 당신에게 단지 약간의 여지를 줍니다.git rebase --abort
그리고 뭔가 잘못될 경우를 대비해 모든 것을 리셋합니다. - 는 철이중에도달면하단점근을 사용합니다.
git cherry-pick -n <COMMIT ID>
이렇게 하면 커밋 자체를 선택하지 않고 커밋 변경 사항을 선택하고 추적되지 않은 상태로 유지됩니다. - 첫 번째 커밋에서 원하는 파일 추가(또는 사용)
git add -i
패치를 적용하여 특정 청크를 추가할 수 있습니다. - 변경 내용을 커밋합니다.
- 남은 변경사항을 어떻게 처리할지 결정합니다.저의 경우 역사의 끝에 그들이 있기를 원했고 갈등이 없었기 때문에 그렇게 했습니다.
git stash
하지만 그냥 저지를 수도 있습니다. git rebase --continue
합니다.
쌍방향 리베이스의 열렬한 팬으로서, 이것은 제가 할 수 있는 가장 쉽고 직접적인 일련의 단계였습니다.저는 이것이 이 문제에 직면한 사람들에게 도움이 되기를 바랍니다!
커밋을 분할하는 또 다른 접근 방식은 다음을 실행하는 것입니다.
git rebase -i <branch or commit>
을 분할커다표시로합다니음으로 합니다.edit
그 선을 복제합니다.기본 재배치 중에 커밋이 두 번 표시됩니다.첫 번째 항목을 편집할 때 두 번째 항목에서 사용할 모든 항목을 제거합니다.완료되면(해당되는 경우 테스트 실행)git add -A
,git commit --amend
합니다.) 및 ("commit message")git rebase --continue
이제 첫 번째 커밋에서 방금 제거한 변경 사항을 가져오는 두 번째 커밋에 들어갑니다.
저는 이것이 조심스럽게 사용하는 것보다 훨씬 쉽다고 생각합니다.
이 방법은 변경사항이 대부분 새 내용을 추가하는 경우에 가장 유용합니다.
분할 중인 커밋과 관련된 커밋 메시지를 손실하지 않으려는 경우도 있습니다.분할하려는 일부 변경 사항을 커밋한 경우 다음 작업을 수행할 수 있습니다.
- 파일에서 제거할 변경사항을 편집합니다(즉, 줄을 삭제하거나 파일을 첫 번째 커밋에 맞게 적절하게 변경).와 선한편와를 할 수 .
git checkout -p HEAD^ -- path/to/file
일부 변경 내용을 현재 트리로 되돌립니다. - 이 편집을 다음과 같은 새 커밋으로 커밋합니다.
git add . ; git commit -m 'removal of things that should be changed later'
따라서 기록에 원래 커밋이 있고 변경한 내용으로 다른 커밋이 있으므로 현재 HEAD에 있는 파일은 분할 후 처음 커밋할 때 사용하는 것처럼 보입니다.
000aaa Original commit
000bbb removal of things that should be changed later
- 편내용되기로 편집
git revert HEAD
되돌리기 커밋을 만듭니다.파일은 원래 커밋에서 수행되는 것처럼 보이고 이제 기록은 다음과 같이 표시됩니다.
000aaa Original commit
000bbb removal of things that should be changed later
000ccc Revert "removal of things that should be changed later" (assuming you didn't edit commit message immediately)
- 이제 처음 두 커밋을 하나로 정리/수정할 수 있습니다.
git rebase -i
이전에 의미 있는 커밋 메시지를 제공하지 않은 경우 되돌리기 커밋을 선택적으로 수정합니다.당신은 남겨져야 합니다.
000ddd Original commit, but without some content that is changed later
000eee Things that should be changed later
언급URL : https://stackoverflow.com/questions/6217156/break-a-previous-commit-into-multiple-commits
'programing' 카테고리의 다른 글
애저 IoT 허브와 애저 IoT 센트럴의 차이점은 무엇입니까? (0) | 2023.05.12 |
---|---|
mongodb에서 문자열을 날짜로 변환하는 중 (0) | 2023.05.12 |
분리된 헤드에서 수행된 커밋으로 수행할 작업 (0) | 2023.05.12 |
Where 절의 SQL Row_Number() 함수 (0) | 2023.05.12 |
Windows 10 콘솔에서 인피니티가 "8"로 인쇄되는 이유는 무엇입니까? (0) | 2023.05.12 |