විවිධ ශාඛා දෙකකින් ගොනු සංසන්දනය කරන්නේ කෙසේද?


1565

මා සතුව එක් ශාඛාවක හොඳින් ක්‍රියාත්මක වන අතර තවත් ශාඛාවක කැඩී ඇත. මට අවශ්‍ය වන්නේ අනුවාද දෙක දෙපැත්තෙන් බැලීමට හා වෙනස් දේ බැලීමට ය. මෙය කිරීමට ක්‍රම තිබේද?

පැහැදිලිව කිවහොත් මම සැසඳීමේ මෙවලමක් සොයන්නේ නැත (මම භාවිතා කරන්නේ සංසන්දනය ඉක්මවා). මා සොයන්නේ git diff විධානයක් වන අතර එය මාස්ටර් අනුවාදය මගේ වර්තමාන ශාඛා අනුවාදය සමඟ සංසන්දනය කර වෙනස් වී ඇති දේ බැලීමට ඉඩ දෙයි. මම ඒකාබද්ධ කිරීමක් හෝ කිසිවක් මැද නොවේ. මට ඒ වගේ දෙයක් කියන්න ඕන

git diff mybranch/myfile.cs master/myfile.cs

Answers:


2247

git diff කොමිස් දෙකක් අතර වෙනස ඔබට පෙන්විය හැකිය:

git diff mybranch master -- myfile.cs

හෝ, සමානව:

git diff mybranch..master -- myfile.cs

දෙවැන්න නම් HEADඑය අතහැර දැමිය හැකිය (උදා: master..සංසන්දනය masterකරයි HEAD).

ඔබ mybranch...master( git diffලියකියවිලි වලින් ) උනන්දු විය හැකිය :

මෙම පෝරමය යනු <commit>දෙවර්ගයේම පොදු මුතුන් මිත්තෙකුගෙන් ආරම්භ වන ශාඛාවේ වෙනස්වීම් සහ දෙවන දක්වා වෙනස්වීම් බැලීම ය <commit>. git diff A...Bසමාන වේ git diff $(git-merge-base A B) B.

වෙනත් වචන වලින් කිවහොත්, මෙය වෙනස් වූ masterදා සිට වෙනස් වෙනස්කම් ලබා දෙනු ඇත mybranch(නමුත් එතැන් සිට නව වෙනස්කම් නොමැතිව mybranch).


සෑම අවස්ථාවකම, --ගොනුවේ නමට පෙර බෙදුම්කරු විධාන රේඛා ධජවල අවසානය දක්වයි. තර්කය බැඳීමක් හෝ ගොනුවක් ගැන සඳහන් කරන්නේ නම් Git ව්‍යාකූල නොවනු ඇත. නමුත් එය ඇතුළුවීම නරක පුරුද්දක් නොවේ. උදාහරණ කිහිපයක් සඳහා https://stackoverflow.com/a/13321491/54249 බලන්න .


git difftoolඔබ සතුව වින්‍යාසගත කර ඇත්නම් එකම තර්ක ඉදිරිපත් කළ හැකිය .


44
ඔබට සංසන්දනය කිරීමට අවශ්‍ය අනුවාද දෙකෙන් එකක්වත් වැඩ වෘක්ෂය නොවේ නම්, ඔබට භාවිතා කළ හැකිය git diff branch1 branch2 myfile.cs. (මෙය --තවදුරටත් අවශ්‍ය නොවිය යුතුය, එයට ගත හැක්කේ සංශෝධන තර්ක දෙකක් පමණි.)
කැස්කබෙල්

8
මම මෙහි සෑම අනුවාදයක්ම උත්සාහ කර ඇති අතර කිසිවක් සිදු නොවේ. මගේ ඩිෆ්ටූල් වින්‍යාස කර ඇත (එය ඒකාබද්ධ කිරීම සඳහා ක්‍රියා කරයි). මට bd.ps1 නමින් ගොනුවක් තිබේ. මා ටයිප් කරන සෑම විධානයකම කිසිවක් නොකරයි. වැරැද්දක්වත් දෙන්නේ නැත. WTH!?!?!
මීකා

