Git을 사용하여 마지막 X 커밋을 하나의 커밋으로 어떻게 스쿼시할 수 있습니까?
질문자 :markdorison
답변자 : Chris Johnsen
git rebase
또는 git merge --squash
없이 이 작업을 상당히 쉽게 수행할 수 있습니다. 이 예에서는 마지막 3개의 커밋을 스쿼시합니다.
새 커밋 메시지를 처음부터 작성하려면 다음으로 충분합니다.
git reset --soft HEAD~3 && git commit
기존 커밋 메시지를 연결하여 새 커밋 메시지 편집을 시작하려면(예: pick/squash/squash/…/squash git rebase -i
명령 목록이 시작하는 것과 유사) 다음을 추출해야 합니다. 해당 메시지를 git commit
전달합니다.
git reset --soft HEAD~3 && git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})"
이 두 가지 방법 모두 동일한 방식으로 마지막 세 커밋을 단일 새 커밋으로 스쿼시합니다. 소프트 리셋은 스쿼시하고 싶지 않은 마지막 커밋으로 HEAD를 다시 가리킵니다. 인덱스도 작업 트리도 소프트 리셋에 의해 건드리지 않고 인덱스를 새 커밋에 대해 원하는 상태로 남깁니다(즉, "버리려는" 커밋의 모든 변경 사항이 이미 있습니다).
답변자 : Anomie
매뉴얼에 git rebase -i <after-this-commit>
을 사용하고 두 번째 및 후속 커밋에서 "pick"를 "squash" 또는 "fixup"으로 바꿉니다.
이 예에서 <after-this-commit>
은 SHA1 해시이거나 rebase 명령에 대해 커밋이 분석되는 현재 분기의 HEAD에 대한 상대 위치입니다. 예를 들어 사용자가 과거에 현재 HEAD에서 5개의 커밋을 보려면 git rebase -i HEAD~5
명령을 사용합니다.
답변자 : Mark Longair
git merge --squash
를 사용할 수 있습니다 git rebase -i
보다 약간 더 우아합니다. 마스터에 있고 마지막 12개 커밋을 하나로 스쿼시하고 싶다고 가정합니다.
경고: 먼저 작업을 커밋했는지 확인하십시오. git status
가 깨끗한지 git reset --hard
는 단계적 변경 사항과 단계적 변경 사항을 버릴 것이기 때문에)
그 다음에:
# Reset the current branch to the commit just before the last 12: git reset --hard HEAD~12 # HEAD@{1} is where the branch was just before the previous command. # This command sets the state of the index to be as it would just # after a merge from that commit: git merge --squash HEAD@{1} # Commit those squashed changes. The commit message will be helpfully # prepopulated with the commit messages of all the squashed commits: git commit
git merge
대한 설명서 는 --squash
옵션에 대해 자세히 설명합니다.
업데이트: Chris Johnsen이 답변 git reset --soft HEAD~12 && git commit
보다 이 방법의 유일한 장점은 스쿼시하는 모든 커밋 메시지로 미리 채워진 커밋 메시지를 얻을 수 있다는 것입니다.
답변자 : Brent Bradburn
특히 Git 초보자의 경우 가능하면 git reset
피하는 것이 좋습니다. 많은 커밋을 기반으로 프로세스를 자동화해야 하는 경우가 아니라면 덜 이국적인 방법이 있습니다...
- 작업 브랜치에 스쿼시할 커밋을 넣습니다(아직 없는 경우) -- 이를 위해 gitk를 사용합니다.
- 대상 브랜치를 확인하십시오(예: '마스터').
-
git merge --squash (working branch name)
-
git commit
커밋 메시지는 스쿼시를 기반으로 미리 채워집니다.
답변자 : br3nt
이 편리한 블로그 게시물 덕분에 이 명령을 사용하여 마지막 3개의 커밋을 스쿼시할 수 있다는 것을 알게 되었습니다.
git rebase -i HEAD~3
이것은 추적 정보/원격 리포지토리가 없는 로컬 지점에 있는 경우에도 작동하므로 편리합니다.
이 명령은 대화식 rebase 편집기를 열어 평소대로 재정렬, 스쿼시, 단어 변경 등을 수행할 수 있습니다.
대화형 리베이스 편집기 사용:
대화식 rebase 편집기는 마지막 세 커밋을 보여줍니다. 이 제약 조건은 git rebase -i HEAD~3
명령을 실행할 때 HEAD~3
의해 결정되었습니다.
가장 최근 커밋인 HEAD
가 1행에 먼저 표시됩니다. #
으로 시작하는 행은 주석/문서입니다.
표시된 문서는 매우 명확합니다. 주어진 줄에서 명령을 pick
에서 원하는 명령으로 변경할 수 있습니다.
나는 위 줄의 커밋에 대한 커밋의 변경 사항을 "스쿼시"하고 커밋 메시지를 fixup
때문에 fixup 명령을 사용하는 것을 선호합니다.
1행의 커밋이 HEAD
이므로 대부분의 경우 이것을 pick
둡니다. 커밋을 스쿼시할 다른 커밋이 없기 때문에 squash
또는 fixup
을 사용할 수 없습니다.
커밋 순서를 변경할 수도 있습니다. 이를 통해 연대순으로 인접하지 않은 커밋을 스쿼시하거나 수정할 수 있습니다.
실용적인 일상의 예
최근에 새로운 기능을 커밋했습니다. 그 이후로 두 가지 버그 수정을 커밋했습니다. 하지만 이제 내가 커밋한 새 기능에서 버그(또는 그냥 철자 오류)를 발견했습니다. 얼마나 짜증나! 내 커밋 기록을 오염시키는 새 커밋을 원하지 않습니다!
내가 할 첫 번째 일은 실수를 수정하고 squash this into my new feature!
.
그런 다음 git log
또는 gitk
를 실행하고 새 기능의 커밋 SHA를 가져옵니다(이 경우 1ff9460
).
git rebase -i 1ff9460~
사용하여 대화형 rebase 편집기를 불러옵니다. ~
SHA는 편집기에 해당 커밋을 편집기에 포함하도록 지시합니다.
다음으로 수정 사항( fe7f1e0
)이 포함된 커밋을 기능 커밋 아래 pick
을 fixup
변경합니다.
편집기를 닫으면 수정 사항이 기능 커밋에 포함되고 커밋 기록이 보기 좋고 깨끗해집니다!
이것은 모든 커밋이 로컬일 때 잘 작동하지만 이미 원격으로 푸시된 커밋을 변경하려고 하면 동일한 브랜치를 체크아웃한 다른 개발자에게 실제로 문제를 일으킬 수 있습니다!
답변자 : EthanB
Chris Johnsen의 답변을 바탕으로 ,
bash에서 전역 "squash" 별칭 추가: (또는 Windows의 Git Bash)
git config --global alias.squash '!f(){ git reset --soft HEAD~${1} && git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})"; };f'
... 또는 Windows의 명령 프롬프트 사용:
git config --global alias.squash "!f(){ git reset --soft HEAD~${1} && git commit --edit -m\"$(git log --format=%B --reverse HEAD..HEAD@{1})\"; };f"
~/.gitconfig
다음 별칭이 포함되어야 합니다.
[alias] squash = "!f(){ git reset --soft HEAD~${1} && git commit --edit -m\"$(git log --format=%B --reverse HEAD..HEAD@{1})\"; };f"
용법:
git squash N
N
커밋을 포함하여 자동으로 스쿼시합니다.
참고: 결과 커밋 메시지는 모든 스쿼시된 커밋을 순서대로 조합한 것입니다. 만족스럽지 않다면 언제든지 git commit --amend
수동으로 수정할 수 있습니다. (또는 취향에 맞게 별칭을 편집하십시오.)
답변자 : Xys
2020 리베이스가 없는 간단한 솔루션:
git reset --soft HEAD~2
git commit -m "new commit message"
git push -f
2는 마지막 두 커밋이 스쿼시됨을 의미합니다. 임의의 숫자로 대체할 수 있습니다.
답변자 : Jakir Hosen Khan
이렇게하려면 다음 git 명령을 사용할 수 있습니다.
git rebase -i HEAD~n
n(=4)은 마지막 커밋의 수입니다. 그런 다음 다음과 같은 옵션이 있습니다.
pick 01d1124 Message.... pick 6340aaa Message.... pick ebfd367 Message.... pick 30e0ccb Message....
아래와 같이 업데이트하면 하나의 커밋을 pick
다른 커밋을 가장 최근 것으로 squash
p 01d1124 Message.... s 6340aaa Message.... s ebfd367 Message.... s 30e0ccb Message....
자세한 내용은 링크를 클릭하십시오
답변자 : Matthias M
TortoiseGit을 사용하는 경우 Combine to one commit
기능을 사용할 수 있습니다.
- TortoiseGit 컨텍스트 메뉴 열기
-
Show Log
선택 - 로그 보기에서 관련 커밋 표시
- 상황에 맞는 메뉴에서
Combine to one commit
선택합니다.
이 함수는 필요한 모든 단일 git 단계를 자동으로 실행합니다. 불행히도 Windows에서만 사용할 수 있습니다.
답변자 : trudolf
이 기사를 기반으로 이 방법이 내 사용 사례에 더 쉽다는 것을 알았습니다.
내 'dev' 브랜치는 96 커밋만큼 'origin/dev'보다 앞서 있었습니다(그래서 이러한 커밋은 아직 원격으로 푸시되지 않았습니다).
변경 사항을 적용하기 전에 이러한 커밋을 하나로 묶고 싶었습니다. 저는 분기를 'origin/dev' 상태로 재설정하는 것을 선호합니다(이렇게 하면 96개 커밋의 모든 변경 사항이 미단계 상태로 유지됨). 그런 다음 변경 사항을 한 번에 커밋합니다.
git reset origin/dev git add --all git commit -m 'my commit message'
답변자 : aabiro
커밋을 결합하려는 분기에서 다음을 실행합니다.
git rebase -i HEAD~(n number of commits back to review)
예시:
git rebase -i HEAD~2
이렇게 하면 텍스트 편집기가 열리고 이러한 커밋을 함께 병합하려면 'squash'로 각 커밋 앞의 '선택'을 전환해야 합니다. 문서에서:
p, 선택 = 커밋 사용
s, squash = 커밋을 사용하지만 이전 커밋에 병합
예를 들어, 모든 커밋을 하나로 병합하려는 경우 '선택'이 첫 번째 커밋이고 이후의 모든 커밋(첫 번째 커밋 아래에 위치)은 'squash'로 설정되어야 합니다. vim을 사용하는 경우 삽입 모드에서 :x 를 사용하여 편집기를 저장하고 종료합니다.
그런 다음 리베이스를 계속하려면:
git add . git rebase --continue
커밋 기록을 다시 작성하는 이것과 다른 방법에 대한 자세한 내용은 이 유용한 게시물을 참조하세요.
답변자 : Martin Thoma
Anomies 답변 은 좋지만 이에 대한 불안감이 느껴져 몇 가지 스크린샷을 추가하기로 결정했습니다.
0단계: 자식 로그
git log
현재 위치를 확인하십시오. 가장 중요한 것은 스쿼시하고 싶지 않은 첫 번째 커밋의 커밋 해시를 찾는 것입니다. 그래서 만 :
1단계: git rebase
제 경우에는 git rebase -i [your hash]
실행하십시오.
$ git rebase -i 2d23ea524936e612fae1ac63c95b705db44d937d
2단계: 원하는 것을 선택/스쿼시
제 경우에는 첫 번째 커밋에서 모든 것을 스쿼시하고 싶습니다. 순서는 처음부터 끝까지이므로 git log
에서와 정확히 반대입니다. 제 경우에는 다음을 원합니다.
3단계: 메시지 조정
커밋을 하나만 선택하고 나머지를 스쿼시했다면 커밋 메시지 하나를 조정할 수 있습니다.
그게 다야 이것을 저장하면( :wq
) 완료됩니다. git log
로 살펴보십시오.
답변자 : rashok
절차 1
1) 커밋 짧은 해시 식별
# git log --pretty=oneline --abbrev-commit abcd1234 Update to Fix for issue B cdababcd Fix issue B deab3412 Fix issue A ....
여기서 git log --oneline
도 짧은 해시를 얻는 데 사용할 수 있습니다.
2) 마지막 두 커밋을 스쿼시(병합)하려는 경우
# git rebase -i deab3412
3) 병합을 위한 nano
그리고 아래와 같이 생겼습니다.
.... pick cdababcd Fix issue B pick abcd1234 Update to Fix for issue B ....
4) 단어 pick
을 abcd1234
앞에 있는 squash
이름을 바꿉니다. 이름을 변경한 후에는 아래와 같이 변경되어야 합니다.
.... pick cdababcd Fix issue B squash abcd1234 Update to Fix for issue B ....
nano
편집기를 저장하고 닫습니다. ctrl + o
를 누르고 Enter
를 눌러 저장하십시오. 그런 다음 ctrl + x
를 눌러 편집기를 종료합니다.
6) 그런 다음 nano
편집기가 다시 열립니다. 필요한 경우 업데이트하십시오.
7) 이제 성공적으로 스쿼시되었으므로 로그를 확인하여 확인할 수 있습니다.
# git log --pretty=oneline --abbrev-commit 1122abcd Fix issue B deab3412 Fix issue A ....
8) 이제 repo로 푸시합니다. 분기 이름 앞에 +
기호를 추가하십시오. 강제로 밀어붙이는 것을 의미합니다.
# git push origin +master
ubuntu
셸에서 git 사용을 기반으로 합니다. 다른 OS( Windows
또는 Mac
)를 사용하는 경우 위의 명령은 편집기를 제외하고 동일합니다. 다른 편집기를 얻을 수 있습니다.
절차 2
- 먼저 커밋에 필요한 파일을 추가합니다.
git add <files>
-
--fixup
옵션을 사용하여 커밋하고 이 커밋을 병합(스쿼시)해야OLDCOMMIT
git commit --fixup=OLDCOMMIT
fixup1 <OLDCOMMIT_MSG>
하여 HEAD 위에 새 커밋을 만듭니다.
-
OLDCOMMIT
대한 새 커밋을 병합(스쿼시)합니다.
git rebase --interactive --autosquash OLDCOMMIT^
여기서 ^
OLDCOMMIT
대한 이전 커밋을 의미합니다. 이 rebase
명령은 편집기(vim 또는 nano)에서 대화형 창을 엽니다. 여기서는 아무것도 할 필요가 없으며 저장하고 종료하면 충분합니다. 전달된 옵션은 자동으로 최신 커밋을 이전 커밋 옆으로 이동하고 작업을 fixup
(스쿼시와 동일)으로 변경하기 때문입니다. 그런 다음 rebase가 계속되고 완료됩니다.
절차 3
- 마지막 커밋에 새로운 변경 사항을 추가해야 하는 경우
--amend
git-commit
과 함께 사용할 수 있습니다.
# git log --pretty=oneline --abbrev-commit cdababcd Fix issue B deab3412 Fix issue A .... # git add <files> # New changes # git commit --amend # git log --pretty=oneline --abbrev-commit 1d4ab2e1 Fix issue B deab3412 Fix issue A ....
여기서 --amend
cdababcd
대한 새 변경 사항을 병합하고 새 커밋 ID 1d4ab2e1
결론
- 첫 번째 절차의 장점은 여러 커밋을 스쿼시하고 재정렬하는 것입니다. 그러나 아주 오래된 커밋에 대한 수정 사항을 병합해야 하는 경우 이 절차가 어려울 것입니다.
- 따라서 두 번째 절차는 커밋을 아주 오래된 커밋에 쉽게 병합하는 데 도움이 됩니다.
- 그리고 세 번째 절차는 마지막 커밋에 대한 새로운 변경 사항을 스쿼시하는 경우에 유용합니다.
답변자 : user1376350
이를 수행하는 가장 쉬운 방법은 마스터를 기반으로 새 분기를 만들고 기능 분기 merge --squash
git checkout master git checkout -b feature_branch_squashed git merge --squash feature_branch
그러면 모든 변경 사항을 커밋할 준비가 된 것입니다.
답변자 : Sandesh Kumar
Golden Repository( golden_repo_name
)에서 복제된 원격 브랜치( feature-branch
라고 함)에 있는 경우 커밋을 하나로 스쿼시하는 기술은 다음과 같습니다.
황금 리포지토리를 확인하세요
git checkout golden_repo_name
다음과 같이 그것(골든 리포지토리)에서 새 분기를 만듭니다.
git checkout -b dev-branch
이미 가지고 있는 로컬 브랜치와 스쿼시 병합
git merge --squash feature-branch
변경 사항을 커밋합니다(이것은 dev-branch에 들어가는 유일한 커밋입니다)
git commit -m "My feature complete"
분기를 로컬 저장소로 푸시
git push origin dev-branch
답변자 : Albert Ruelan
예를 들어 https://bitbucket.org 와 같은 분기(원격 리포지토리)의 단일 커밋에 대한 마지막 3개의 커밋을 스쿼시하려는 경우
내가 한 것은
-
git reset --soft HEAD~3
-
git commit
-
git push origin <branch_name> --force
답변자 : Ayan
마지막 10개의 커밋을 1개의 단일 커밋으로 스쿼시하려면:
git reset --soft HEAD~10 && git commit -m "squashed commit"
스쿼시된 커밋으로 원격 브랜치를 업데이트하려는 경우:
git push -f
답변자 : ana
다음은 실행 후 다음에 따라야 할 또 다른 시각적 예입니다. git rebase -i HEAD~3
답변자 : Ariel Gabizon
정말 편리할 수 있는 것:
스쿼시하려는 커밋 해시를 찾으십시오(예: d43e15
.
이제 사용
git reset d43e15 git commit -am 'new commit name'
답변자 : William Denniss
모든 커밋을 단일 커밋으로 만들고 싶다면(예: 프로젝트를 처음 공개적으로 릴리스할 때) 다음을 시도하십시오.
git checkout --orphan <new-branch> git commit
답변자 : ColinM
현재 스쿼시하려는 브랜치에 있고 master는 원래 브랜치이며 최신 커밋에는 사용하려는 커밋 메시지와 작성자가 포함되어 있는 경우 항상 작동하는 간단한 한 줄짜리 라이너:
git reset --soft $(git merge-base HEAD master) && git commit --reuse-message=HEAD@{1}
답변자 : Cascabel
이것은 매우 멍청하지만 일종의 멋진 방식으로 링에 던져 보겠습니다.
GIT_EDITOR='f() { if [ "$(basename $1)" = "git-rebase-todo" ]; then sed -i "2,\$s/pick/squash/" $1; else vim $1; fi }; f' git rebase -i foo~5 foo
git-rebase-todo
(대화형 리베이스 프롬프트)인 경우 첫 번째 "선택"을 제외한 모든 것을 "squash"로 변경하고 그렇지 않으면 vim을 생성하는 git용 새 "편집기"를 제공합니다. 찌그러진 커밋 메시지를 편집하라는 메시지가 표시되면 vim이 표시됩니다. (분명히 나는 foo 브랜치에서 마지막 5개 커밋을 스쿼시하고 있었지만 원하는 대로 변경할 수 있습니다.)
그래도 Mark Longair가 제안한 대로 했을 것입니다.
답변자 : William Entriken
경고: "마지막 X 커밋"이 모호할 수 있습니다.
(MASTER) Fleetwood Mac Fritz Add Danny Lindsey Stevie Kirwan Buckingham Nicks Add Christine Perfect Buckingham Nicks LA1974 Bill < YOU ARE EDITING HERE Clinton (CHECKED OUT, CURRENT WORKING DIRECTORY)
https://github.com/fleetwood-mac/band-history 리포지토리의 매우 간략한 역사 MASTER
) Fleetwood Mac 커밋에 병합하기 위한 풀 요청을 열었습니다.
pull 요청을 열었고 GitHub에서 다음을 볼 수 있습니다.
네 가지 커밋:
- 대니 키완 추가
- 크리스틴 퍼펙트 추가
- LA1974
- 빌 클린턴
아무도 전체 저장소 기록을 읽는 데 신경 쓰지 않을 것이라고 생각합니다. (실제로 저장소가 있습니다. 위의 링크를 클릭하세요!) 이 커밋을 스쿼시하기로 결정했습니다. 그래서 git reset --soft HEAD~4 && git commit
합니다. 그런 다음 git push --force
를 GitHub에 올려서 PR을 정리합니다.
그리고 무슨 일이? Fritz에서 Bill Clinton으로 전송되는 단일 커밋을 방금 수행했습니다. 어제 당신이 이 프로젝트의 Buckingham Nicks 버전을 작업하고 있다는 사실을 잊어버렸기 때문입니다. 그리고 git log
는 GitHub에서 보는 것과 일치하지 않습니다.
이야기의 교훈
- 정확한 당신이 얻고 싶은 파일, 찾기
git checkout
을 - 기록을 유지하려는 정확한 이전 커밋을 찾고
git reset --soft
that - 메이크업
git commit
에로에서 직접 그 뒤틀림을
답변자 : Pulkit Bansal
많은 답변이 git rebase
명령을 기반으로 하지만 내 경험상 git 초보자에게는 다소 복잡하고 고급입니다.
마지막 3개의 커밋을 squish하고 싶다고 가정해 봅시다. 다음 단계는 다음과 같습니다.
- 현재 커밋 ID를
git log -1 --oneline
사용하고 현재 상태의 commit-id를 기록해 두십시오(git reset에 문제가 있는 경우를 대비하여). - Go back 3 commits
git reset --soft HEAD~3
을 사용하여 3개의 커밋으로 돌아갈 것입니다. - 새 커밋 수행 : 이제
git commit -m <NEW_SINGLE_MESSAGE>
를 수행하면 메시지 아래에 세 개의 커밋이 자동으로 결합됩니다.
git reset에 문제가 있는 경우 git reset --soft <ORIGINAL_COMMIT>
답변자 : Zsolt Z.
중간 커밋의 커밋 메시지에 신경 쓰지 않는다면 다음을 사용할 수 있습니다.
git reset --mixed <commit-hash-into-which-you-want-to-squash> git commit -a --amend
답변자 : arush436
답변자 : allenjom
이와 같은 워크플로와 관련된 질문에 대한 답변은 어떻습니까?
- 여러 로컬 커밋, 여러 병합 FROM master ,
- 마지막으로 원격으로 푸시,
- PR 및 검토자에 의해 마스터로 병합. (예, 개발자가
merge --squash
를 병합하는 것이 더 쉬울 것이지만 팀은 프로세스가 느려질 것이라고 생각했습니다.)
이 페이지에서 그런 워크플로를 본 적이 없습니다. (제 눈일 수도 있습니다.) rebase
올바르게 이해하면 여러 병합에 여러 충돌 해결 이 필요합니다. 나는 그것에 대해 생각조차하고 싶지 않습니다!
그래서 이것은 우리에게 효과가 있는 것 같습니다.
-
git pull master
-
git checkout -b new-branch
-
git checkout -b new-branch-temp
- 로컬에서 많은 편집 및 커밋, 정기적으로 마스터 병합
-
git checkout new-branch
-
git merge --squash new-branch-temp
// 모든 변경 사항을 스테이지에 넣습니다. -
git commit 'one message to rule them all'
-
git push
- 검토자는 PR을 수행하고 마스터에 병합합니다.
답변자 : slisnychyi
간단한 솔루션:
git reset --soft HEAD~5
git commit -m "commit message"
git push origin branch --force-with-lease
답변자 : Ethan
더 일반적인 솔루션은 'N' 커밋을 지정하는 것이 아니라 스쿼시하려는 분기/커밋 ID를 지정하는 것입니다. 이것은 특정 커밋까지 커밋을 계산하는 것보다 오류가 발생하기 쉽습니다. 태그를 직접 지정하거나 실제로 계산하려는 경우 HEAD~N을 지정할 수 있습니다.
내 워크플로에서 분기를 시작하고 해당 분기에 대한 첫 번째 커밋은 목표를 요약합니다(즉, 일반적으로 기능에 대한 '최종' 메시지로 공개 리포지토리에 푸시합니다). 내가 하고 싶은 것은 git squash master
를 첫 번째 메시지로 되돌리고 푸시할 준비가 된 것입니다.
별칭을 사용합니다.
squash = !EDITOR="\"_() { sed -n 's/^pick //p' \"\\$1\"; sed -i .tmp '2,\\$s/^pick/f/' \"\\$1\"; }; _\"" git rebase -i
이렇게 하면 삭제된 기록이 삭제되기 전에 덤프됩니다. 되돌리려는 경우 콘솔에서 이전 커밋 ID를 가져와 복구할 수 있는 기회를 제공합니다. (Solaris 사용자는 GNU sed -i
옵션을 사용하고 Mac 및 Linux 사용자는 이 옵션을 사용하는 것이 좋습니다.)
답변자 : Yoaz Menda
git rebase -i HEAD^^
여기서 ^의 수는 X입니다.
(이 경우 마지막 두 커밋을 스쿼시)
출처 : Here
출처 : http:www.stackoverflow.com/questions/5189560/squash-my-last-x-commits-together-using-git">
'etc. > StackOverFlow' 카테고리의 다른 글
단어가 포함되지 않은 줄과 일치하는 정규식 (0) | 2021.09.26 |
---|---|
더미에서 양말을 효율적으로 페어링하려면 어떻게 해야 합니까? (0) | 2021.09.26 |
빈 JavaScript 객체를 어떻게 테스트합니까? (0) | 2021.09.26 |
SQL Server의 SELECT에서 어떻게 업데이트합니까? (0) | 2021.09.26 |
새 로컬 분기를 원격 Git 리포지토리로 푸시하고 추적하려면 어떻게 해야 합니까? (0) | 2021.09.26 |