Git을 사용하여 한 분기에 있지만 다른 분기에는없는 모든 커밋을 표시하십시오.
오래된 지점이 있는데 삭제하고 싶습니다. 그러나 그렇게하기 전에이 지점에 대한 모든 커밋이 특정 지점에 다른 지점으로 병합되었는지 확인하고 싶습니다. 따라서 다른 브랜치에 적용되지 않은 현재 브랜치에 대한 모든 커밋을보고 싶습니다. (또는 일부 스크립팅없이 불가능한 경우 적용되지 않은 한 브랜치의 모든 커밋을 어떻게 볼 수 있습니까? 다른 지사에게?].
아마 그냥 원해
git branch --contains branch-to-delete
이것은 "branch-to-delete"에서 커밋을 포함하는 모든 브랜치를 나열합니다. "삭제 삭제"이상을보고하면 분기가 병합 된 것입니다.
당신의 대안은 실제로 rev-list 구문 일뿐입니다. 예를 들어 git log one-branch..another-branch
모든 것이 one-branch
필요한 모든 것을 보여줍니다 another-branch
.
현재 git show-branch
위치를 확인하는 방법 으로 관심을 가질 수도 있습니다 .
어떤 커밋이 한 브랜치에 있지만 다른 브랜치에는없는 커밋 목록을 보려면 git log를 사용하십시오.
git log --no-merges oldbranch ^newbranch
즉, newbranch에 없는 oldbranch의 모든 커밋에 대한 커밋 로그를 표시 합니다. 포함 및 제외 할 여러 분기를 나열 할 수 있습니다 (예 :
git log --no-merges oldbranch1 oldbranch2 ^newbranch1 ^newbranch2
참고 : Windows ^
에서는 이스케이프 키이므로 다른 키로 이스케이프해야합니다 ^
.
git log --no-merges oldbranch ^^newbranch
newbranch가 아닌 oldbranch에는 커밋을 표시하려면 다음을 수행하십시오.
git log newbranch..oldbranch
이 커밋으로 diff를 표시하려면 (세 개의 점이 있음)
git diff newbranch...oldbranch
다음은 다이어그램 그림이있는 문서입니다 https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges
아직도 간단한 답변을 찾고있는 사람들은 git cherry을 확인하십시오 . 커밋 해시 대신 실제 diff를 비교합니다. 그것은 체리 피킹 또는 리베이스 된 커밋을 수용한다는 것을 의미합니다.
먼저 삭제하려는 지점을 체크 아웃하십시오.
git checkout [branch-to-delete]
그런 다음 git cherry를 사용하여 주요 개발 지점과 비교하십시오.
git cherry -v master
출력 예 :
+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
- 85867e38712de930864c5edb7856342e1358b2a0 Yet another message
참고 : -v
플래그는 SHA 해시와 함께 커밋 메시지를 포함합니다.
앞에 '+'가있는 행은 분기 간 삭제에 있지만 마스터 분기에는 없습니다. 앞에 '-'가있는 사람은 마스터에서 동등한 커밋을 갖습니다.
마스터가 아닌 커밋의 경우 체리 선택과 grep을 결합하십시오.
git cherry -v master | grep "^\+"
출력 예 :
+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
여기에 게시 된 답변 중 일부는 원하는 것을 찾는 데 도움이되지만 git branch 의 다음 하위 명령은 작업에 더 적합한 솔루션입니다.
--merged 는 HEAD에 완전히 포함되어 있기 때문에 안전하게 삭제할 수있는 모든 분기를 찾는 데 사용됩니다.
master
하나는 다음과 같이 안전하게 제거 할 수있는 가지를 열거하는 명령을 실행할 수 있지만 다음과 같습니다.
git branch --merged
develop
fpg_download_links
* master
master_merge_static
# Delete local and remote tracking branches you don't want
git branch -d fpg_download_links
git push origin :fpg_download_links
git branch -d master_merge_static
git push origin :master_merge_static
# There is also a flag to specify remote branches in the output
git branch --remotes --merged
jimmyorr의 답변 이 Windows에서 작동하지 않습니다. 다음 과 같이 사용하는 --not
것이 좋습니다 ^
.
git log oldbranch --not newbranch --no-merges
이 경우 하나의 (단일) 완전히이 지점 'A'로 통합 당신이 해당 분기 'B'를 원하는 경우, 예를 들어, 확인해야한다는 분기, 당신은 단순히 다음을 수행 할 수 있습니다 :
$ git checkout A
$ git branch -d B
git branch -d <branchname>
"지사를 HEAD에 완전히 병합해야합니다."
주의 : 분기 B가 A로 병합되면 실제로 삭제됩니다.
이 간단한 스크립트를 사용하여 병합되지 않은 커밋을 볼 수 있습니다
#!/bin/bash
# Show commits that exists only on branch and not in current
# Usage:
# git branch-notmerge <branchname>
#
# Setup git alias
# git config alias.branch-notmerge [path/to/this/script]
grep -Fvf <(git log --pretty=format:'%H - %s') <(git log $1 --pretty=format:'%H - %s')
분기 상태를 표시하는 도구 git-wtf 를 사용할 수도 있습니다
사용중인 git 호스팅 서비스를 통해 풀 요청 생성을 시작하십시오 . 지점이 기본 지점으로 완전히 병합 된 경우 새 PR을 만들 수 없습니다.
실제로 풀 요청을 할 필요는 없으며 분기를 선택하는 첫 번째 단계 만 사용하십시오.
예를 들어, GitHub에서 :
비교할 것이 없습니다
이것은 명령 줄에서 git을 사용하지 않지만 다른 비전적인 git 명령을 기억하려고 시도하는 대신 명확한 정신 모델로 다른 도구를 사용하는 것이 도움이되는 경우가 많습니다.
'Programming' 카테고리의 다른 글
MSB3247 해결-동일한 종속 어셈블리의 다른 버전간에 충돌이 발견되었습니다. (0) | 2020.02.19 |
---|---|
사전 키를 사용할 수 없으면 None을 반환합니다. (0) | 2020.02.19 |
Java Hashmap : 가치에서 키를 얻는 방법? (0) | 2020.02.19 |
git에서 파일을 일시적으로 추적 해제 (0) | 2020.02.19 |
FOREIGN KEY 제약 조건에서 참조하고 있으므로 테이블을자를 수 없습니까? (0) | 2020.02.19 |