3
Ic මිකා: ඔබ එය උත්සාහ කරන්නේ සරල වෙනසකින්ද? වත්මන් නාමාවලියට සාපේක්ෂව ඔබ මාර්ගය නිවැරදිව ටයිප් කරනවාද? (එය නිහඬව ගොනුව පවතී නම් නැත, සහ ඔබ භාවිතා කිසිදු වෙනස පෙන්වයි --.. කිරීමට පොදු හා පහසු වැරැද්දක්)
Cascabel

5
පෙන්වා ඇති පරිදි, ගොනුවට සම්පූර්ණ මාවත ඇතුළත් කළහොත් මිස මෙය මට සාර්ථක නොවනු ඇත git diff --name-status branch1..branch2(බොහෝ විට පැහැදිලිව පෙනෙන නමුත් මා කළ කරදරය වෙනත් කෙනෙකුට තිබේ නම් මම එය සඳහන් කරනු ඇතැයි සිතුවෙමි).
hBrent

4
මයිබ්‍රාන්ච් සහ මාස්ටර්ගේ අනුපිළිවෙල ද වැදගත් ය. පළමු ශාඛාවේ ගොනුව '-' උපසර්ග සමඟ පෙන්වනු ඇත, දෙවන ශාඛාවේ ගොනුව '+' උපසර්ග සමඟ පෙන්වනු ඇත.
timbo

419

ඔබට මෙය කරන්න පුළුවන්: git diff branch1:path/to/file branch2:path/to/file

ඔබ diftool වින්‍යාස කර ඇත්නම්, ඔබටද මෙය කළ හැකිය: git difftool branch1:path/to/file branch2:path/to/file

ආශ්‍රිත ප්‍රශ්නය: දෘශ්‍ය වෙනස වැඩසටහන සමඟ git diff ප්‍රතිදානය මා දකින්නේ කෙසේද?


4
කොලෝන් භාවිතා කිරීම සැබවින්ම විශිෂ්ට ක්‍රමයක් නොවේ - එයින් අදහස් කරන්නේ ඔබ ගස් වස්තු හරහා ලිපිගොනු යොමු කරන බවයි, එබැවින් ඔබේ වර්තමාන නාමාවලියට සාපේක්ෂව සම්පූර්ණ මාර්ගය ටයිප් කළ යුතුය.
කැස්කබෙල්

13
Ef ජෙෆ්රෝමි, මෙය වඩාත් මෑත අනුවාදයකින් වෙනස් වී ඇති නමුත් අවම වශයෙන් දැන් ඔබට සාපේක්ෂ මාර්ග භාවිතා කළ හැකිය (උදා branch1:./file). ගොනුව ශාඛා අතර වෙනම ස්ථානයක තිබේ නම් මෙයද ප්‍රයෝජනවත් වේ (උදා git diff branch1:old/path/to/file branch2:new/path/to/file).
redbmk

4
@redbmk ඔව්, එය 2010 සහ දැන් අතර යම් කාලයක් විය! තවමත්, එය ශාඛා දෙකේම එකම ගොනුවක් නම්, මේ ආකාරයට එය කිරීමට අවශ්‍ය නැත git diff branch1 branch2 path/to/file.
කැස්කබෙල්

3
ජෙෆ්රොමි සිසිල්, එය එකතු කළ විට කාල නියමය මට විශ්වාස නැත. ඔව්, මම සාමාන්‍යයෙන් ඔබ සඳහන් කළ වාක්‍ය ඛණ්ඩය භාවිතා කරමි, නමුත් ටිම්ගේ පිළිතුර මට විවිධ මාර්ග සමඟ ලිපිගොනු සංසන්දනය කරන්නේ කෙසේදැයි සොයා ගැනීමට උපකාරී විය, එය ඇත්ත වශයෙන්ම ප්‍රශ්නය අසන දේ
නොවුනත්

1
මම මෙම අදහසට ඇලුම් කරන අතර, මට මෙම වාක්‍ය ඛණ්ඩය වැඩ කිරීමට හෝ ඒ පිළිබඳ කිසිදු සඳහනක් git diff docs හි සොයාගත නොහැක. මට නැති වී ඇත්තේ කුමක්ද? ස්තූතියි!
යෝයෝ

160

