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로 병합되면 실제로 삭제됩니다.