නිශ්චිතව දක්වා ඇති ශාඛාවක් නොමැතිව “git push” හි පෙරනිමි හැසිරීම


1371

මගේ දුරස්ථ ශාඛාවට තල්ලු කිරීම සඳහා මම පහත විධානය භාවිතා කරමි:

git push origin sandbox

මම කිව්වොත්

git push origin

එය මගේ අනෙක් ශාඛාවලද වෙනස්කම් ඇති කරයිද, නැතහොත් එය මගේ වර්තමාන ශාඛාව යාවත්කාලීන කරන්නේද? මම ශාඛා තුනක් ඇත: master, productionසහ sandbox.

මෙම git pushමම හොඳ සඳහා මෙම පැහැදිලි කිරීමට කැමතියි එසේ ප්රලේඛනය නැහැ, මේ ගැන ඉතා පැහැදිලි ය.

පහත දැක්වෙන git pushවිධානයන් හරියටම යාවත්කාලීන කරන්නේ කුමන ශාඛා සහ දුරස්ථද ?

git push 
git push origin

origin ඉහත දුරස්ථ වේ.

මට තේරෙනවා එය git push [remote] [branch]එම ශාඛාව පමණක් දුරස්ථයට තල්ලු කරයි.


පොදුවේ වෙනස් මෙවලම් වල වින්‍යාසය සහ නව ස්ක්‍රිප්ට් ජිට් ඩිෆ්ටූල් සම්බන්ධයෙන්, මම මෙම අනෙක් SO ප්‍රශ්නයට නව පිළිතුරක් එක් කර ඇත්තෙමි
VonC

67
මම බ්ලොග් සටහනක් කළේ පුදුම සහගත හැසිරීම ගැන git push, එය උනන්දුවක් දැක්විය හැකිය
මාර්ක් ලෝන්ගෙයාර්

1
Ark මාක්: වෙනත් වැඩ වලදී, වත්මන් ශාඛාව පමණක් එහි ලුහුබඳින උඩුමහලට තල්ලු කරයි. හොඳයි.
VonC


Answers:


1597

ඔබගේ git වින්‍යාසය තුළ push.default සැකසීම මඟින් ඔබට පෙරනිමි හැසිරීම පාලනය කළ හැකිය. සිට මෙම GIT-config (1) ප්රලේඛනය :

push.default

විධාන රේඛාවේ කිසිදු refspec ලබා දී නොමැති නම්, දුරස්ථව කිසිදු refspec වින්‍යාස කර නොමැති නම් සහ විධාන රේඛාවේ දක්වා ඇති කිසිදු විකල්පයකින් refspec එකක් ඇඟවෙන්නේ නැත. විය හැකි අගයන්:

  • nothing: කිසිවක් තල්ලු නොකරන්න

  • matching: ගැලපෙන සියලුම ශාඛා තල්ලු කරන්න

    දෙපැත්තේම එකම නමක් ඇති සියලුම ශාඛා ගැලපේ.

    මෙය පෙරනිමිය විය, නමුත් Git 2.0 සිට නොවේ ( simpleනව පෙරනිමිය).

  • upstream: වත්මන් ශාඛාව එහි උඩුමහලේ ශාඛාවට තල්ලු කරන්න ( trackingඋඩු යටිකුරු කිරීම සඳහා අතහැර දැමූ සමාන පදයකි)

  • current: වත්මන් ශාඛාව එකම නමකින් යුත් ශාඛාවකට තල්ලු කරන්න

  • simple: (Git 1.7.11 හි අළුත්) උඩු යටිකුරු වැනි, නමුත් උඩු මහලේ ශාඛාවේ නම දේශීය නාමයට වඩා වෙනස් නම් තල්ලු කිරීම ප්‍රතික්ෂේප කරයි

    මෙය ආරක්ෂිතම විකල්පය වන අතර ආරම්භකයින් සඳහා හොඳින් ගැලපේ.

    මෙම මාදිලිය Git 2.0 හි පෙරනිමිය බවට පත්ව ඇත.

සරල, වර්තමාන සහ උඩුකුරු මාතයන් වන්නේ වැඩ නිම කිරීමෙන් පසු තනි ශාඛාවක් පිටතට තල්ලු කිරීමට කැමති අය සඳහා වන අතර අනෙක් ශාඛා තවමත් පිටතට තල්ලු කිරීමට සූදානම් නැති විට පවා