වඩාත් නවීන වාක්‍ය ඛණ්ඩය:

git diff ..master path/to/file

ද්වි-තිත් උපසර්ගය යන්නෙහි තේරුම "වත්මන් වැඩ කරන නාමාවලියෙහි සිට" දක්වා ය. ඔබට මෙසේ පැවසිය හැකිය:

  • master.., එනම් ඉහත ප්‍රතිවිරුද්ධයයි. මෙය සමාන වේ master.
  • mybranch..master, වත්මන් වැඩ කරන ගස හැර වෙනත් රාජ්‍යයක් පැහැදිලිව සඳහන් කිරීම.
  • v2.0.1..master, එනම් ටැගයක් යොමු කිරීම.
  • [refspec]..[refspec], මූලික වශයෙන් git සඳහා කේත තත්වයක් ලෙස හඳුනාගත හැකි ඕනෑම දෙයක්.

33

විවිධ ශාඛා දෙකකින් ගොනු සංසන්දනය කිරීමට බොහෝ ක්‍රම තිබේ:

  • විකල්ප 1: ඔබට ගොනුව n විශේෂිත ශාඛාවේ සිට වෙනත් විශේෂිත ශාඛාවකට සංසන්දනය කිරීමට අවශ්‍ය නම්:

    git diff branch1name branch2name path/to/file
    

    උදාහරණයක්:

    git diff mybranch/myfile.cs mysecondbranch/myfile.cs
    

    මෙම උදාහරණයේ දී ඔබ “mybranch” ශාඛාවේ ඇති ගොනුව “mysecondbranch” ශාඛාවේ ගොනුව සමඟ සංසන්දනය කරයි.

  • විකල්ප 2: සරල ක්‍රමය:

     git diff branch1:file branch2:file
    

    උදාහරණයක්:

     git diff mybranch:myfile.cs mysecondbranch:myfile.cs
    

    මෙම උදාහරණය 1 විකල්පයට සමාන වේ.

  • විකල්ප 3: ඔබේ වර්තමාන වැඩ කරන නාමාවලිය යම් ශාඛාවකට සංසන්දනය කිරීමට ඔබට අවශ්‍ය නම්:

    git diff ..someBranch path/to/file
    

    උදාහරණයක්:

    git diff ..master myfile.cs
    

    මෙම උදාහරණයේ දී ඔබ ගොනුව ඔබේ සත්‍ය ශාඛාවේ සිට ප්‍රධාන ශාඛාවේ ගොනුව සමඟ සංසන්දනය කරයි.


12

මම සරලවම කරනවා git diff branch1 branch2 path/to/file

මෙය ගොනු අතර ඇති වෙනස්කම් පරීක්ෂා කරයි. වෙනස්වීම් branch1රතු පැහැයෙන් යුක්ත වේ. වෙනස්වීම් branch2හරිත පැහැයෙන් යුක්ත වේ.

එය branch1අතීතය සහ branch2අනාගතය යැයි උපකල්පනය කෙරේ . වෙනසෙහි ශාඛා අනුපිළිවෙල ආපසු හැරවීමෙන් ඔබට මෙය ආපසු හැරවිය හැකිය:git diff branch2 branch1


Git diff හි කුමන අනුවාදයට මෙය කළ හැකිද? මා ධාවනය කරන අනුවාදයට එය සහාය දක්වන බවක් නොපෙනේ (2..9.2.windows.1).
වින්ස් බෝඩ්රන්

11

වත්මන් ශාඛාවට වඩා වෙනසක් කිරීමට ඔබට අවශ්‍ය නම් ඔබට එය අතහැර දමා භාවිතා කළ හැකිය:

git diff $BRANCH -- path/to/file

මේ ආකාරයෙන් එය වත්මන් ශාඛාවේ සිට යොමු කරන ලද ශාඛාවට ( $BRANCH) වෙනස් වේ.


5

ඇල්ඩල්බික් යෝජනා කළ පිළිතුර සමඟ එකඟ වීම. කේත සමාලෝචන සඳහා වෙනස ගොනුවකට ලිවීමට ඔබට අවශ්‍ය නම් පහත විධානය භාවිතා කරන්න.

git diff branch master -- filepath/filename.extension > filename.diff --cached

