එක් ගොනුවක අනුවාදයක් එක් git ශාඛාවක සිට තවත් ජාලයකට පිටපත් කරන්නේ කෙසේද?


977

මට සම්පුර්ණයෙන්ම ඒකාබද්ධ වූ අතු දෙකක් තිබේ.

කෙසේ වෙතත්, ඒකාබද්ධ කිරීම සිදු කිරීමෙන් පසුව, එක් ගොනුවක් ඒකාබද්ධ කිරීමෙන් අවුල් වී ඇති බව මට වැටහී ඇත (වෙනත් අයෙකු ස්වයංක්‍රීය ආකෘතියක් කළා, ගාහ්), අනෙක් ශාඛාවේ නව අනුවාදයට වෙනස් කිරීම පහසු වනු ඇත, සහ මගේ එක් පේළියේ වෙනසක් මගේ ශාඛාවට ගෙන ආ පසු නැවත ඇතුල් කරන්න.

ඉතින් මෙය කිරීමට පහසුම ක්‍රමය කුමක්ද?


3
පිළිගත් පිළිතුරේ, පළමු විසඳුම වෙනස්කම් සිදු කරන අතර දෙවන විසඳුම එසේ නොවන බව කරුණාවෙන් සලකන්න. stackoverflow.com/a/56045704/151841
user151841

Answers:


1720

ගොනුව අවසන් වීමට අවශ්‍ය ශාඛාවෙන් මෙය ක්‍රියාත්මක කරන්න:

git checkout otherbranch myfile.txt

සාමාන්‍ය සූත්‍ර:

git checkout <commit_hash> <relative_path_to_file_or_dir>
git checkout <remote_name>/<branch_name> <file_or_dir>

සමහර සටහන් (අදහස් වලින්):

  • බැඳීම් හැෂ් භාවිතා කිරීමෙන් ඔබට ඕනෑම බැඳීමකින් ලිපිගොනු ඇද ගත හැකිය
  • මෙය ගොනු සහ නාමාවලි සඳහා ක්‍රියා කරයි
  • මත ලියනු ගොනුව myfile.txtහාmydir
  • ආදේශක කාඩ්පත් ක්‍රියා නොකරයි, නමුත් සාපේක්ෂ මාර්ග ක්‍රියාත්මක වේ
  • බහු මාර්ග නියම කළ හැකිය

විකල්පයක්:

git show commit_id:path/to/file > path/to/file

13
ඔව්, එය එසේ වනු ඇත. නමුත් එය ප්‍රශ්නයේ අභිප්‍රාය විය.
ඉකේ

37
බොහෝ විට පැහැදිලිව පෙනේ, නමුත් ඔබ සම්පූර්ණ ගොනු නාමය භාවිතා කළ යුතුය ... ආදේශක කාඩ්පත් ක්‍රියා නොකරයි!
ක්‍රිස් හාර්ට්

6
කෙසේ වෙතත් .. එය ද හොඳ ක්‍රමයකි: git show commit_id: path / to / file> path / to / file
milushov

14
දුරස්ථ: git checkout origin / otherbranch myfile.txt
Roman Rhrn Nesterov

6
ආදේශක කාඩ්පත් භාවිතා කිරීම සාර්ථක වේ, ඔබට ඒවා ඔතා තැබිය යුතුය, ''එවිට ඒවා කවචයෙන් අර්ථ නිරූපණය නොවේ.
වික්ටර් චාජ්කොව්ස්කි

86

මම මේ හා සමාන සෙවුමකින් මෙම ප්‍රශ්නය අවසන් කළෙමි. මගේ නඩුවේදී, වෙනත් ශාඛාවකින් ගොනුවක් මුල් වැඩ කරන නාමාවලියට උකහා ගැනීමට මම බලාපොරොත්තු වූ අතර එය ගොනුවේ මුල් ස්ථානයට වඩා වෙනස් විය. පිළිතුර :

git show TREEISH:path/to/file >path/to/local/file

18
'Git show' හි අභිප්‍රාය වන්නේ කියවිය හැකි ආකෘතියෙන් දත්ත පර්යන්තයට ප්‍රතිදානය කිරීමයි, එය ගොනුවේ අන්තර්ගතයට හරියටම ගැලපෙන බවට සහතික නොවේ. සමස්තයක් ලෙස වචන ලේඛනයක් පිටපත් කිරීම වඩා හොඳ වන අතරම එහි අන්තර්ගතය වෙනත් ලේඛනයකට පිටපත් කර ඇලවීමට උත්සාහ නොකරන්න.
ගොනන්

මට එය බැලීමට අවශ්‍ය වූ නිසා වර්තමාන ශාඛාවට සාපේක්ෂව අන්තර්ගතය සංසන්දනය කිරීමට මට හැකි විය (කේත කිහිපයක් පරීක්ෂා කරන්න). සින්ටැක්ස් ඉස්මතු කිරීම යනාදිය සඳහා මම මේ සමඟ vim භාවිතා කිරීමට කැමතියි
isaaclw

