힘내 : 지점에서 모든 커밋을 스쿼시하는 방법
나는 다음과 같이 새로운 지점을 만듭니다 master
.
git checkout -b testbranch
나는 그것에 20 커밋을합니다.
이제 20 개의 커밋을 스쿼시하고 싶습니다. 나는 그걸로 그렇게한다 :
git rebase -i HEAD~20
커밋이 몇 개인 지 모르면 어떻게해야합니까? 다음과 같은 작업을 수행하는 방법이 있습니까?
git rebase -i all on this branch
커밋을 모두 없애는 또 다른 방법은 인덱스를 마스터로 재설정하는 것입니다.
git checkout yourBranch
git reset $(git merge-base master yourBranch)
git add -A
git commit -m "one commit on yourBranch"
"yourBranch"지점이 어디에서 왔는지 알기 때문에 완벽하지 않습니다.
참고 : Git을 사용 하면 원점을 찾는 것이 쉽지 않습니다 ( 시각적 인 방법은 여기 에서 볼 수 있듯이 가장 쉬운 방법입니다 ).
편집 : 당신이 사용해야합니다 git push --force
Karlotcha Hoa 는 다음 과 같이 주석을 추가합니다 .
재설정을 위해 할 수있는 일
git reset $(git merge-base master $(git rev-parse --abbrev-ref HEAD))
[그것]은 현재있는 지점을 자동으로 사용합니다.
그리고 그것을 사용하면 명령이 branch name에 의존하지 않기 때문에 별칭을 사용할 수도 있습니다 .
당신이하고있는 일은 꽤 오류가 발생하기 쉽습니다. 그냥 해:
git rebase -i master
분기의 커밋 만 현재 최신 마스터에 자동으로 리베이스합니다.
이를 수행하는 또 다른 간단한 방법은 원점 분기로 이동하여을 수행하는 것 merge --squash
입니다. 이 명령은 "분할 된"커밋을 수행하지 않습니다. 당신이 그것을 할 때, 당신의 지점의 모든 커밋 메시지가 수집됩니다.
$ git checkout master
$ git merge --squash yourBranch
$ git commit # all commit messages of yourBranch in one, really useful
> [status 5007e77] Squashed commit of the following: ...
모든 커밋을 하나의 커밋으로 스쿼시하려는 지점을 체크 아웃하십시오. 호출이라고하자 feature_branch
.
git checkout feature_branch
1 단계:
origin/feature_branch
현지 master
지점 으로 소프트 재설정을 수행하십시오 (필요에 따라 출발지 / 마스터로 재설정 할 수도 있음). 이렇게하면의 추가 커밋이 모두 재설정 feature_branch
되지만 파일 변경 사항은 로컬로 변경하지 않습니다.
git reset --soft master
2 단계:
git repo 디렉토리의 모든 변경 사항을 생성 될 새로운 커밋에 추가하십시오. 그리고 메시지로 같은 것을 커밋하십시오.
git add -A && git commit -m "commit message goes here"
마스터에서 분기한다고 가정하면 항상 yourBranch
재설정 단계 를 시작할 필요가 없습니다 .
git checkout yourBranch
git reset --soft HEAD~$(git rev-list --count HEAD ^master)
git add -A
git commit -m "one commit on yourBranch"
설명 :
git rev-list --count HEAD ^master
마스터에서 기능 분기를 만든 이후 커밋을 계산합니다 (f.ex). 20.git reset --soft HEAD~20
마지막 20 개의 커밋을 소프트 리셋합니다. 이렇게하면 파일에 변경 사항이 남지만 커밋은 제거됩니다.
사용법 :
내 .bash_profile gisquash
에서 하나의 명령 으로이 작업을 수행 하기 위해 별칭을 추가했습니다 .
# squash all commits into one
alias gisquash='git reset --soft HEAD~$(git rev-list --count HEAD ^master)'
재설정 및 커밋 후을 수행해야합니다 git push --force
.
힌트 :
Gitlab> = 11.0을 사용하는 경우 브랜치를 병합 할 때 스쿼시 옵션 이 있으므로 더 이상이 작업을 수행 할 필요가 없습니다 .
스 태싱에 대한 몇 가지 Stackoverflow 질문과 답변을 읽은 결과, 이것은 지점의 모든 커밋을 스쿼시하기에 좋은 라이너라고 생각합니다.
git reset --soft $(git merge-base master YOUR_BRANCH) && git commit -am "YOUR COMMIT MESSAGE" && git rebase -i master
이것은 마스터가 기본 분기라고 가정합니다.
클릭을 선호하는 사람들을위한 솔루션 :
소스 트리 설치 (무료)
부모 커밋을 마우스 오른쪽 버튼으로 클릭하십시오 . 우리의 경우에는 마스터 브랜치입니다.
참고 사항 : 부분 커밋을 원격으로 푸시하는 경우 스쿼시 후에 강제 푸시를 사용해야합니다
참고 URL : https://stackoverflow.com/questions/25356810/git-how-to-squash-all-commits-on-branch
'Programing' 카테고리의 다른 글
JavaScript 함수의 기본 인수 값 (0) | 2020.04.21 |
---|---|
IntelliJ 10.5에서 테스트를 실행할 때“NoSuchMethodError : org.hamcrest.Matcher.describeMismatch”가 표시됨 (0) | 2020.04.21 |
로그인시 ssh-agent 시작 (0) | 2020.04.21 |
높이가 100 % 인 전체 화면 iframe (0) | 2020.04.21 |
Android Studio에서 사용하지 않는 가져 오기 제거 (0) | 2020.04.21 |