2

මගේ නඩුවේදී, මම පහත විධානය භාවිතා කරමි:

git diff <branch name> -- <path + file name>

එකම ගොනුව විවිධ ශාඛා දෙකකින් සංසන්දනය කිරීමට මෙම විධානය ඔබට උදව් කරයි


1

එය කළ හැකි හොඳම ක්‍රමය git diffපහත දැක්වෙන ආකාරයෙන් භාවිතා කිරීමයි: git diff <source_branch> <target_branch> -- file_path

එමඟින් එම ශාඛා වල ගොනු අතර වෙනස පරීක්ෂා කරනු ඇත. Git විධාන සහ ඒවා ක්‍රියාත්මක වන ආකාරය පිළිබඳ වැඩි විස්තර සඳහා මෙම ලිපිය බලන්න .


1

මේ ආකාරයට බැඳීම් හැෂ් භාවිතා කරන්න:

git diff <hash1> <hash2> <filename>

එහිදී hash1 ඕනෑම ඕනෑම ශාඛාවකින්, සඳහා එම සිට සිදු කළ හැකි hash2 .


1

ලිපිගොනු සංසන්දනය කිරීම සඳහා අවස්ථා දෙකක් තිබේ:

සිදුවීම 1: දුරස්ථ ශාඛා සසඳන්න ගොනු (ශාඛා දෙක දුරස්ථ නිධිය මත පවතී යුතුය)

සිදුවීම 2: දුරස්ථ ගබඩාවේ ඇති ගොනු සමඟ දේශීය ලිපිගොනු (ප්‍රාදේශීය වැඩකරන පිටපතෙහි) සංසන්දනය කරන්න.

තර්කනය සරලයි. ඔබ එකිනෙකට වෙනස් ශාඛා නම් දෙකක් ලබා දෙන්නේ නම්, එය සෑම විටම දුරස්ථ ශාඛා සංසන්දනය කරනු ඇති අතර, ඔබ එක් ශාඛා නාමයක් පමණක් ලබා දෙන්නේ නම්, එය සෑම විටම ඔබේ දේශීය වැඩ කරන පිටපත දුරස්ථ repo (ඔබ ලබා දුන්) සමඟ සංසන්දනය කරනු ඇත. දුරස්ථ නිධි සැපයීමට ඔබට පරාසය භාවිතා කළ හැකිය.

උදා: ශාඛාවක් පරීක්ෂා කරන්න

git checkout branch1
git diff branch2 [filename]

මේ අවස්ථාවේ දී, ඔබ ගොනු ලබා නම්, එය ගොනු ඔබේ දේශීය පිටපතක් "නම් දුරස්ථ ශාඛාව සංසන්දනය කරනු ලැබේ branch2 ".

git diff branch1 branch2 [filename]

මේ අවස්ථාවේ දී, එය "නම් දුරස්ථ ශාඛා ගොනු සංසන්දනය කරනු ලැබේ branch1 " එදිරිව " branch2 "

git diff ..branch2 [filename]

මෙම නඩුවේ ද, එය "නම් දුරස්ථ ශාඛා ගොනු සංසන්දනය කරනු ලැබේ branch1 " එදිරිව " branch2 ". ඉතින්, එය ඉහත ආකාරයටම වේ. කෙසේ වෙතත්, ඔබ වෙනත් ශාඛාවකින් ශාඛාවක් නිර්මාණය කර ඇත්නම්, "මාස්ටර්" යැයි පවසන්න, ඔබේ වර්තමාන ශාඛාව දුරස්ථ ගබඩාවේ නොපවතී නම්, එය දුරස්ථ " මාස්ටර් " එදිරිව දුරස්ථ " ශාඛා 2 " සමඟ සැසඳෙනු ඇත.

එය ප්‍රයෝජනවත් යැයි සිතමි.


0

Git bash හි ගොනු දෙකක් සංසන්දනය කිරීම සඳහා ඔබ විධානය භාවිතා කළ යුතුය:

git diff <Branch name>..master -- Filename.extension   

මෙම විධානය මඟින් බාෂ් එකේ ඇති ගොනු දෙක අතර වෙනස පෙන්වනු ඇත.

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.