Git: ශාඛා දෙකක නවතම පොදු මුතුන් මිත්තෙකු සොයා ගන්න


871

Git ශාඛා දෙකක නවතම මුතුන් මිත්තෙකු සොයා ගන්නේ කෙසේද?


3
වඩාත්ම මෑත අර්ථ දක්වන්න: සැබෑ ලෝක කාලය, කොමිස් ගණන, වෙනත් මෙට්‍රික්?
සිරෝ සැන්ටිලි 郝海东 冠状 病 六四 法轮功 法轮功

2
අදාළ ( criss
jub0bs

1
@CiroSantilli 新疆 改造 中心 996ICU 六四 any එය ඕනෑම මෙට්‍රික් එකක සමාන වේ, එසේ නොවේ ද?
යකොව්එල්

Ak යකොව්ල් මම විශ්වාස කරන්නේ අතු බෙදීම නිසාත්, ඔබේ කැපවූ වස්තූන් මත අත්තනෝමතික බැඳීම් දිනයන් නියම කළ හැකි නිසාත් ය: එම දිනය ඔබට අවශ්‍ය දේ නොවිය හැකිය.
සීරෝ සැන්ටිලි 郝海东 冠状 病 六四 事件 法轮功

1
@CiroSantilli 新疆 改造 中心 996ICU different me වෙනස් විය හැක්කේ ගසෙහි අවසාන පොදු බැඳීමට පෙර පැරණි කාලරාමුව ඇති බැඳීමක් තිබේ නම් පමණි. ඔබට සුළු සුළු උදාහරණයක් සැපයිය හැකිද?
යාකොව්ල්

Answers:


1054

ඔබ සොයන git merge-base. භාවිතය:

$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

88
මෙය නවතම පොදු මුතුන් මිත්තෙකු සොයා ගන්නා බව සලකන්න ... ප්‍රශ්න කරන්නාට අවශ්‍ය දේ එය යැයි මම විශ්වාස කරමි, එබැවින් +1. එය සඳහන් කරමින්, යමෙකු මෙහි පැමිණියහොත් පැරණිතම පොදු මුතුන් මිත්තෙකු සොයා ගැනීමට උත්සාහ කළහොත් (මා කළ පරිදි) - මේ සඳහාද බලන්න: stackoverflow.com/questions/1527234/…
ලින්ඩස්

16
unfunroll: හෝ ඒ සඳහා කෙටිකතාව:git log master...HEAD
සීබී බේලි

17
ලින්ඩෙස් පැරණිතම පොදු මුතුන් මිත්තෙකු ආරම්භක කැපවීම නොවේද?
Thorbj Rrn Ravn Andersen

8
Or ThorbjørnRavnAndersen, ඔව්, මම හිතන්නේ එය එසේය ... විස්තර කිරීමේ දුෂ්කරතාව පැමිණෙන්නේ git විසින් සෘජු ඇසික්ලික් ප්‍රස්ථාරයක් භාවිතා කරන නිසාය, නමුත් බොහෝ විට එය ගසක් ලෙස සිතන අතර එය තාක්‍ෂණිකව නොවේ. මගේ වචනවල වඩාත් සැලකිලිමත් වීමට, මම කතා කළේ "ශාඛා" අපසරනය වීමේ පළමු අවස්ථාවෙහි මවුපියන්ට අවශ්‍ය අවස්ථාව ගැන ය ... ඒවා නැවත ඒකාබද්ධ වී නැවත බෙදී යන ස්ථාන කිහිපයක් තිබිය හැකි බැවින්, මෙය මේවායින් "පැරණිතම", නමුත් සැබවින්ම පැරණිතම මුතුන් මිත්තෙකු නොවේ, එය (මම හිතන්නේ) සෑම විටම ආරම්භක කැපවීමයි.
ලින්ඩ්ස්

7
ශාඛා දෙකක පොදු මුතුන් මිත්තෙකු සොයා ගැනීම පිළිබඳව මෙම ප්‍රශ්නය තදින්ම පැවතුනද , ශාඛා තුනක හෝ වැඩි ගණනක පොදු මුතුන් මිත්තෙකු අවශ්‍ය ඕනෑම අයෙකුට නිවැරදි ප්‍රති .ලය ලබා ගැනීම සඳහා --octopusධජය පසු කළ යුතු බව සැලකිල්ලට ගත යුතුය . පැහැදිලිව පෙනෙන නමුත් වැරැද්ද git merge-base branch1 branch2 branch3ඔබට කැපවීමක් ලබා දෙනු ඇත, නමුත්, ලේඛනයේ සාකච්ඡා කොටසේ විස්තර කර ඇති පරිදි, එය අනිවාර්යයෙන්ම ශාඛා තුනේම පොදු මුතුන් මිත්තෙකු නොවේ .
මාර්ක් අමරි

47

git diff master...feature

ඔබගේ වර්තමාන (සමහර විට බහු-කැපවීම්) විශේෂාංග ශාඛාවේ සියලුම නව කොමිස් පෙන්වයි.

man git-diff ලියකියවිලි:

git diff A...B

සමාන වේ:

git diff $(git merge-base A B) B

නමුත් ...ටයිප් කිරීමට සහ මතක තබා ගැනීමට පහසුය.

ඩේව් සඳහන් කළ පරිදි , විශේෂ නඩුව මඟ HEADහැරිය හැක. නිසා:

git diff master...HEAD

සමාන වේ:

git diff master...

වත්මන් ශාඛාව නම් එය ප්‍රමාණවත් වේ feature.

අවසාන වශයෙන්, එම නියෝගය වැදගත් බව මතක තබා ගන්න! කිරීමෙන් සක්‍රිය නොවන git diff feature...masterවෙනස්කම් පෙන්වනු masterඇත feature.

තවත් git විධානයන් එම වාක්‍ය ඛණ්ඩයට සහය දක්වනු ඇතැයි මම ප්‍රාර්ථනා කරමි, නමුත් මම හිතන්නේ නැහැ ඒවා එසේ කරයි කියා. සමහරුන්ට විවිධ අර්ථකථන පවා ඇත ...: Git බැඳීම් පරාසයන්හි ද්විත්ව-තිත ".." සහ ත්‍රිත්ව-තිත "..." අතර ඇති වෙනස්කම් මොනවාද?


9
නැතහොත් වෙනස් git diff master...වන විශේෂ අවස්ථාවෙහිදීHEAD
ඩේව්

"..." මට බලයෙන් වැඩ කළේ නැත, විහිළුවක් එය git කොන්සෝලයේ වැඩ කර ඇත සමහර විට repo සම්පුර්ණ වී නැත, git diff $ (git merge-base AB) B කර ඇති අතර මම git සඳහා ටිකක් අලුත් බැවින් මෙය අතු ඒකාබද්ධ කළ හැකි යැයි මට තරමක සැකයක්
පැවතුනි

1
වොව්. තරමක් පුදුම සහගතයි. ඔබ කිසි විටෙකත් පරීක්ෂා නොකළ නිසා ඔබට අවශ්‍ය ශාඛාව ඔබේ දේශීය ගබඩාවේ නොපවතින්නේ නම්, ඔබට සරලවම කළ හැකියgit diff origin/branchname...
මාර්ක් චබ්

26

පෙර පිළිතුරක සඳහන් කළ පරිදි, git merge-baseක්‍රියා කරයි:

$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

නමුත් myfeatureවර්තමාන ශාඛාව පොදු නම්, ඔබට භාවිතා කළ හැකිය --fork-point:

$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

මෙම තර්කය ක්‍රියාත්මක වන්නේ ප්‍රමාණවත් තරම් මෑත කාලීන අනුවාද වල පමණි. අවාසනාවට එය සැමවිටම ක්‍රියා නොකරයි, කෙසේ වෙතත් එය පැහැදිලි නැත. කරුණාකර මෙම පිළිතුර අවසානයේ සඳහන් කර ඇති සීමාවන් වෙත යොමු වන්න .


සම්පූර්ණ කැපවීමේ තොරතුරු සඳහා, සලකා බලන්න:

$ git log -1 $(git merge-base --fork-point develop) 

මට තියෙනවා git version 2.14.1.windows.1. වර්තමාන ශාඛාවෙන් අත්හැර දමා ඇති බව මා දන්නාgit merge-base --fork-point branch2 ශාඛාවක් සමඟ (තමන්ගේම කොමිස් සහිතව) ධාවනය කිරීමෙන් කිසිදු ප්‍රති result ලයක් නොලැබෙන අතර , දෙබලක ලක්ෂ්‍යය නිවැරදිව පෙන්වයි. ගැටලුව කුමක් විය හැකිද? git merge-base branch1 branch2
ADTC

@ADTC Checkout branch2කර ධාවනය කරන්න git merge-base --fork-point branch1.
Acumenus

@ADTC gitkගස මොන වගේද කියා බැලීමට චිත්‍රක කැපවීමේ නරඹන්නෙකු භාවිතා කරන්න, උදා . සමහර විට ඔබට ඔබේ පිළිතුර ලැබෙනු ඇත.
Acumenus

මම ගස ප්‍රස්ථාරිකව බලන විට එහි කිසිදු අමුතු දෙයක් නොපෙනේ. මට මාර්ග සොයා ගත හැකි අතර එහි ප්‍රති .ලයට ගැලපෙන පොදු මුතුන් මිත්තෙකු සොයා ගත හැකිය git merge-base branch1 branch2. නමුත් අමුතුම දෙය නම් --fork-pointකිසිම දෙයකට කිසිවක් නොලැබීමයි. අපේක්ෂිත පරිදි එය ඔබ වෙනුවෙන් ක්‍රියාත්මක වන බව ඔබ තහවුරු කර තිබේද?
ADTC

1
මට @ADTC එක ලැබෙනවා. 'Git log -1 $ (git merge-base --fork-point anotherBranch)' විධානය මඟින් 2.16.2.windows.1 git අනුවාදය භාවිතා කර කිසිදු ප්‍රති result ලයක් නොපෙන්වයි.
masinger

10

සමග gitk: ඔබ මැනවින් ශාඛා දෙකක් නැරඹිය හැක

gitk branch1 branch2

ශාඛා දෙකේ ඉතිහාසයේ පොදු මුතුන් මිත්තෙකු සොයා ගැනීම පහසුය.


6
සෑම අවස්ථාවකම දෘශ්‍යමය වශයෙන් සෑම දෙයක්ම කළ නොහැක. ක්‍රමලේඛනගතව දේවල් ස්වයංක්‍රීය කිරීමට අවශ්‍ය වීමට හේතු තිබේ.
ADTC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.