විධාන රේඛා උදාහරණ:

වත්මන් වින්‍යාසය බැලීමට:

git config --global push.default

නව වින්‍යාසයක් සැකසීමට:

git config --global push.default current

11
V1.6.3 හි මෙය අළුත් දෙයක් බව සඳහන් කිරීම වටී: kernel.org/pub/software/scm/git/docs/RelNotes-1.6.3.txt
CB Bailey

8
මෙම "push.default" යනු බහු ගබඩාවන් සමඟ වැඩ කිරීම සඳහා මෙතෙක් කළ ලොකුම දෙයයි. එය "ලුහුබැඳීම" ලෙස සකසන්න, ඔබ සියල්ලෝම හොඳයි. ශාඛා - සෙට්-අප්ස්ට්‍රීම් සමඟ ඒකාබද්ධව මෙම තල්ලුව සහ ඇදීම වඩාත් පහසු කරයි.
jpswain

13
"ලුහුබැඳීම" යනු "උඩු
යටිකුරු

22
Git 1.7.11 වන විට නව simpleමාදිලියක් ඇති බව සඳහන් කිරීම වටී . මෙම මාදිලිය අනාගතයේදී පෙරනිමිය බවට පත්වීමට අදහස් කරයි. simpleමෙන් ක්‍රියා කරයි upstream, නමුත් වැනි currentදෙකටම ශාඛා නම් එක සමාන විය යුතුය.
කායි

9
Git 2.0 වන විට simpleහැසිරීම දැන් පෙරනිමිය බව සඳහන් කිරීම වටී .
do0g

210

Push.default සමඟ ඔබේ git සඳහා පෙරනිමි හැසිරීම සැකසිය හැක

git config push.default current

නැතහොත් ඔබට බොහෝ ගබඩාවන් තිබේ නම් සහ සියල්ලටම එක හා සමානයි

git config --global push.default current

මෙම වත්මන් පෙරනිමියෙන් ඔබ කරන බව මම මෙම සැකසුම මාධ්යයන්ගේ පමණක් වත්මන් ශාඛා තල්ලු ඔබ එසේ කරන විට GIT තල්ලුව

වෙනත් විකල්ප:

  • කිසිවක් නැත: කිසිවක් තල්ලු නොකරන්න
  • ගැලපීම: ගැලපෙන සියලුම ශාඛා තල්ලු කරන්න (සුපුරුදු පරිදි)
  • ලුහුබැඳීම: වත්මන් ශාඛාව ලුහුබඳින ඕනෑම දෙයකට තල්ලු කරන්න
  • ධාරාව: වත්මන් ශාඛාව තල්ලු කරන්න

යාවත්කාලීන කිරීම - මෙය කිරීමට නව මාවතක්

Git 1.7.11 අනුව පහත සඳහන් දේ කරන්න:

git config --global push.default simple

මෙය හඳුන්වා දුන් නව පසුබිමක් වන අතර එය ධාරාව මෙන් ක්‍රියා කරන අතර කටකතා වලට අනුව v 2.0 සිට git සඳහා පෙරනිමියක් වනු ඇත


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

3
හරි; එම තනතුරට සංස්කරණයක් යෝජනා කිරීම වඩා හොඳය, මන්ද ඔබේ පිළිතුර කිසිවෙකු නොදකින බැවින් එයට වැඩි ඡන්ද ප්‍රමාණයක් නොලැබෙන බැවිනි
චාල්ස් බී

වර්තමාන ශාඛාව වෙත යමෙකු ඇද ගන්නේ කෙසේද? git pull සම්භවය?
ෆ්‍රැන්කොයිස්

200

git push originගැලපෙන දුරස්ථ ශාඛා ඇති දේශීය ශාඛා වල සියලුම වෙනස්කම් originAs සඳහා තල්ලු කරනු ඇතgit push

මෙන් වැඩ git push <remote>, කොහෙද <remote>(කිසිදු දුරස්ථ වත්මන් ශාඛාව සඳහා සකසා ඇත නම්, හෝ සම්භවය) වර්තමාන ශාඛාවේ දුරස්ථ ය.

මෑන් පිටුවේ උදාහරණ අංශයෙන්git-push


2
ඔව්, එය පැහැදිලි කරයි. මෑන් පිටුවේ මෙම උදාහරණ නොමැති git (1.6.1.1 Mac OS X) හි පැරණි අනුවාදයක් මම ධාවනය කරමි.
PlagueHammer

