programing

Git을 사용하여 한 브랜치에 있는 모든 커밋을 표시하지만 다른 브랜치에는 표시 안 함

bestprogram 2023. 4. 12. 23:06

Git을 사용하여 한 브랜치에 있는 모든 커밋을 표시하지만 다른 브랜치에는 표시 안 함

오래된 브랜치가 있는데 삭제하고 싶습니다.다만, 그 전에, 이 브랜치에 대해서 행해진 모든 커밋이 어느 시점에서 다른 브랜치로 Marge 되어 있는 것을 확인하고 싶습니다.따라서 다른 브랜치에 적용되지 않은 커밋을 현재 브랜치에 모두 표시하고 싶습니다(또는 스크립트 없이 이것이 가능하지 않은 경우 다른 브랜치에 적용되지 않은 브랜치 내의 커밋을 어떻게 확인할 수 있습니까).

어떤 커밋이 다른 브랜치에 있지 않은지 목록을 표시하려면 git log를 사용합니다.

git log --no-merges oldbranch ^newbranch

즉, 새로운 브랜치에 없는 오래된 브랜치의 모든 커밋에 대해 show commit logs를 실행합니다.포함 및 제외할 여러 분기를 나열할 수 있습니다.

git log  --no-merges oldbranch1 oldbranch2 ^newbranch1 ^newbranch2

Powershell이 ): Windows 명령어프롬프트(Powershell)^탈출키이므로 .^:

git log --no-merges oldbranch ^^newbranch

넌 아마 그냥...

git branch --contains branch-to-delete

그러면 "branch-to-delete"에서 커밋을 포함하는 모든 브랜치가 나열됩니다.「브런치로부터 삭제」만이 보고되는 것이 아닌 경우는, 브런치가 Marge 된 것입니다.

구문 할 수 있습니다. 예를 리비전 리스트는 리비전 리스트입니다.git log one-branch..another-branch 모든 것을 .one-branch이든지 갖추어야 another-branch

도 관심을 것 같습니다.git show-branch어디 있는지 알아보는 방법으로요

커밋을 뉴브런치가 아닌 oldbranch로 표시하려면:

git log newbranch..oldbranch

이러한 커밋에 의해서 차이를 표시하려면 , 다음의 3개의 점이 있습니다.

git diff newbranch...oldbranch

여기 그림 https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges이 있는 문서가 있습니다.

여전히 간단한 답을 찾고 있는 사람들은 git chree를 확인해 보세요.커밋 해시 대신 실제 차이를 비교합니다.즉, 체리픽 또는 리베이스의 커밋을 수용합니다.

먼저 삭제할 지점을 체크 아웃합니다.

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 브랜치의 서브 명령어는 당신의 작업에 더 적합한 솔루션입니다.

--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

jimmorr의 답변은 Windows에서는 동작하지 않습니다.사용하는 데 도움이 됩니다.--not대신^다음과 같이 합니다.

git log oldbranch --not newbranch --no-merges

예를 들어 브랜치 'B'를 브랜치 'A'로 완전히 Marge하는 경우 확인해야 하는 브랜치(단일)경우 다음 작업을 수행할 수 있습니다.

$ git checkout A
$ git branch -d B

git branch -d <branchname>브랜치는 HEAD로 완전히 Marge해야 합니다."

주의: 지점 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도 사용할 수 있습니다.

커밋도 카운트하고 싶기 때문에, 그 방법은 다음과 같습니다.

현재 브랜치에 있는 커밋 수를 카운트합니다(HEAD), 단,master:

git log --oneline ^master HEAD | wc -l

wc -l단어 수 - l'ines의 수를 세는 것을 의미합니다.

물론 로그 메시지 전체를 보려면 다음과 같이 대답해야 합니다.

git log ^master HEAD

...혹은 응축된 형태로--oneline폼:

git log --oneline ^master HEAD

머지 커밋도 카운트하지 않을 경우 다음 커밋을 제외할 수 있습니다.--no-merges:

git log --oneline --no-merges ^master HEAD | wc -l

기타.

커밋 및 커밋 내용 표시other-branch현재 브랜치에는 없는 것:

git show @..other-branch

또한 커밋을 적용할 수 있습니다.other-branch현재 지점에 직접 연결:

git cherry-pick @..other-branch

그냥 사용하다git cherry지부 내의 모든 커밋을 고르다newFeature42예를 들어 다음과 같습니다.

git cherry -v 마스터 newFeature42

언급URL : https://stackoverflow.com/questions/1710894/using-git-show-all-commits-that-are-in-one-branch-but-not-the-others