কোনও শাখা নির্দিষ্ট না করে "গিট পুশ" এর ডিফল্ট আচরণ


1366

আমি আমার দূরবর্তী শাখায় চাপ দেওয়ার জন্য নিম্নলিখিত কমান্ডটি ব্যবহার করছি:

git push origin sandbox

যদি আমি বলি

git push origin

এটি কি আমার অন্যান্য শাখাগুলিতেও পরিবর্তন আনবে, বা এটি কেবল আমার বর্তমান শাখাকে আপডেট করে? আমি তিনটি শাখা রয়েছে: master, productionএবং sandbox

git pushডকুমেন্টেশন খুব, এই সম্পর্কে স্পষ্ট নয় তাই আমি ভালোর জন্যই এই নির্মল করতে চাই।

নিম্নলিখিত git pushকমান্ডগুলি সঠিকভাবে কোন শাখা এবং রিমোটগুলি আপডেট করে?

git push 
git push origin

origin উপরে একটি রিমোট।

আমি বুঝতে পারি যে git push [remote] [branch]কেবল সেই শাখাটি দূরবর্তী স্থানে ঠেলে দেবে।


: সাধারণভাবে পরিবর্তন সরঞ্জামের কনফিগারেশন এবং নতুন স্ক্রিপ্ট Git difftool সংক্রান্ত, আমি এই অন্যান্য তাই প্রশ্ন একটি নতুন উত্তর যোগ করেছেন stackoverflow.com/questions/255202/...
VonC

67
এর বিস্ময়কর আচরণ সম্পর্কে আমি একটি ব্লগ পোস্ট করেছিgit push , যা আগ্রহী হতে পারে
মার্ক লংগায়ার

1
@ মার্ক: অন্য কাজে, কেবলমাত্র বর্তমান শাখাটিকে তার ট্র্যাকড আপ স্ট্রিমে চাপছে। খুশী হলাম।
ভোনসি


উত্তর:


1591

আপনি আপনার গিট কনফিগারেশনে push.default সেট করে ডিফল্ট আচরণ নিয়ন্ত্রণ করতে পারেন। থেকে Git-কনফিগ (1) ডকুমেন্টেশন :

push.default

কমান্ড লাইনে কোনও রেসপেস্ক দেওয়া না থাকলে, রিমোটে কোনও রেসপেস্ক কনফিগার করা হয়নি এবং কমান্ড লাইনে প্রদত্ত যে কোনও বিকল্পের দ্বারা কোনও রেসপেককে অন্তর্ভুক্ত করা হয়নি এমন অ্যাকশন গিট ধাক্কাটি নির্ধারণ করে। সম্ভাব্য মানগুলি হ'ল:

  • nothing: কিছুতেই চাপ দেবেন না

  • matching: সমস্ত মিলে যাওয়া শাখা টিপুন

    উভয় প্রান্তে একই নামে সমস্ত শাখা মেলানো বলে মনে করা হয়।

    এটি ডিফল্ট হিসাবে ব্যবহৃত হত, তবে গিট ২.০ থেকে নয় ( simpleনতুন ডিফল্ট)।

  • upstream: বর্তমান শাখাটিকে তার উজানের শাখায় ঠেলাও (প্রবাহের trackingজন্য একটি অবচিত সমার্থক শব্দ)

  • current: বর্তমান শাখাকে একই নামের একটি শাখায় ঠেলাও

  • simple: (গিট ১.7.১১ এ নতুন) প্রবাহের মতো, তবে প্রবাহ শাখার নাম স্থানীয় নাম থেকে আলাদা হলে ধাক্কা দিতে অস্বীকার করে

    এটি সবচেয়ে নিরাপদ বিকল্প এবং নতুনদের জন্য উপযুক্ত।

    এই মোডটি গিট ২.০ এ ডিফল্ট হয়ে গেছে।

সরল, বর্তমান এবং প্রবাহের মোডগুলি তাদের জন্য যারা অন্যান্য কাজগুলি সমাপ্ত করার পরে প্রস্তুত না হয়েও কাজ শেষ করে কোনও একক শাখা চাপিয়ে দিতে চান

কমান্ড লাইন উদাহরণ:

বর্তমান কনফিগারেশনটি দেখতে:

git config --global push.default

একটি নতুন কনফিগারেশন সেট করতে:

git config --global push.default current

11
এটি সম্ভবত v1.6.3 এ নতুন যেটি লক্ষণীয়: কার্নেল.আর
সিবি বেইলি