බොහෝ විට මම ධාවනය කරන්නේ 1.6.3.1. කෙසේ වෙතත් මම එය සම්බන්ධ කළ වෙබ් අඩවියෙන් එය සොයා ගතිමි.
baudtack

2
ඉතින්, මගේ නඩුවේදී, සියලුම දේශීය ශාඛාවන්ට එකම දුරස්ථ “සම්භවයක්” ඇති විට, “git push” හරියටම “git push origin” ට සමාන වන අතර එමඟින් දුරස්ථයේ අනුරූප ශාඛාවක් ඇති දේශීය ශාඛා පමණක් තල්ලු කරනු ඇත.
PlagueHammer

E ඩෙබාජිට් හරි! මාර්ගය වන විට විශාල ප්රශ්නයක්. මම නිතරම උපකල්පනය කළේ git push මගින් වත්මන් ශාඛාව තල්ලු කරනු ඇති බවයි. පෙනෙන විදිහට නැහැ! දැන ගැනීමට ඉතා හොඳයි.
baudtack

5
මෙම ප්‍රශ්නය පරණ නමුත් අළුත් ඕනෑම කෙනෙකුට oc ඩොක්නොම් හරි. 'Git push origin' ධාවනය කිරීමෙන් දැනට පවතින ශාඛාව වෙනුවට සියලුම ශාඛා තල්ලු වේ. සංවර්ධනය නම් ශාඛාවක් තල්ලු කිරීමට බල කිරීම සඳහා 'git push -f -v -n සම්භවය සංවර්ධනය' භාවිතා කරන්න. Git තල්ලු කිරීමේ ප්‍රති result ලය අනුකරණය කිරීමට -n ධජය භාවිතා කරන්න එවිට ඔබට කුමන ශාඛාවට (එස්) බලපානු ඇත්දැයි කල්තියාම දැක ගත හැකිය. එය හොඳ යැයි පෙනේ නම් 'git push -f -v සම්භවය සංවර්ධනය' ධාවනය කරන්න. මෙය ප්‍රයෝජනවත් විය හැකිය stackoverflow.com/questions/3741136/git-push-f-vs
ඩිලන්

54

මම මගේ කේතය ශාඛාවකට බැඳී ගිතුබ් වෙත තල්ලු කළෙමි.

git branch SimonLowMemoryExperiments
git checkout SimonLowMemoryExperiments
git add .
git commit -a -m "Lots of experimentation with identifying the memory problems"
git push origin SimonLowMemoryExperiments

