2014-01-06 4 views
1

git 기능 분기를 마스터에 병합하는 경우 분기를 삭제하는 것이 가장 좋습니까?병합 후 git 분기 복원

6 개월 후에 삭제 된 지점을 복원하려고합니다 (새로 복제 된 저장소로 가정). 그것이 쉽게 다시 만들거나 그것이 마스터에 합병되었다고 가정하고 그 역사를 찾을 수있는 방법이 있습니까? 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

다른 질문을 읽으면 해당 지점의 머리를 찾을 수 있으면 쉽게 다시 만들 수 있지만 그 일을 어떻게 수행 할 수 있습니까? 다른 어떤 Q & 응답은 "reflog"명령을 참조하지만, 내가 repo를 새로 복제 한 경우에는 유용하지 않습니다.

답변

2

병합 된 분기를 삭제하는 것이 가장 좋은 지 여부는 분기가 워크 플로에 어떤 의미를 갖는지에 따라 다릅니다. 릴리스가 준비되면 마스터에 병합되는 새 릴리스를 준비하는 데 사용되는 지점 인 경우에는 계속 유지해야합니다. 단일 기능을 개발하는 데 쓸모없는 지사 인 경우 일반적으로 지우는 것이 좋습니다. 수십 개의 완료된 분기가있는 git branch 출력을 혼란스럽게 만들지 않아야합니다.

나중에 삭제 된 분기를 다시 만들려면 마지막 커밋에 해당하는 SHA를 찾아야합니다. 당신은 reflog를 편리하게 가지고 있지 않다면 이것을 git log으로 찾아야 할 것입니다. 당신이 병합 커밋 찾을 후에는 목록에 두 부모를 볼 수 있습니다,

# This should match the message of the merge commit, if you kept the default. 
git log --grep=branch-name 

:

commit 38bf1d168e73f9fa708c334e50f256578d5c2d8f 
Merge: a08b280 d7725b0 

첫 번째 부모를이 작업을 수행하는 가장 쉬운 방법은 병합을 검색 같은 것을 확약하는 것 병합 전에 master의 상태입니다. 두 번째는 병합 된 지점의 상태이며, 이는 사용자가 원하는 것입니다. 거기 분기를 다시 작성하고 그것을 체크 아웃 : 병합이 빨리 감기 병합 아니었다 경우 (!) 참고로

git checkout -b branch-name d7725b0 

,이 경우에만 작동합니다. 빨리 감기 병합은 병합중인 참조까지 HEAD까지 압축하므로 병합 커밋을 생성하지 않습니다. 당신은 사용하여 병합 할 때 커밋 항상 새를 만들기 위해 자식을 강제 할 수

git config branch.master.mergeoptions "--no-ff" 
+0

I :

git merge --no-ff branch-name 

을 그리고 당신은 항상이 당신이 당신의 설정에서 설정 할 수있는 경우가하려는 경우 빨리 감기 병합은 병합중인 분기가 시작된 이후에 변경된 사항이 없다면 발생합니다. – KyleL

+1

수정하십시오. 발생하면 "병합"출력의 메모가 표시됩니다. 자세한 설명은 다음과 같습니다. http://ariya.ofilabs.com/2013/09/fast-forward-git-merge.html –