8
এই "push.default" একাধিক রেপো সহ কাজ করার জন্য সর্বকালের সর্বশ্রেষ্ঠ জিনিস। এটি "ট্র্যাকিং" এ সেট করুন এবং আপনি ভাল আছেন। শাখা --set-upstream এই মেকিং পুশ এবং টানুন পথ আরও সুবিধাজনক সাথে একত্রিত।
jpswain

13
"ট্র্যাকিং" হ'ল "আপস্ট্রিম" এর অবচিত সমার্থক শব্দ: কার্নেল.আর
সোফওয়্যার

22
এটি লক্ষণীয় যে গিট 1.7.11 হিসাবে একটি নতুন simpleমোড রয়েছে। এই মোডটি ভবিষ্যতে ডিফল্ট হওয়ার উদ্দেশ্যে intended simpleমত কাজ করে upstreamতবে লাইকটির currentজন্য উভয় প্রান্তে শাখার নাম একই হওয়া দরকার।
কাই

9
এটি লক্ষণীয় যে গিট 2.0 হিসাবে simpleআচরণটি এখন ডিফল্ট।
do0g

208

আপনি push.default এর মাধ্যমে আপনার গিটের জন্য ডিফল্ট আচরণ সেট আপ করতে পারেন

git config push.default current

অথবা যদি আপনার অনেকগুলি সংগ্রহস্থল থাকে এবং তারপরে সকলের জন্য একই চান

git config --global push.default current

বর্তমান এই সেটআপ মানে যে ডিফল্ট ভাবে আপনার হবে শুধুমাত্র বর্তমান শাখা ধাক্কা যখন আপনাকে যা Git ধাক্কা

অন্যান্য বিকল্পগুলি হ'ল:

  • কিছুই না: কিছুতেই চাপ দেবেন না
  • মিল: সমস্ত মিলে যাওয়া শাখাগুলি পুশ করুন (ডিফল্ট)
  • ট্র্যাকিং: বর্তমান শাখাটিকে ট্র্যাকিং যা আছে তাতে চাপ দিন
  • কারেন্ট: বর্তমান শাখা পুশ করুন

আপডেট - এটি করার নতুন উপায়

গিট 1.7.11 হিসাবে নিম্নলিখিতটি করুন:

git config --global push.default simple

এটি একটি নতুন সেটিং চালু করা হয়েছে যা বর্তমানের মতো একইভাবে কাজ করে এবং গুজব অনুসারে ভি ২.০ থেকে গিটকে ডিফল্ট করা হবে


29
হ্যাঁ, আপনি যে উত্তরটি উল্লেখ করছেন তা আমি পড়েছি, তবে সেই উত্তরটি কেবল কী করতে হবে এবং কীভাবে তা করবেন না তা জানিয়ে দেয়। সুতরাং আমি আমার উত্তর যুক্ত করেছি যাতে এটি সেট আপ করার জন্য প্রয়োজনীয় সমস্ত তথ্য একই পৃষ্ঠায়।
ক্রিস্টোফার

3
ঠিক আছে; উক্ত পোস্টটিতে একটি সম্পাদনার পরামর্শ দেওয়া ভাল, কারণ আপনার উত্তর কেউ দেখতে পাবে না, কারণ এটির বেশি ভোট পাওয়ার সম্ভাবনা নেই
চার্লসবি

কেউ কীভাবে বর্তমান শাখায় টানছে? গিট টান উত্স?
ফ্রাঙ্কোইস

200

git push originযে দূরবর্তী শাখা মিলে আছে স্থানীয় শাখা উপর সকল পরিবর্তন ধাক্কা হবে originহিসাবেgit push

ওয়ার্কস পছন্দ git push <remote>, যেখানে <remote>বর্তমান শাখা রিমোট (যদি কোন দূরবর্তী বর্তমান শাখা জন্য কনফিগার করা হয়েছে বা উৎপত্তি,) হয়।

ম্যান পৃষ্ঠার উদাহরণ বিভাগ থেকেgit-push


2
হ্যাঁ, এটি স্পষ্ট করে তোলে। আমি সম্ভবত গিটের একটি পুরানো সংস্করণ (1.6.1.1 ম্যাক ওএস এক্স) চালাচ্ছি যা ম্যান পৃষ্ঠায় এই উদাহরণগুলি নেই।
প্লেগহ্যামার

সম্ভবত আমি 1.6.3.1 চালাচ্ছি। আমি লিঙ্কযুক্ত সাইটে এটি খুঁজে পেয়েছি।
বাডট্যাক

