내 마스터 브랜치에서 마지막 5 개의 커밋을보고 싶습니다. 나는해야한다 :마스터에서 커밋을 보는 방법은 무엇입니까?
git checkout master
git log -p -5
나는 커밋을 본다. 나는 확실히 마스터가 아니다. 하나의 메시지가 있기 때문에 : 내가 잘못하고있는 중이 분명
Merge branch 'feature/ABLE-1370' into develop
아무것도?
내 마스터 브랜치에서 마지막 5 개의 커밋을보고 싶습니다. 나는해야한다 :마스터에서 커밋을 보는 방법은 무엇입니까?
git checkout master
git log -p -5
나는 커밋을 본다. 나는 확실히 마스터가 아니다. 하나의 메시지가 있기 때문에 : 내가 잘못하고있는 중이 분명
Merge branch 'feature/ABLE-1370' into develop
아무것도?
이러한 명령은 마스터 분기의 git log
을 보는 데 적합합니다.
'bad'또는 'weird'커밋 : develop
에 다른 항목을 병합 한 다음 master
에 병합 한 경우 커밋 메시지가 계속 유지됩니다.
확인하려면 git branch
을 실행할 수 있습니다. 현재있는 지점은 옆에 *
이있는 지점이됩니다.
여기에서 다루는 문제는 "지점에있는"실제 의미입니다.
직선적 인 선형 개발 기록을 수행 할 때 각 커밋이 어느 분기에 있는지 분명합니다. 그것은 (기술적 또는 에서 가장 일) 단지 하나의 지점 :
$ git checkout branchA
... hack away for a while ...
$ git commit -a -m "new stuff for A" # new commit is on branchA
$ git checkout branchB
... hack some more ...
$ git commit -a -m "new stuff for B"
하지만 다른 가지를 병합 시작하면 어떻게됩니까? 각 Cn
는 커밋 대표
...-C3--C6 <-- branchA
...-C4--C5--C7 <-- branchB
: 하나는 branchA 이상 branchB의 각 커밋 변경 한 후에는 다음과 같이있을 수 있습니다. branchA
은 C6
을 가리키며, "A for new things"로 작성한 것이고 branchB
은 "B를위한 새로운 물건"으로 만든 C7
을 커밋 할 것을 가리 킵니다. (. C3
및 C4
은 이미 시작했을 때 우리는 뒤로 branchA
의 역사를 따를 수 어떻게 부모와 같은 C3
에 C6
점 다시 존재하고, C7
점 C5
, 턴 포인트에 C4
등으로.)
이제 branchA
및 git merge branchB
으로 돌아 간다고 가정합니다. 이 만드는 - 우리는 그것이 C8
를 저지 부르지 만의 병합을 위해 M
를 호출 할 수있다 "커밋 병합"
$ git checkout branchA
$ git merge branchB
이 변화 "그래프를 커밋", 그리고 지금 우리는이 있습니다
...-C3--C6-----M <-- branchA
/
...-C4--C5--C7 <-- branchB
을
새 병합 커밋 M
은 두 개의 부모를 가지고 있으며 C6
및 C7
입니다. branchA
레이블이 커밋 M
을 가리 키도록 변경되었습니다.) - - 모두 부모를 따르
우리가 뒤로 M
를 수행하면
C7
은 이제 "지점"에 있고 커밋은
C5
과
C4
이고 이전의 모든 내역은
C4
입니다.
예를 들어, "이전에 관계가 없지만 지금은 결혼에 의해 가족에게"무리가 들어 오기 전에 지사에서 "원래"커밋을 알 수있는 방법을 궁금해 할 수 있습니다.
완전히 일반적인 대답은 "할 수 없다"입니다. 이는 branchB
과 같은 지사 이름의 레이블이 영구적이지 않기 때문입니다. 지금이 순간, 그것은 C7
을 커밋의 역사는 지금에 결혼했다,하지만 분명 우리는 branchB
라벨 삭제하는 경우 : 우리는이 그림으로 남아 있습니다
$ git branch -d branchB
: 때때로
...-C3--C6-----M <-- branchA
/
...-C4--C5--C7
을 병합의 "첫 번째 부모"다음에 "본선"에 대해 "합리적으로 정확한"그림을 제공하고 자식은 각 병합의 첫 번째 부모만을 따르는 --first-parent
플래그를 갖습니다. 두 개의 서로 다른 개발자가 일부 공유 저장소에서 프로젝트를 복제, 모두가 어떤 지점에 (다른) 변경 한 다음 그들의 변경 내용을 병합하기로 결정 때
것은 이런 종류의 "자연적으로".
A--B--C--D <-- master
앨리스 복사본을 만들고 E
커밋 추가 : 칼이 네 개의 커밋과 REPO을 가지고 가정
A--B--C--D--E <-- master
밥은 칼의 원래의 사본을 만들고 커밋 추가 F
:
A--B--C--D--F <-- master
Alice와 Bob은 Carl에게 멋진 기능이나 버그 수정에 대해 알려주고 Carl은 둘 다 원한다고 결정합니다. 그는 그들을 가지고 (git remote add
등과 함께) git fetch
를 사용할 수 있습니다
E <-- remotes/alice/master
/
A--B--C--D <-- master
\
F <-- remotes/bob/master
지금 칼 쉬운 두 단계의 과정을 자신의 (칼의)의 repo에이 두 가지를 통합 할 수 있습니다.한 단계 A는 빨리 감기 뭔가를 데리러 병합 할 (의 앨리스의 변화를 가정 해 봅시다) :
이 제공$ git merge alice/master
Updating b6636ec..a430f6d
Fast-forward
[snip]
가 (지금은 이름을 밖으로 remotes/
떠날거야)
E <-- master, alice/master
/
A--B--C--D
\
F <-- bob/master
다음 :주는
는$ git merge bob/master
이것은 실제 병합 커밋하게한다 (그래서 모든 것을, merge made by recursive
을 수행하고) :
E <-- alice/master
/\
A--B--C--D M <-- master
\/
F <-- bob/master
앨리스와 밥이 현재 Carl에서 최신 업데이트를 가져 오는 경우 이미 앨리스가 E
팁을 master
이라고 부르며 자신의 로컬 브랜치 이름을 가지고 있으며 서로의 이름을 알 수 없습니다 (앨리스는 " "Bob 여기, 칼만"볼 "), 앨리스는 레이블이없고 레이블이 붙은 코드 F
을 추가합니다 (이름이 까다 롭다면 리모컨의 이름을 carl
으로 변경하여 이름을 바꿀 것입니다). carl/master
). 그녀는 다음 M
를 가리 키도록 자신의 master
을 이동할 수 있습니다
A--B--C--D-E-M <-- master, origin/master
\/
F
밥도 마찬가지로 새로운에서 가져올 수 커밋-그를, 그들은 E
하고 M
대신 F
및 M
은 (그러나 M의 "최초의 부모는"아직 E
) : 밥) 빨리 감기 병합으로 (앞으로 그의 master
라벨을 슬라이드 선택하면
A--B--C--D-E-M <-- origin/master
\/
F <-- master [before Bob does the merge]
그래서 E 및 F 커밋의 경우 어떤 분기가 있습니까? 그들은 단지 "마스터"에 있으며, 은 "마스터에서"으로 만들었지 만 Carl은 "마스터"로 만들지 않았으며 Alice와 Bob은 각각 "마스터"로 만들었습니다. 결국 git이 제공하는 유일한 것은 최종 커밋 그래프입니다.
gitk
를 사용할 수 커밋 그래프를 보거나하려면
--decorate --oneline
로 주어 졌을 때
git log --graph
내가이 특히 유용 찾을 수 있습니다. 모든 분기를 보려면
--all
을 추가하고 표시되는 커밋 수를 제한하려면
-number
또는
-n number
(예 :
-5
또는
-n 5
)을 추가하십시오.
시각적 도구를 사용해보십시오. gitg, gitk 예를 들면. 그렇지 않으면이 병합이 정상적 일 수 있습니다. git에서 브랜치 헤드는 히스토리에서 포인터가되며, 이런 식으로 커밋은 더 많은 브랜치에 동시에 존재할 수 있습니다. 귀하의 경우 관련 커밋의 후임자가 마스터가 될 때까지 병합 된 경우 정상적인 수 있습니다. –