git을 사용하여 한 가지에있는 모든 커밋을 표시하지만 다른 분기는 아닙니다.
-
19-09-2019 - |
문제
삭제하고 싶은 오래된 지점이 있습니다. 그러나 그렇게하기 전에이 지점에 대한 모든 커밋이 어느 시점에 다른 지점으로 합병되었는지 확인하고 싶습니다. 따라서 다른 지점에 적용되지 않은 현재 지점에 대한 모든 커밋을보고 싶습니다. 다른 지점에?].
해결책
당신은 아마 원할 것입니다
git branch --contains branch-to-delete
여기에는 "Branch-to-Delete"의 커밋이 포함 된 모든 지점이 나와 있습니다. "Branch-to-Delete"이상의 것을보고하면 분기가 병합되었습니다.
귀하의 대안은 실제로 Rev-List 구문입니다. 예를 들어 git log one-branch..another-branch
모든 것을 보여줍니다 one-branch
모든 것이 필요합니다 another-branch
가지다.
당신은 또한 관심이있을 수 있습니다 git show-branch
어디에 있는지 볼 수있는 방법으로.
다른 팁
커밋 목록이 한 가지에 있지만 다른 지점에있는 목록을 보려면 git 로그를 사용하십시오.
git log --no-merges oldbranch ^newbranch
... 즉, OldBranch의 모든 커밋에 대한 커밋 로그를 보여줍니다. ~ 아니다 뉴 브랜치에서. 포함 및 제외 할 여러 가지를 나열 할 수 있습니다.
git log --no-merges oldbranch1 oldbranch2 ^newbranch1 ^newbranch2
참고 : Windows에서 ^
탈출 키이므로 다른 사람과 함께 탈출해야합니다. ^
:
git log --no-merges oldbranch ^^newbranch
Oldbranch에서 커밋을 보여주기 위해 뉴 브랜치에서는 다음과 같습니다.
git log newbranch..oldbranch
이 커밋에 의한 차이를 보여주기 위해 (3 개의 점이 있습니다) :
git diff newbranch...oldbranch
다음은 다이어그램 그림이있는 문서입니다 https://git-scm.com/book/en/v2/git-tools-revision-selection#commit-ranges
여전히 간단한 답변을 찾고있는 사람들은 확인하십시오. git 체리. 커밋 해시 대신 실제 차이를 비교합니다. 즉, 체리가 선택되거나 재건 된 커밋을 수용합니다.
먼저 삭제하려는 지점을 확인하십시오.
git checkout [branch-to-delete]
그런 다음 Git Cherry를 사용하여 주요 개발 지점과 비교하십시오.
git cherry -v master
예제 출력 :
+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
- 85867e38712de930864c5edb7856342e1358b2a0 Yet another message
참고 : -v
플래그는 Sha Hash와 함께 커밋 메시지를 포함시키는 것입니다.
앞쪽에 '+'가있는 줄은 분기 간 지점에 있지만 마스터 브랜치는 아닙니다. 앞에 '-'가있는 사람들은 마스터에 동등한 커밋을 가지고 있습니다.
마스터가 아닌 커밋 만 있으면 Cherry Pick을 Grep과 결합하십시오.
git cherry -v master | grep "^\+"
예제 출력 :
+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message
+ b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message
여기에 게시 된 답변 중 일부는 귀하가 찾는 것을 찾는 데 도움이되지만 다음 하위 사령관 git 지점 작업에 더 적합한 솔루션입니다.
-머신 그 지점은 머리에 완전히 포함되기 때문에 안전하게 삭제할 수있는 모든 가지를 찾는 데 사용됩니다.
들어있는 동안 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
그렇다면 하나 (싱글) 예를 들어 해당 분기 'B'가 분기 'A'로 완전히 병합되면 확인 해야하는 분기 : 다음을 수행 할 수 있습니다.
$ git checkout A
$ git branch -d B
git branch -d <branchname>
"지점이 완전히 병합되어야한다"는 안전이 있습니다.
주의: 이것은 실제로 지점 B를 A로 병합하면 B를 삭제합니다.
이 간단한 스크립트를 사용하여 병합되지 않은 커밋을 볼 수 있습니다.
#!/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 지점의 상태가 표시됩니다