2
সুতরাং, আমার ক্ষেত্রে, যেখানে সমস্ত স্থানীয় শাখাগুলির একই দূরবর্তী "উত্স" রয়েছে, "গিট পুশ" হুবহু "গিট পুশ অরিজিন" এর সমান হবে যা কেবল স্থানীয় শাখাগুলিকেই দূরবর্তী অঞ্চলে সংশ্লিষ্ট শাখাটিকে ধাক্কা দেবে।
প্লেগহ্যামার

@ দেবাজিৎ ঠিক আছে! উপায় দ্বারা দুর্দান্ত প্রশ্ন। আমি সবসময় ধরে নিয়েছিলাম যে গিট ধাকাই কেবল বর্তমান শাখাকে ধাক্কা দেবে। দৃশ্যত না! জেনে খুব ভাল লাগছে।
বাডট্যাক

5
এই প্রশ্নটি পুরানো তবে যে কারও কাছে নতুন, @ ডকনোম ঠিক। কেবল 'গিট পুশ অরিজিন' চালানো কেবলমাত্র বর্তমান শাখার পরিবর্তে সমস্ত শাখাকে ধাক্কা দেবে। বিকাশ নামের একটি শাখাকে জোর করতে 'গিট পুশ-ফ-ভি-অরিজিন ডেভলপমেন্ট' ব্যবহার করুন। গিট পুশ ফলাফলটি অনুকরণ করতে -n পতাকাটি ব্যবহার করুন যাতে আপনি আগে থেকেই দেখতে পারবেন কোন শাখা (গুলি) প্রভাবিত হবে। যদি এটি দেখতে ভাল লাগে তবে 'গিট পুশ-ফ-ভি উত্স বিকাশ' চালান। এটি কার্যকর হতে পারে স্ট্যাকওভারফ্লো.com
ডিলান ভ্যালাদ

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
আপনি `গিট কমিট -২" ... "to এর প্রতিশ্রুতিটি কমিয়ে দিতে পারেন
জেমস হ্যারিংটন

17
এই উত্তরের প্রশ্নের সাথে কি কোনও সম্পর্ক আছে ?? :
অসীম কেটি

26

এখানে গিট পুশ : গিট পুশ: জাস্ট টিপ সম্পর্কে খুব সুবিধাজনক এবং সহায়ক তথ্য is

গিট পুশের সর্বাধিক সাধারণ ব্যবহার হ'ল আপনার স্থানীয় পরিবর্তনগুলি আপনার সার্বজনীন আপস্ট্রিম ভাণ্ডারে ঠেলা। ধরে নিই যে আপস্ট্রিমটি একটি "রিসেন্ট" নামের রিমোট (আপনার ডিপোজিটরিটি যদি ক্লোন হয় তবে ডিফল্ট রিমোট নাম) এবং / থেকে আপডেট করা শাখার নাম দেওয়া হয় "মাস্টার" (ডিফল্ট শাখার নাম), এটি করা হয়েছে:git push origin master

git push origin সমস্ত স্থানীয় শাখাগুলি থেকে মূল রিমোটের সাথে মিলে যাওয়া শাখায় পরিবর্তন ঘটাবে।

git push origin master স্থানীয় মাস্টার শাখা থেকে রিমোট মাস্টার শাখায় পরিবর্তন আনবে।

git push origin master:staging স্থানীয় মাস্টার শাখা থেকে দূরবর্তী স্টেজিং শাখায় পরিবর্তনগুলি উপস্থিত থাকলে তা উপস্থিত থাকবে।


git push origin branch_nameকোনও কারণে কেবল শাখাটিই নয় branch_name, আমার অন্যান্য স্থানীয় শাখাও (গিট সংস্করণ ১.৯.১) টিপুন।
mrgloom

git push origin master:stagingএকটি দুর্দান্ত লুকানো রত্ন!
শাকিল

19

(মার্চ ২০১২)
সাবধান: সেই ডিফল্ট matchingনীতিটি শীঘ্রই পরিবর্তিত হতে পারে
(কখনও কখনও git1.7.10 + এর পরে)
:

" দয়া করে আলোচনা করুন: আপনি কি চাপ দেবেন না বললে" গিট গিঁট "করা উচিত তা দেখুন? "

বর্তমান সেটিংয়ে (অর্থাত্ 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বা অন্য কোনও রেপোতে উত্সাহিত করবে git pub repo-name। সুস্বাদু।


4
এটি দুর্দান্ত, তবে এটি দুর্ভাগ্যজনকভাবে ধরে নিয়েছে যে অন্যান্য ভান্ডারটিতে শাখার একই নাম রয়েছে। git push -u --repo="origin" $1;পরিবর্তে চেষ্টা করুন। এটি বেশ ভালভাবে কাজ করে, যদি আপনি অন্য সংগ্রহস্থলটিতে যান তবে শাখার নামটি অন্য সংগ্রহশালার দ্বারা ব্যবহৃত নাম হবে, আপনি যে চাপ দিচ্ছেন তা নয়
কেসব্যাশ

হেই ধন্যবাদ! আমাকে আরও একটি সম্পূর্ণ সংস্করণ করতে চান যা ধাক্কা দেওয়ার আগে ট্র্যাকিংয়ের স্থিতি পরীক্ষা করে। তবে আমি আপাতত আমার সাথে আটকে থাকব কারণ আমার কাছে খুব কমই রেপসের মধ্যে বিভিন্ন শাখার নাম রয়েছে।
মাদুর শেফার


8

একটি গিট পুশ চেষ্টা করবে এবং সমস্ত স্থানীয় শাখা দূরবর্তী সার্ভারে চাপ দেবে, সম্ভবত আপনি যা চান না এটি সম্ভবত এটিই। এটি মোকাবেলায় আমার বেশ কয়েকটি সুবিধাজনক সেটআপ রয়েছে:

এলিয়াস "gpull" এবং "gpush" যথাযথভাবে:

আমার ~ / .বাশ_ প্রোফাইলে

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`'

