Git에서 분기를 삭제하는 시기는 언제입니까?
안정적인 애플리케이션이 있다고 가정해 보겠습니다.
내일 누군가가 우리가 즉시 핫픽스하기로 결정한 큰 오래된 버그를 보고합니다.그래서 "마스터"의 핫픽스에 대한 분기를 만들고 "2011_Hotfix"라는 이름을 붙이고 모든 개발자가 공동으로 수정할 수 있도록 이를 밀어 올립니다.
버그를 수정하고 "2011_Hotfix"를 "master" 및 현재 개발 지점에 병합합니다.그리고 "마스터"를 누릅니다.
이제 "2011_Hotfix"를 어떻게 해야 합니까?그것은 시간이 끝날 때까지 영원히 지점으로 남아 있어야 할까요, 아니면 목적을 달성했으니 이제 그것을 삭제해야 할까요?나뭇가지들이 아무데나 널려 있는 채로 두는 것은 부정한 것처럼 보입니다. 가지들의 목록이 매우 길어질 가능성이 높기 때문입니다. 대부분은 더 이상 필요하지 않습니다.
삭제해야 할 경우 기록은 어떻게 됩니까?실제 지점은 더 이상 사용할 수 없지만 그것은 유지됩니까?또한 원격 분기를 제거하려면 어떻게 해야 합니까?
다음을 사용하여 분기를 안전하게 제거할 수 있습니다.git branch -d yourbranch
병합되지 않은 변경사항이 포함된 경우(즉, 분기를 삭제하면 커밋이 손실됨) git에서 알려주고 삭제하지 않습니다.
따라서 병합된 분기를 삭제하는 것은 비용이 적게 들고 기록이 손실되지 않습니다.
원격 분기를 삭제하려면 다음을 사용합니다.git push origin :mybranch
원격 이름이 오리진이고 삭제할 원격 분기의 이름이 mybranch라고 가정합니다.
당신이 해야 할 일은 당신이 방출하는 모든 것에 태그를 다는 것입니다.당신이 적극적으로 개발할 때를 대비하여 가지를 주변에 두어라.
다음을 사용하여 이전 분기 삭제
git branch -d branch_name
다음을 사용하여 서버에서 삭제
git push origin --delete branch_name
또는 오래된 구문.
git push origin :branch_name
이는 "origin에서 branch_name에 아무것도 포함하지 않음"으로 읽힙니다.
즉, DAG(방향 비순환 그래프)가 그것을 가리킬 수 있는 한, 커밋은 역사에 남을 것입니다.
Google "git-flow"는 릴리스 관리, 분기 및 태그 지정에 대한 통찰력을 제공합니다.
질문에 "github" 태그가 있기 때문에 특히 Github에서 풀 요청을 하면 분기를 제거하더라도 풀 요청 데이터(댓글 포함)를 잃지 않습니다.
그 결과:꺼내기 요청을 워크플로우의 일부로 통합할 경우(코드 검토와 원활하게 혼합됨) 분기가 병합되는 즉시 안전하게 삭제할 수 있습니다.이것은 너무 흔해서 최근 Github은 풀 요청을 병합한 직후 "지점 삭제" 버튼을 여는 (달콤한) 기능을 추가했습니다.
그러나 각 그룹은 가장 적합한 워크플로우를 채택해야 합니다(이러한 분기를 삭제하거나 삭제하지 않을 수도 있음).예를 들어, 현재 작업 팀은 풀 요청이 병합되는 즉시 마스터 또는 배포와 관련되지 않은 모든 지점(예: 프로덕션, 스테이징 등)을 제거하고, 관련 커밋이 각 제품의 점진적인 개선을 어떻게 형성했는지에 대한 전체 추적을 수행합니다.
물론 기록 관리(풀 요청 또는 기타)가 버전의 적절한 태그 지정을 대체하지 않으므로(버전을 배포/패키지화하는 동일한 도구/스크립트를 사용하여 자동화하는 것이 좋습니다) 사용자가 특정 순간에 발생하는 모든 항목으로 항상 빠르게 전환할 수 있습니다.태그 지정은 원래 문제를 해결하는 열쇠이기도 합니다. "작업" 분기에 병합된 분기는 삭제할 수 있고 삭제해야 하며 버전 태그, "운영" 등에 병합된 분기는 삭제할 수 없도록 설정하면 이후 버전에 통합될 때까지 핫픽스가 항상 활성화됩니다.
분기 삭제의 단점은 GitHub에서 해당 분기에 대한 하이퍼링크를 끊는다는 것입니다(이 질문은 태그가 지정된 githhub입니다).당신은 받을 것입니다.404 Not Found
해당 링크에 대한 오류입니다.이것이 제가 GitHub에서 분기를 삭제한 후 커밋 또는 태그를 가리키도록 링크를 변경하는 이유입니다.
이메일과 같이 일부 링크를 변경할 수 없기 때문에 GitHub 분기에 대한 하이퍼링크를 처음부터 완전히 피하고 커밋 또는 태그에 연결합니다.
분기가 병합된 후 삭제하는 것을 선호합니다.이렇게 하면 저장소에 있는 긴 분기 목록이 시각적으로 복잡해지는 것을 방지할 수 있습니다.이러한 분기는 저장소의 모든 분기에도 전파됩니다.
먼저 로컬 지점을 삭제합니다.이렇게 하면 나중에 실수로 밀리는 것을 방지할 수 있습니다.
git branch -d branchName
그런 다음 원격 추적 분기를 삭제합니다.
git branch -dr remoteName\branchName
그런 다음 GitHub의 지점을 삭제합니다.나는 웹 인터페이스를 사용하지만, 그에 상응하는 명령은 아래와 같습니다.
git push remoteName :branchName
지점이 합병되지 않더라도, 일반적으로 저는 여전히 후세를 위해 커밋을 유지하고 싶습니다.하지만 저는 여전히 브랜치를 삭제하고 싶습니다.커밋을 주변에 퍼뜨리고 가비지 컬렉터가 커밋을 먹지 않도록 하기 위해 삭제된 브랜치와 동일한 커밋을 가리키는 주석이 달린 태그를 만듭니다.
git tag -a tagName commitOrBranchName
그런 다음 태그를 github에 밀어넣습니다.
git push remoteName tagName
삭제하려는 것 같습니다.2011_Hotfix
역사를 잃지 않고 가지를 치다먼저 삭제에 대해 논의하고, 다음은 역사에 대해 논의하겠습니다.
의 소의.git
분기 삭제 방법은 이미 위에서 설명했으며 예상대로 작동합니다. git
한두 명단령없습가어니다의어없습다니hey▁that,▁"▁does가명령어▁command▁a▁word▁or"를 의미하는 한 두 명령어가 . "이봐요.git
로컬 및 원격 분기를 모두 삭제합니다."그러나 이 동작은 셸 스크립트를 통해 흉내낼 수 있습니다.예를 들어, Zach Holman의 셸 스크립트 'git-nuclear'를 예로 들어 보겠습니다.매우 간단합니다.
#!/bin/sh
git branch -D $1
git push origin :$1
파일( 실파일저예니다합장에행)에합니다.git-nuke
중에.$PATH
디렉터리.만약 당신이 참여하지 않는다면.2011_Hotfix
지점, 당신은 단순히 달리고 있습니다.git-nuke 2011_Hotfix
로컬 및 원격 분기가 모두 삭제됩니다.은 아마도 더 할 수도 합니다. 아마도 더 위험할 것입니다.git
명령을 실행합니다.
역사를 보존하는 것에 대한 당신의 관심은 좋은 것입니다.이런 경우에는 걱정할 필요가 없습니다.를 2011_Hotfix
master
의 모든 2011_Hotfix
됩니다.master
의 커밋 기록.간단히 말해서, 단순 병합으로 인해 기록이 손실되지 않습니다.
저는 당신의 질문의 범위를 벗어나지만 그럼에도 불구하고 관련이 있는 한 단어를 더 추가할 것입니다.20개의 작은 인" 2011_Hotfix
하지만, 당신은 오직 하나의 완전한 커밋을 원합니다.2011_Hotfix
가될추에 master
의 큰커밋으로 합니까?20개의 작은 커밋을 어떻게 하나의 큰 커밋으로 결합합니까? 다히도행.git
를 사용하면 여러 으로 통합할 수 있습니다.git-rebase
어떻게 작동하는지 여기서는 설명하지 않겠습니다. 하지만 관심이 있으시다면 에 대한 설명서는 훌륭합니다.참고:git rebase
역사를 다시 쓰기 때문에, 특히 처음 사용하는 경우에는 신중하게 사용해야 합니다.마지막으로, 당신의2011_Hotfix
시나리오는 단독 개발팀이 아니라 개발팀에 관한 것입니다.이 프젝트팀구사경우용는하이를 사용하는 경우git rebase
팀이 사용에 대한 명확한 지침을 갖는 것이 현명합니다.git rebase
을 주지.git
의 역사.
성공적으로 다시 병합되어 태그가 지정된 경우 더 이상 사용할 수 없습니다.그래서 당신은 안전하게 할 수 있습니다.git branch -d branchname
.
오리진에서 제거된 로컬 분기를 잘라내는 경우 다음을 사용하여 잘라낼 수도 있습니다.git fetch
git fetch --prune
github, BitBucket과 같은 모든 주요 웹 UI에서 분기를 삭제할 수 있습니다.온라인에서 분기를 삭제한 후 다음을 사용하여 로컬 분기를 삭제할 수 있습니다.
git remote prune origin
언급URL : https://stackoverflow.com/questions/5330145/when-to-delete-branches-in-git
'programing' 카테고리의 다른 글
WPF에서 마진 속성을 애니메이션화하는 방법 (0) | 2023.05.01 |
---|---|
C#에서 명령줄 인수를 구문 분석하는 가장 좋은 방법은 무엇입니까? (0) | 2023.05.01 |
Azure 서비스 버스 대기열의 내용 보기 (0) | 2023.05.01 |
Bash의 단일 따옴표와 이중 따옴표의 차이 (0) | 2023.05.01 |
here-discovery는 '예상치 못한 파일 종료' 오류를 제공합니다. (0) | 2023.05.01 |