3
ඔබට “git commit -am” සඳහා වූ බැඳීම ense නීභවනය කළ හැකිය ... ”`
ජේම්ස් හැරින්ග්ටන්

17
මෙම පිළිතුරට ප්‍රශ්නයට කිසියම් සම්බන්ධයක් තිබේද ?? :?
අසීම් ​​කේටී

26

Git Push : Git Push: Just Tip පිළිබඳ ඉතා පහසු සහ ප්‍රයෝජනවත් තොරතුරු මෙන්න

Git push හි වඩාත් පොදු භාවිතය වන්නේ ඔබේ දේශීය වෙනස්කම් ඔබේ පොදු උඩු ගබඩාවට තල්ලු කිරීමයි. උඩුමහල දුරස්ථ "සම්භවය" (ඔබේ ගබඩාව ක්ලෝනයක් නම් පෙරනිමි දුරස්ථ නම) යැයි උපකල්පනය කර / වෙත යාවත්කාලීන කළ යුතු ශාඛාව "මාස්ටර්" (පෙරනිමි ශාඛා නම) ලෙස නම් කර ඇත, මෙය සිදු කරන්නේ:git push origin master

git push origin සියලු දේශීය ශාඛාවල සිට ගැලපෙන ශාඛා දක්වා වෙනස්වීම් සම්භවය දුරස්ථ වේ.

git push origin master දේශීය ප්‍රධාන ශාඛාවේ සිට දුරස්ථ මාස්ටර් ශාඛාවට වෙනස්කම් තල්ලු කරනු ඇත.

git push origin master:staging එය පවතින්නේ නම් දේශීය ප්‍රධාන ශාඛාවේ සිට දුරස්ථ වේදිකා ශාඛාවට වෙනස්කම් තල්ලු කරනු ඇත.


git push origin branch_nameකිසියම් හේතුවක් නිසා branch_nameශාඛාව පමණක් නොව මගේ අනෙකුත් දේශීය ශාඛා ද තල්ලු කරයි (git වෙළුම 1.9.1).
mrgloom

git push origin master:stagingනියම සැඟවුණු මැණිකකි!
ෂකීල්

19

(2012 මාර්තු)
පරෙස්සම් වන්න: පෙරනිමි " matching" ප්‍රතිපත්තිය ඉක්මනින් වෙනස් විය හැකිය
(සමහර විට git1.7.10 + ට පසුව)
:

"බලන්න GIT තල්ලුව" ඔබ තල්ලු කිරීමට දේ කියන්න එපා විට කළ යුත්තේ කුමක්ද?: දේ කරන්න සාකච්ඡා " "

වත්මන් සැකසුම තුළ (එනම් push.default=matching), git pushතර්කයකින් තොරව දේශීය හා දුරස්ථව පවතින සියලුම ශාඛා එකම නමකින් තල්ලු කරනු ඇත .
සංවර්ධකයෙකු තමාගේම පොදු ගබඩාවකට තල්ලු කරන විට මෙය සාමාන්‍යයෙන් යෝග්‍ය වේ, නමුත් හවුල් ගබඩාවක් භාවිතා කිරීමේදී එය භයානක නොවේ නම් ව්‍යාකූල විය හැකිය.

යෝජනාව වන්නේ පෙරනිමිය ' upstream' ලෙස වෙනස් කිරීමයි , එනම් වත්මන් ශාඛාව පමණක් තල්ලු කර ශාඛා ගිට් අදින්න.
තවත් අපේක්ෂකයෙක් ' current'; මෙය එකම ශාඛාවේ දුරස්ථ ශාඛාවට තල්ලු කරයි.

මෙතෙක් සාකච්ඡා කර ඇති දේ මෙම නූලෙන් දැකිය හැකිය:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

පෙර අදාළ සාකච්ඡාවලට ඇතුළත් වන්නේ:

සාකච්ඡාවට සම්බන්ධ වීමට, ඔබගේ පණිවිඩ වෙත යවන්න: git@vger.kernel.org


18

මම මෙය මගේ .gitconfig අන්වර්ථ අංශයට දමා එය ක්‍රියා කරන ආකාරය ගැන ආදරෙයි:

pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f"

වත්මන් ශාඛාව git pubආරම්භයට හෝ වෙනත් repo සමඟ තල්ලු කරයි git pub repo-name. රසවත්.


4
එය හොඳයි, නමුත් අවාසනාවකට උපකල්පනය කරන්නේ ශාඛාවට අනෙක් ගබඩාවේ එකම නමක් ඇති බවයි. git push -u --repo="origin" $1;ඒ වෙනුවට උත්සාහ කරන්න . එය ඉතා හොඳින් ක්‍රියාත්මක වේ, ඔබ වෙනත් ගබඩාවකට තල්ලු කළහොත් හැර, ශාඛාවේ නම අනෙක් ගබඩාව භාවිතා කරන නම මිස ඔබ තල්ලු කරන නම නොවේ
කේස්බෑෂ්

හේයි ස්තූතියි! තල්ලු කිරීමට පෙර ලුහුබැඳීමේ තත්වය පරීක්ෂා කරන වඩාත් සම්පූර්ණ අනුවාදයක් කිරීමට මට අවශ්‍ය කරයි. ගබඩාවන් අතර විවිධ ශාඛා නාම මා සතුව ඇත්තේ කලාතුරකිනි.
මැට් ෂාෆර්


8

Git push මඟින් සියලුම දේශීය ශාඛා දුරස්ථ සේවාදායකයට තල්ලු කරනු ඇත, මෙය ඔබට අවශ්‍ය නොවන දෙය විය හැකිය. මෙය සමඟ කටයුතු කිරීම සඳහා මට පහසුව සැකසීම් කිහිපයක් තිබේ:

අන්වර්ථ "gpull" සහ "gpush" සුදුසු පරිදි:

මගේ ~ / .bash_profile හි

get_git_branch() {
  echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull origin `get_git_branch`'
alias gpush='git push origin `get_git_branch`'

මේ අනුව, "gpush" හෝ "gpull" ක්‍රියාත්මක කිරීමෙන් මගේ "දැනට පවතින" ශාඛාව තල්ලු වේ.


3
ඔබට සැමවිටම gpush හි හැසිරීම අවශ්‍ය නම්, ඔබට git-push man පිටුවේ උදාහරණ කොටසේ සඳහන් කර ඇති පරිදි remote.origin.push = HEAD (උදා: "git config remote.origin.push HEAD") සැකසිය හැකිය.
ට්‍රෙවර් රොබින්සන්

5
"බ්‍රයන් එල්" විසින් ඉහත ලිපිය දෙස බැලුවහොත් මෙය අවශ්‍ය නොවේ.
jpswain

1
එය, සමානත්වයක් නොමැති නිසා ය. pull pull.default සඳහා
SamGoody

8

ඔබට එම පෙරනිමි හැසිරීම වෙනස් කළ හැකිය .gitconfig, උදාහරණයක් ලෙස:

[push]
  default = current

වත්මන් සැකසුම් පරීක්ෂා කිරීමට, ධාවනය කරන්න:

git config --global --get push.default

3

අන්වර්ථ නාම භාවිතා කරනවාට වඩා, මම වඩාත් කැමති git-XXX ස්ක්‍රිප්ට් නිර්මාණය කිරීමටය, එවිට මට ඒවා වඩාත් පහසුවෙන් පාලනය කළ හැකිය (අපගේ ඩිව්ස් සියල්ලන්ටම මේ ආකාරයේ දේ සඳහා ඔවුන්ගේ මාර්ගයේ යම් ප්‍රභව පාලනයක් ඇත).

මෙම ස්ක්‍රිප්ට් එක (කැඳවනු ලැබේ git-setpush) අගය සඳහා වින්‍යාස අගය remote.origin.pushවත්මන් ශාඛාවට පමණක් තල්ලු කරන දෙයකට සකසනු ඇත:

#!/bin/bash -eu

CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2)
NEW_PUSH_REF=HEAD:refs/for/$CURRENT_BRANCH

echo "setting remote.origin.push to $NEW_PUSH_REF"
git config remote.origin.push $NEW_PUSH_REF

සටහන, අප භාවිතා කරන විට Gerrit, එය refs/for/XXXසමාලෝචන ශාඛාවකට තල්ලු කිරීමට ඉලක්කය සකසයි . සම්භවය ඔබේ දුරස්ථ නම යැයි ද උපකල්පනය කරයි.

සමඟ ශාඛාවක් පරීක්ෂා කිරීමෙන් පසුව එය ආයාචනා කරන්න

git checkout your-branch
git setpush

එය පැහැදිලිවම පිටවීම සිදු කිරීමට අනුගත විය හැකිය, නමුත් මම ස්ක්‍රිප්ට් වලට කැමතියි එක් දෙයක් කර එය හොඳින් කිරීමට


ගෙරිට් භාවිතය සඳහා remote.origin.push සැකසීම හොඳ අදහසකි. මගේ ප්රාදේශීය ලක්ෂණය ශාඛා feature/fix_fubarවැනි, උල් වැඩි Generic බලපත්රය යටතේ අවසර ලබා ඇත උඩුගං ශාඛා වේ masterහෝ develop, ඒ නිසා මෙම වැරදි උඩුගං දී පෙන්වා ඇත. ගෙරිට් පාලනය කළ ගබඩාවලට ඔබේ දේශීය ප්‍රවාහය කෙබඳුද?
spazm

ඔබට ඇත්තේ එක් "ඉලක්ක" ශාඛාවක් පමණක් නම්, සරලව උත්සාහ කරන්න git config remote.origin.push HEAD:refs/for/master.
fracz

2

මෙම කාර්යයන් ස්වයංක්‍රීය කිරීම සඳහා මම පහත සඳහන් කාර්යයන් මගේ .bashrc ගොනුවට එක් කර ඇත්තෙමි. එය වත්මන් ශාඛාවේ git push / git pull + නම කරයි.

function gpush()
{
  if [[ "x$1" == "x-h" ]]; then
    cat <<EOF
Usage: gpush
git: for current branch: push changes to remote branch;
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git push ${bname}
    set +x
  fi
}

function gpull()
{
  if [[ "x$1" == "x-h" ]]; then
    cat <<EOF
Usage: gpull
git: for current branch: pull changes from
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git pull ${bname}
    set +x
  fi
}
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.