সুতরাং, "জিপুশ" বা "জিপুল" চালানো কেবল আমার "বর্তমানে চালু" শাখায় চাপ দেবে।


3
আপনি যদি সর্বদা gpush এর আচরণ চান তবে গিট-পুশ ম্যান পৃষ্ঠার উদাহরণ বিভাগে উল্লিখিত হিসাবে আপনি দূরবর্তী.ওরগিন.পশ = হেড (যেমন "গিট কনফিগারেশন রিমোট.ওরিগিন.পশ হেড") সেট করতে পারেন।
ট্রেভর রবিনসন

5
উপরোক্ত পোস্টটি "ব্রায়ান এল" দ্বারা দেখলে এটি প্রয়োজনীয় নয়।
jpswain

1
এটি যেমন কোনও ইক্যভ নেই। টান পুল.ডিফোল্টের জন্য
সামগুডি

8

আপনি নিজের মধ্যে সেই ডিফল্ট আচরণটি পরিবর্তন করতে পারেন .gitconfig, উদাহরণস্বরূপ:

[push]
  default = current

বর্তমান সেটিংস পরীক্ষা করতে, চালান:

git config --global --get push.default

3

এলিয়াস ব্যবহার না করে, আমি গিট-এক্সএক্সএক্সএক্সএক্সএএসপি স্ক্রিপ্ট তৈরি করতে পছন্দ করি যাতে আমি তাদের আরও সহজেই নিয়ন্ত্রণ করতে পারি (আমাদের ডেভস সকলেরই এই ধরণের জিনিসটির জন্য একটি নির্দিষ্ট উত্স নিয়ন্ত্রিত দির রয়েছে)।

এই স্ক্রিপ্ট (ডাকা 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

এটি অবশ্যই চেকআউট করার সাথে মানিয়ে নিতে পারে তবে আমি স্ক্রিপ্টগুলি একটি জিনিস করতে এবং এটি ভালভাবে করতে পছন্দ করি


জারিত ব্যবহারের জন্য দুর্দান্ত ধারণা সেটিং রিমোট.রিগিন.পুশ। আমার স্থানীয় বৈশিষ্ট্যগুলি শাখাগুলি feature/fix_fubarআরও বেশি জেনেরিক উজানের শাখাগুলির মতো masterবা এর দিকে নির্দেশিত develop, তাই এটি ভুল প্রবাহে চিহ্নিত হবে। আপনার স্থানীয় প্রবাহটি অঙ্কুরিত নিয়ন্ত্রিত ভঙ্গীর মতো দেখতে কেমন?
স্পাজম

যদি আপনার কেবল জীবাণুতে একটি "লক্ষ্য" শাখা থাকে তবে সহজভাবে চেষ্টা করুন git config remote.origin.push HEAD:refs/for/master
fracz

2

এই কাজগুলি স্বয়ংক্রিয় করতে আমি আমার .Bashrc ফাইলটিতে নিম্নলিখিত ফাংশনগুলি যুক্ত করেছি। এটি গিট পুশ / গিট পুল + বর্তমান শাখার নাম করে।

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
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.