programing

Git를 누르기 전에 여러 커밋 결합

lastmoon 2023. 6. 6. 10:34
반응형

Git를 누르기 전에 여러 커밋 결합

제 로컬 저장소에 주제와 유사한 커밋이 많이 있습니다.원격으로 푸시하기 전에 단일 커밋으로 결합하고 싶습니다.제가 그걸 어떻게 합니까?생각합니다rebase이렇게 해요, 하지만 문서들을 이해할 수가 없어요.

당신이 하고 싶은 일을 "짓을 짓뭉개기"라고 합니다.이 작업을 수행할 때는 여러 가지 옵션이 있지만(너무 많습니까?) 푸시되지 않은 모든 커밋을 단일 커밋으로 병합하려면 다음 작업을 수행합니다.

git rebase -i origin/master

텍스트편집기가 .-i다음과 "대한 것입니다.

pick 16b5fcc Code in, tests not passing
pick c964dea Getting closer
pick 06cf8ee Something changed
pick 396b4a3 Tests pass
pick 9be7fdb Better comments
pick 7dba9cb All done

두변경을 합니다.picksquash(또는)s 첫것을 는 다음과 같습니다.

pick 16b5fcc Code in, tests not passing
squash c964dea Getting closer
squash 06cf8ee Something changed
squash 396b4a3 Tests pass
squash 9be7fdb Better comments
squash 7dba9cb All done

파일을 저장하고 편집기를 종료합니다.그러면 다른 텍스트 편집기가 열려 모든 커밋의 커밋 메시지를 하나의 큰 커밋 메시지로 결합할 수 있습니다.

Voila! "git squashing"을 검색하면 사용 가능한 다른 모든 옵션에 대한 설명이 제공됩니다.

커밋이 많고 마지막 X 커밋만 스퀴즈하려면 스퀴즈를 시작하고 수행할 커밋의 커밋 ID를 찾습니다.

git rebase -i <that_commit_id>

그런 다음 표범의 대답에 설명된 대로 모든 것을 변경하여 진행합니다.picksquash네, 첫 번째 것을 제외하고요.

:

871adf OK, feature Z is fully implemented      --- newer commit --┐
0c3317 Whoops, not yet...                                         |
87871a I'm ready!                                                 |
643d0e Code cleanup                                               |-- Join these into one
afb581 Fix this and that                                          |
4e9baa Cool implementation                                        |
d94e78 Prepare the workbench for feature Z     -------------------┘
6394dc Feature Y                               --- older commit

다음 중 하나를 수행할 수 있습니다(커밋 수 기록).

git rebase --interactive HEAD~[7]

또는 다음과 같이 입력합니다(스쿼시하지 않을 마지막 커밋의 해시 기록).

git rebase --interactive 6394dc

여기에는 꽤 많은 실용적인 답이 있지만, 저는 이것이 가장 쉽다는 것을 발견했습니다.할 수 . 편집기에서 변경할 수 있습니다.pick와 함께squash그것들을 하나로 제거하기 위해

git rebase -i HEAD~4

디에어,4하나로 압축할 커밋 수입니다.이에 대해서도 여기에서 설명합니다.

다음을 고려 중인 경우squash커밋도 이 합니다.

git rebase -i --root

하면 수있다니습할사용다로 할 수 .git rebase -i: ':'는 다음과 .

git rebase -i origin/master

에서 마지막으로 커밋한 후에 수행한 모든 커밋을 보여주는 편집기 창이 열립니다.origin/master커밋을 거부하거나 커밋을 단일 커밋으로 축소하거나 이전 커밋을 편집할 수 있습니다.

이를 더 나은 방법으로 설명하고 다른 예를 보여줄 수 있는 몇 가지 리소스가 있습니다.

http://book.git-scm.com/4_interactive_rebasing.html

그리고.

http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

제가 찾을 수 있는 첫 두 페이지입니다.

생각해 낸 것은

#!/bin/sh

message=`git log --format=%B origin..HEAD | sort | uniq | grep -v '^$'`
git reset --soft origin
git commit -m "$message"

커밋 메시지에서 빈 행을 결합, 정렬, 통합 및 제거합니다.Github Wiki(골룸 사용)의 로컬 변경에 사용합니다.

대화형 기본 재배치를 사용하여 커밋을 스쿼시(가입)할 수 있습니다.명령줄 또는 SmartGit로 이 작업을 수행하는 방법을 보여주는 꽤 멋진 YouTube 동영상이 있습니다.

이미 SmartGit 사용자인 경우 Ctrl 키를 누른 상태에서 모든 나가는 커밋을 선택하고 상황에 맞는 메뉴(오른쪽 클릭)를 열어 커밋을 스쿼시할 수 있습니다.

매우 편안합니다.

여기에 이미지 설명 입력

Atlassian에서 제공하는 매우 좋은 튜토리얼도 있습니다. 이 튜토리얼은 작동 방식을 보여줍니다.

그리고 나의 방식은squashing다중의push(많은 커밋을 자신의 브랜치에 푸시한 후 풀 요청을 수행하고 이미 푸시한 많은 커밋으로 혼란스럽게 만들고 싶지 않은 경우).제가 하는 방법은 (제가 아는 한 다른 더 간단한 옵션은 없습니다.)

  1. 다음을 위해 새 분기 생성squash(요청을 끌어오려는 원래 분기에서 가져옵니다.)
  2. 새로 만든 분기를 누릅니다.
  3. 분기를 커밋(이미 푸시됨)과 함께 새 분기로 병합합니다.
  4. 새 가지와 스쿼시를 교체합니다.
  5. 새 분기를 누릅니다.
  6. 이제 단일 커밋이 있는 새 분기에 대해 새 꺼내기 요청을 만듭니다.

예:

git checkout from_branch_you_wish_to_pull_request_to
git checkout -b new_branch_will_have_single_squashed_commit
git push -u new_branch_will_have_single_squashed_commit
git merge older_branch_with_all_those_multiple_commits
git rebase -i (here you squash)
git push origin new_branch_will_have_single_squashed_commit

이제 요청을 다음으로 가져올 수 있습니다.from_branch_you_wish_to_pull_request_to

해당 링크에 자세히 설명되어 있는 대화형 기본 재배치를 사용할 수 있습니다.

"gitrebase interactive"를 검색하면 다른 좋은 리소스를 찾을 수 있습니다.

언급URL : https://stackoverflow.com/questions/6934752/combining-multiple-commits-before-pushing-in-git

반응형