git을 사용하여 한 가지에있는 모든 커밋을 표시하지만 다른 분기는 아닙니다.

StackOverflow https://stackoverflow.com/questions/1710894

  •  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 지점의 상태가 표시됩니다

시작 풀 요청을 만듭니다 당신이 사용하고있는 GIT 호스팅 서비스를 통해. 지점이 기본 지점에 완전히 병합 된 경우 새 PR을 만들 수 없습니다.

실제로 풀 요청을 할 필요는 없으며 분기를 선택하는 첫 번째 단계 만 사용하십시오.

예를 들어, Github에서 :

비교할 것이 없습니다

Can't create a PR for branches that have been merged.

이것은 명령 줄에서 git을 사용하지 않지만 종종 다른 Arcane git 명령을 기억하지 않고 명확한 정신 모델로 다른 도구를 사용하는 것이 도움이된다는 것을 알게됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top