3
පිටවීම සිදු කිරීමට පෙර අන්තර්ගතය සංසන්දනය කිරීම සඳහා, git diff <other branch> <path to file>හොඳින් ක්‍රියා කරයි.
රැන්ඩල්

2
On ගොනන්: git අනුවාදය 2.21.0 අනුව, "git show" අත්පොතෙහි "සරල බ්ලොබ් සඳහා, එය සරල අන්තර්ගතයන් පෙන්වයි" යනුවෙන් පවසයි. මෙයින් අදහස් කරන්නේ අප සැමවිටම යහපත් බවයි. ඒ ආකාරයෙන් රූපයක් ලබා ගැනීමට මම තරමක් කල්පනාකාරී වෙමි ...
hibbelig

52

පිටවීමේ විධානය භාවිතා කිරීම ගැන කුමක් කිව හැකිද:

  git diff --stat "$branch"
  git checkout --merge "$branch" "$file"
  git diff --stat "$branch"

8
ශාඛා දෙකෙහිම ගොනුව නොපවතී නම් සටහන් ඒකාබද්ධ කිරීම (2 වන විධානය) ක්‍රියා කළ නොහැක
සරල කරන්නා

හ්ම්. මට වෙනසක් නැත. එය වෙනස්
මෙවලමක

git diff--statමූලික වශයෙන් difstat ලෙසම කරන තර්කයකට සහය දක්වයි .
hlovdal

මෙය ක්‍රියාත්මක කිරීම සඳහා ශාඛා දෙකම දේශීයව පරීක්ෂා කර බැලීමට මට සිදු විය.
යුනිටාස්බ ro ක්ස්

20

1) ඔබට ගොනුවේ පිටපතක් අවශ්‍ය වන ශාඛාවක සිටින බවට සහතික වන්න. උදා: මට උප ශාඛා ගොනුව මාස්ටර් තුළ අවශ්‍ය බැවින් ඔබට පිටව යා යුතුයgit checkout master

2) දැන් ඔබට උප ශාඛාවේ සිට මාස්ටර් දක්වා අවශ්‍ය විශේෂිත ගොනුව පමණක් පරීක්ෂා කරන්න,

git checkout sub_branch file_path/my_file.ext

මෙහි sub_branchඅර්ථය වන්නේ ඔබ එම ගොනුව ඇති ස්ථානයෙන් පසුව ඔබට පිටපත් කිරීමට අවශ්‍ය ගොනු නාමයයි.


ඉතා පහසු සහ හොඳින් පැහැදිලි කර ඇත.
අබ්ක්

20

මම භාවිතා කරමි git restore(git 2.23 සිට ලබා ගත හැකිය)

git restore --source otherbranch path/to/myfile.txt


වෙනත් විකල්ප වලට වඩා එය හොඳ ඇයි?

git checkout otherbranch -- path/to/myfile.txt- එය ගොනුව වැඩ කරන ඩිරෙක්ටරියට පමණක් නොව වේදිකා ගත කරන ප්‍රදේශයටද පිටපත් කරයි (ඔබ මෙම ගොනුව අතින් පිටපත් git addකර එය ක්‍රියාත්මක කරන ආකාරයට සමාන බලපෑමක් ඇති කරයි). git restoreවේදිකා ප්‍රදේශයට අත නොතබන්න ( --stagedවිකල්පයෙන් එය නොකියන්නේ නම් ).

git show otherbranch:path/to/myfile.txt > path/to/myfile.txtසම්මත කවච නැවත හරවා යැවීම භාවිතා කරයි. ඔබ පවර්ෂෙල් භාවිතා කරන්නේ නම් පෙළ එන්කයිටින් කිරීමේ ගැටලුවක් තිබිය හැකිය, නැතහොත් ද්විමය නම් ඔබට බිඳුණු ගොනුවක් ලබා ගත හැකිය . git restoreලිපිගොනු වෙනස් කිරීම සමඟ සියල්ලම සිදු කෙරේgit ක්‍රියාත්මක කළ හැකිය.

තවත් වාසියක් නම් ඔබට සම්පූර්ණ ෆෝල්ඩරය ප්‍රතිස්ථාපනය කළ හැකිය:

git restore --source otherbranch path/to

