development

힘내를 밀어 넣기 전에 여러 커밋을 결합하기

big-blog 2020. 2. 27. 22:22
반응형

힘내를 밀어 넣기 전에 여러 커밋을 결합하기


이 질문에는 이미 답변이 있습니다.

주제가 비슷한 로컬 저장소에 많은 커밋이 있습니다. 리모컨으로 푸시하기 전에 단일 커밋으로 결합하고 싶습니다. 어떻게합니까? 나는 이것을한다고 생각 rebase하지만 문서를 이해할 수는 없다.


당신이하고 싶은 것은 git에서 "스 쿼싱"이라고합니다. 이 작업을 수행 할 때 많은 옵션이 있지만 (너무 많습니까?) 풀리지 않은 커밋을 모두 단일 커밋으로 병합하려면 다음을 수행하십시오.

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

첫 번째를 제외한 모든 (또는 ) pick변경하십시오 .squashs

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

파일을 저장하고 편집기를 종료하십시오. 그런 다음 다른 커밋 편집기가 열리고 모든 커밋의 커밋 메시지를 하나의 큰 커밋 메시지로 결합 할 수 있습니다.

짜잔! 인터넷 검색 "git squashing"은 사용 가능한 다른 모든 옵션에 대한 설명을 제공합니다.


커밋 많고 마지막 X 커밋 만 스쿼시하려는 경우 스쿼시를 시작하려는 커밋의 커밋 ID를 찾아서 수행하십시오.

git rebase -i <that_commit_id>

그런 다음 leopd의 답변에 설명 된대로 진행 하여 첫 번째 것을 제외한 모든 picks를 squashes로 변경하십시오 .

:

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당신은 하나에 스쿼시하려는 커밋의 수입니다. 이것도 여기 에 설명 되어 있습니다.


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의 로컬 변경 사항 (골룸 사용)


Interactive Rebase로 커밋을 스쿼시 (결합) 할 수 있습니다 . 커맨드 라인이나 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


해당 링크에 자세히 설명 된 Interactive Rebasing 을 사용하고 싶을 것입니다 .

"git rebase interactive"를 검색하면 다른 좋은 자료를 찾을 수 있습니다.

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



반응형