커밋을 푸시한 후 git에서 어떻게 스쿼시합니까?
여기서 여러 커밋을 스쿼시하는 방법에 대해 설명하겠습니다.
http://git-scm.com/book/en/Git-Branching-Rebasing
그러나 이미 푸시된 커밋에서는 작동하지 않습니다.로컬 및 리모트리포트 양쪽에서 최근 몇 개의 커밋을 압축하려면 어떻게 해야 합니까?
가 할 때git rebase -i origin/master~4 master
은 그대로 , 앞글은 그대로 두겠습니다.pick
는 3번으로 해 squash
c-x c-c는 다음과 같습니다.
$ git rebase -i origin/master~4 master
# Not currently on any branch.
nothing to commit (working directory clean)
Could not apply 2f40e2c... Revert "issue 4427: bpf device permission change option added"
$ git rebase -i origin/master~4 master
Interactive rebase already started
은 '2f40'입니다.pick
4개의 중 의 커밋이 나오지 .git log
커밋 메시지를 입력할 수 있도록 에디터가 재시작될 것으로 예상했습니다.가가 뭘못 ?? ???
스쿼시는 로컬로 커밋합니다.
git rebase -i origin/master~4 master
그리고 강제로 밀어넣습니다.
git push origin +master
★★★의 차이--force
★★★★★★★★★★★★★★★★★」+
의 매뉴얼에 기재되어 있습니다.
:
--force
되며, 이 를 "fushed"와 사용합니다.push.default
로matching
복수의 「」, 「」, 「」로 되어 있는 .remote.*.push
는, 현재의 브랜치 이외의 참조를 덮어쓸 수 있습니다(리모트 대응의 엄밀한 배후에 있는 로컬 참조를 포함한다). , 「」를 합니다.+
의 앞(르르는예예예예예예예예예예예)git push origin +master
밀어 넣다master
★★★★★★★★★★★★★★★★★★」
브랜치에서는 이렇게 할 수 있었다(마지막 4개의 커밋).
git checkout my_branch
git reset --soft HEAD~4
git commit
git push --force origin my_branch
수용된 답변과 약간의 차이는 있지만, 나는 많은 어려움을 겪었고 마침내 그것을 얻었다.
$ git rebase -i HEAD~4
- 인터랙티브한 화면이 열리면 스쿼시 할 모든 커밋에 대해 pick을 squash로 바꿉니다.
- 편집기를 저장하고 닫습니다.
다음을 사용하여 리모컨에 푸시합니다.
$ git push origin branch-name --force
git rebase -i master
편집기의 VM이 열리고 다음과 같은 메시지가 표시됩니다.
Pick 2994283490 commit msg1
f 7994283490 commit msg2
f 4654283490 commit msg3
f 5694283490 commit msg4
#Some message
#
#some more
여기에서는 다른 모든 커밋의 픽을 "f"(픽스업의 약자)로 변경했습니다.
git push -f origin feature/feature-branch-name-xyz
그러면 모든 커밋이 하나의 커밋으로 수정되고 다른 커밋이 모두 삭제됩니다.내가 이렇게 해서 도움이 됐어.
문제를 할 수 것은 ''를 입니다.branch
작업하고 있지 않다master
:
git checkout -b mybranch
은 ᄃ다.remote
및 "commits" (이미 푸시된 커밋) 및 "commits" ()remote
commits / 시 commits commits / / /local
★★★★★★★★★★★★★★★★★★:
# example merging 4 commits
git checkout mybranch
git rebase -i mybranch~4 mybranch
# at the interactive screen
# choose fixup for commit: 2 / 3 / 4
git push -u origin +mybranch
그리고 도움이 될 수 있는 풀 리퀘스트 노트도 몇 개 있습니다.
1)git rebase -i HEAD~4
상세 내용:현재 브랜치에서는 동작합니다.HEAD~4는 최신 4개의 커밋을 스퀴드하는 것을 의미합니다.인터랙티브 모드(-i)
2) 이 때 편집자는 커밋 목록과 함께 두 번째 커밋과 후속 커밋을 변경하고 픽을 스쿼시로 대체하여 저장합니다.
output: refs/heads/branch-name을(를) 재베이스화 및 업데이트했습니다.
3)git push origin refs/heads/branch-name --force
출력:
remote:
remote: To create a merge request for branch-name, visit:
remote: http://xxx/sc/server/merge_requests/new?merge_request%5Bsource_branch%5D=sss
remote:To ip:sc/server.git
+ 84b4b60...5045693 branch-name -> branch-name (forced update)
리모트에서의 Sqush 변경
- 먼저 로컬 마스터가 리모트 마스터와 동등한지 확인합니다.
- 다음 로컬 합니다.
git reset --soft master
- 으로 변경 및 기능 을 모두 영역에 합니다.
git add .
- 주도록 하겠습니다.
git commit -m "this is the final commit message"
- 브랜치로 합니다.
git push RemoteBranch --force
1개의 브런치로 이미 푸시된2개의 커밋을 스쿼시 하는 경우는, 다음과 같이 동작합니다.
git rebase -i HEAD~2
[ pick older-commit ]
[ squash newest-commit ]
git push --force
디폴트로는 오래된 커밋에 대한 코멘트로서 최신 커밋메시지가 포함됩니다.
Gitlab이나 Github으로 작업할 때 이런 식으로 문제가 발생할 수 있습니다.위의 방법 중 하나로 커밋을 압축합니다.내가 가장 좋아하는 것은:
git rebase -i HEAD~4
or
git rebase -i origin/master
스쿼시 또는 픽스업을 선택해 주세요.이 시점에서 git 상태를 확인합니다.메시지는 다음과 같습니다.
On branch ABC-1916-remote
Your branch and 'origin/ABC-1916' have diverged,
and have 1 and 7 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
그리고 당신은 그것을 잡아당기고 싶을 수 있다.그러지 마십시오. 그렇지 않으면 이전과 같은 상황에 처하게 됩니다.
대신 다음을 사용하여 원래 위치로 푸시하십시오.
git push origin +ABC-1916-remote:ABC-1916
+ 를 사용하면 1개의 브랜치에만 강제 푸시할 수 있습니다.
제 경우 모든 기능 브랜치의 커밋을 하나로 압축하여 커밋 이력을 깔끔하게 할 필요가 있었습니다.GitHub UI를 사용하여 실행.
문제:
- 기능 브랜치(예: featureBranch)가 마스터에서 작성되었습니다(1개월 전).
- feature Branch에 대한 변경 내용을 모두 커밋했습니다(커밋 12개, 작업 1개월).그리고 정기적으로 리모콘에 접속하고 있습니다.
요건:
- 기능 브랜치를 마스터로 갱신하고 기능 브랜치에 단일 커밋을 가지려면 브랜치
다음 절차:
- GitHub UI의 마스터에서 새로운 브랜치(예: featureBranchLatest)를 만듭니다.
- featureBranch에서 featureBranchLatest로 PR을 만듭니다.
- 충돌이 있는 경우 해결합니다.PR을 GitHub UI의 squash commit 옵션과 결합합니다.(커밋 메시지를 변경하여 메시지를 더 선명하게 만듭니다).
이제 featureBranchLatest는 마스터로부터의 최신 변경과 더불어 단일 커밋에 필요한 모든 변경 사항을 단일 커밋합니다.참조할 필요가 없는 경우 이전 분기 featureBranch를 삭제합니다.
GitHub PR에서 커밋을 스쿼시 했을 때의 모습입니다.
그 후:
언급URL : https://stackoverflow.com/questions/5667884/how-to-squash-commits-in-git-after-they-have-been-pushed
'prosource' 카테고리의 다른 글
VBA에서 문자열을 연결하려면 어떻게 해야 하나요? (0) | 2023.04.13 |
---|---|
LINQ의 .Skip(1000)을 쓰는 방법순수 SQL로 취득(100)하시겠습니까? (0) | 2023.04.13 |
Esqueleto를 사용한 목록 유형 처리 (0) | 2023.04.13 |
iOS에서 Base64 인코딩을 하려면 어떻게 해야 하나요? (0) | 2023.04.13 |
합병 갈등에 부딪혔어요.마지를 중단하려면 어떻게 해야 하나요? (0) | 2023.04.13 |