හෝ git restore --overlay --source otherbranch path/toඔබට ගොනු මකා දැමීමෙන් වැළකී සිටීමට අවශ්‍ය නම්. උදාහරණයක් ලෙස otherbranchවර්තමාන වැඩ කරන නාමාවලියට වඩා අඩු ලිපිගොනු තිබේ නම් (සහ මෙම ලිපිගොනු ලුහුබැඳ ඇත ) --overlayවිකල්පයක් නොමැතිව git restoreඒවා මකා දැමෙනු ඇත. නමුත් මෙය හොඳ පෙරනිමි බහාවියර් ය, ඔබට බොහෝ විට අවශ්‍ය වන්නේ ඩිරෙක්ටරියේ තත්වය otherbranch"සමාන නොව මගේ වර්තමාන ශාඛාවේ අතිරේක ලිපිගොනු සමඟ" සමාන වීමයි .


හොඳ පිළිතුරක්. එහි වේ git restoreවෙත මූලාශ්රය ශාඛා සිට ගොනුව පිටපත් ආකාරයෙන් නව ඉලක්කය ශාඛා මත ගොනු? Git show සමඟ මට මෙය ෂෙල් යළි හරවා යැවීම ( git show otherbranch:path/to/file1.txt > path/to/file2.txt) සමඟ කළ හැකිය , නමුත් ඔබ සඳහන් කළ හේතු නිසා ෂෙල් නැවත හරවා යැවීමෙන් වැළකී සිටීමට මට අවශ්‍යය.
අද්මිරාල් ආඩාමා

1
D අද්මිරාල් ඇඩමා ඇත්ත වශයෙන්ම නොවේ. මම හිතන්නේ එය ලබා ගැනීමට විශාල අවස්ථාවක් නැත git restore(නමුත් කවුද දන්නේ;)). මෙම යළි හරවා යැවීමේ ගැටළු මූලික වශයෙන් පවර්ෂෙල් ගැටළුව වන අතර, වෙනත් ෂෙල් එකක් තිබේදැයි විශ්වාස නැත. මම සාමාන්‍යයෙන් " git showනැවත යොමුකිරීමේ" විධානයන් භාවිතා කිරීමට අවශ්‍ය "git bash" හෝ "cmd" වෙත ආපසු යන්නෙමි . නැතහොත් GitExtensions වැනි GUI භාවිතා කරන්න, එහිදී ඔබට ගොනු ගස පිරික්සීමට සහ ඕනෑම ගොනුවක "සුරකින්න" ක්ලික් කරන්න.
මාරියස් පවෙල්ස්කි

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

16

මැඩ්ලෙප්ගේ පිළිතුර අනුගමනය කිරීමෙන් ඔබට තවත් ඩිරෙක්ටරියක් වෙනත් ශාඛාවකින් ඩිරෙක්ටරි බ්ලොබ් සමඟ පිටපත් කළ හැකිය.

git checkout other-branch app/**

දෘෂ්ටි කෝණයෙන් ඔබ එහි එක් ගොනුවක් පමණක් වෙනස් කර ඇත්නම් මෙය හොඳින් ක්‍රියාත්මක වේ ^ _ ^


1
ශාඛා දෙකම නිසියාකාරව අදින්න, පළමුව, හෝ origin/other-branchrepo ශාඛාව වෙත යොමු කිරීම සඳහා භාවිතා කළ යුතු බව සලකන්න . මූලික කරුණු, නමුත් මට දෂ්ට කරන්න. (පිළිතුර විශිෂ්ටයි - සංස්කරණය කිරීමක් අවශ්‍ය නොවේ)
akauppi

3

ලොව පිළිගත් පිළිතුරු, පළමු විකල්පය බව කරුණාවෙන් සලකන්න අධ්යනයක් අනෙක් ශාඛා සිට සමස්ත ගොනුව (වගේgit add ... සිදු කර ඇති), හා දෙවන විකල්පය එම ගොනුව පිටපත් ප්රතිඵලයක්, එහෙත් මෙම වෙනස්කම් වේදිකාගත නැත (ඔබ සිටියා නම් ලෙස බව ගොනුව අතින් සංස්කරණය කර කැපී පෙනෙන වෙනස්කම් තිබුනි).

Git පිටපත් ගොනුව වෙනත් ශාඛාවකින් තොරව වේදිකා ගත නොකර

වේදිකාගත කළ වෙනස්කම් (උදා git add filename):

$ git checkout directory/somefile.php feature-B

$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   directory/somefile.php

කැපී පෙනෙන වෙනස්කම් (වේදිකාගත කර හෝ කැපවී නොමැත):

$ git show feature-B:directory/somefile.php > directory/somefile.php

$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   directory/somefile.php

no changes added to commit (use "git add" and/or "git commit -a")

මට "විශේෂාංග-බී ගොනුවක් නොවේ", ශාඛාවේ නම මුලින්ම පැමිණේ, මේ ගැන -> "> නාමාවලිය / somefile.php" මෙය ගොනුවේ කේතන ක්‍රමය වෙනස් කළ හැකිද?
ටියාගෝ ඔලිවෙයිරා ඩි ෆ්‍රීටාස්
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.