আমি কীভাবে কোনও স্থানীয় গিট শাখা সহজেই আলাদা নামের সাথে একটি রিমোটে চাপতে পারি?


175

আমি ভাবছিলাম যে সর্বদা উভয় নাম উল্লেখ না করেই কোনও আলাদা নাম সহ কোনও স্থানীয় শাখাটিকে কোনও দূরবর্তী শাখা সহকারে টান এবং টান দেওয়ার কোনও সহজ উপায় আছে কিনা।

উদাহরণ স্বরূপ:

$ git clone myrepo.git
$ git checkout -b newb
$ ...
$ git commit -m "Some change"
$ git push origin newb:remote_branch_name

এখন যদি কেউ রিমোট_ ব্র্যাঞ্চ_নাম আপডেট করে তবে আমি এটি করতে পারি:

$ git pull

এবং সবকিছু মার্জ / দ্রুত-ফরওয়ার্ড করা হয়। তবে, আমি যদি আমার স্থানীয় "newb" এ পরিবর্তন করি তবে আমি এটি করতে পারি না:

$ git push

পরিবর্তে, আমাকে করতে হবে:

% git push origin newb:remote_branch_name

একটু নির্বোধ মনে হচ্ছে। যদি কোথা থেকে টানবেন তা নির্ধারণ করতে git-pullব্যবহার করা git-config branch.newb.mergeহয় তবে কেন git-pushএকই ধরণের কনফিগারেশন বিকল্প থাকতে পারে না ? এর জন্য কি একটি দুর্দান্ত শর্টকাট আছে বা আমার কেবল দীর্ঘ পথ চালিয়ে যাওয়া উচিত?

উত্তর:


93

অবশ্যই। নামগুলিতে মিল পাওয়া শাখাগুলি (যা এটির জন্য ডিফল্ট সেটিংস , ) এর চেয়ে ধাক্কা দেওয়ার পরিবর্তে শাখাগুলি তাদের উজানের স্ট্রিমগুলিতে ধাক্কা push.defaultদেওয়ার upstreamজন্য সেট করুন (যা একই যা pullথেকে টানবে, দ্বারা সংজ্ঞায়িত হবে )।branch.newb.mergepush.defaultmatching

git config push.default upstream

মনে রাখবেন এটি গিট 1.7.4.2 এর আগে বলা হত trackingনা upstream, সুতরাং আপনি যদি গিটের কোনও পুরানো সংস্করণ ব্যবহার করেন তবে trackingপরিবর্তে ব্যবহার করুন। push.defaultবিকল্প গীত 1.6.4 মধ্যে যোগ করা হয়েছে, তাই যদি আপনি যে এর চেয়ে পুরোনো সংস্করণ থাকলে, আপনি সব সময়ে এই অপশনটি থাকবে না এবং স্পষ্টভাবে শাখায় ধাক্কা উল্লেখ করতে হবে।


ঐটা এটা ছিল! এটি ট্র্যাকিং করা সমস্ত শাখায় প্রযোজ্য তবে এটি ঠিক আছে। ধন্যবাদ!
jmacdonagh

আমি যে শাখার নামটি পরীক্ষা করে দেখেছি তার সংক্ষিপ্ততা আছে কিনা তা জানতে আগ্রহী। আমি কেবল চাই git push buildserver .:test_thisযেখানে .স্থানীয় শাখার নামটি হবে যা আমি অগত্যা জানি না। আমি এটি সন্ধান করতে পারি, নিশ্চিত, তবে এর জন্য যদি বিন্দুর মতো একটি ছোট হাত থাকে তবে এটি দুর্দান্ত be
ফ্রেডেরিক নর্ড

2
HEAD@ ফ্রেডেরিকনর্ড হ'ল সংক্ষিপ্ত হাত আপনি খুঁজছেন। HEADএটি বর্তমানে যাচাই করা শাখার দিকে নির্দেশ করে বা আপনার যদি কোনও বিচ্ছিন্ন মাথা থাকে তবে সরাসরি কোনও নির্দিষ্ট প্রতিশ্রুতিতে নির্দেশ করে।
ব্রায়ান ক্যাম্পবেল

ধন্যবাদ! এটি Updates were rejected because a pushed branch tip is behind its remoteআমার জন্য ত্রুটিটি স্থির করেছে। আমার স্থানীয় রেপো আপ টু ডেট ছিল, তবে নামগুলি কেবল আলাদা ছিল।
ক্যানহাজ্বিটস

171

আপনি যখন প্রাথমিক ধাক্কাটি করেন তখন -u প্যারামিটারটি যুক্ত করুন :

git push -u origin my_branch:remote_branch

পরবর্তী ধাক্কা আপনি যেখানে চান সেখানে যাবে।

সম্পাদনা করুন:

মন্তব্য অনুসারে, এটি শুধুমাত্র টান সেট আপ।

git branch --set-upstream

এটা করা উচিত।


7
-uকেবল প্রবাহকে সেট করে, যা প্রশ্ন অনুসারে ইতিমধ্যে সেট করা আছে। তিনি সেট প্রয়োজন push.defaultথেকে upstremপেতে অনুক্রমে pushডিফল্ট হিসাবে শুধুমাত্র মূল প্রজেক্টের সেটিং সম্মান, যেহেতু pullআছে।
ব্রায়ান ক্যাম্পবেল

2
এটি কাজ করে বলে মনে হচ্ছে না - কমপক্ষে কখনও গিট সংস্করণে নয়
টমাস ওয়াটসন

গিট ব্রাঞ্চ - সেট-আপস্ট্রিমটি এর পরে কেবল পুল সেটআপ "পুশরেমোট" সেট করা দরকার।
21

আমি মনে করি না git branch --set-upstreamপ্রয়োজনীয়। দ্রষ্টব্য: আমার git --version2.17.1।
গ্যাব্রিয়েল স্ট্যাপলস

15

অ্যাডামের আদেশ এখন অবচিত করা হয়েছে। তুমি ব্যবহার করতে পার:

git branch --set-upstream-to origin/my_remote_branch my_local_branch

এর প্রবাহ শাখা সেট my_local_branchকরতে origin/my_remote_branch


6
আপনি যে তথ্যটি ভাগ করেন তার সমর্থন করে আপনি কোনও লিঙ্ক সরবরাহ করতে পারেন -উকে হ্রাস করা হচ্ছে? Git-scm.com এ ধাক্কা সংক্রান্ত সর্বশেষ সংস্করণের জন্য দস্তাবেজগুলি মনে হয় এটি বর্তমান। অগ্রিম ধন্যবাদ - পাঠকদের আরও তথ্যের জন্য অনুসরণ করা খুব সহায়ক হতে পারে।
কে ভি

@ কেভের সাথে একমত হোন, বিশেষত আমার স্থানীয় শাখার চেয়ে আলাদা একটি নাম সহ একটি নতুন রিমোট শাখা তৈরি করার চেষ্টা করার সময় আমি এই বার্তাটি পেয়েছি: 'আপনি যদি কোনও নতুন স্থানীয় শাখা বের করার পরিকল্পনা করছেন যা এর দূরবর্তী অংশটিকে ট্র্যাক করবে, আপনি চাইবেন আপনার ধাক্কায় আপস্ট্রিম কনফিগারেশন সেট করতে "গিট পুশ-ইউ" ব্যবহার করতে হবে ''
এফবিবি 22'18

0

এই প্রক্রিয়াটি আমার পক্ষে কাজ করেছে।

git clone original-repo-url
git remote rename origin upstream
git remote add origin new-repo-url

এখন আপনার নতুন রেপো হবে 'উত্স' এবং মূল রেপোটি 'আপস্ট্রিম'। গিট রিমোট -v চালিয়ে এটি নিশ্চিত করুন। (পার্শ্ব দ্রষ্টব্য: আপস্ট্রিমটি মূল রেপো থেকে আনার জন্য ব্যবহৃত হয় - আপনি যে প্রকল্পে অবদান রাখতে চান তার সাথে আপনার স্থানীয় অনুলিপিটিকে একই সাথে রাখার জন্য - এবং উত্সটি টানতে এবং ধাক্কা দিতে ব্যবহৃত হয় যেহেতু আপনি নিজের নিজস্ব রেপোতে অবদান রাখতে পারেন)।

git push origin master

এখন আপনার নতুন রিমোট রেপোর মাস্টার (গিথুবে) মূল মাস্টারের সাথে সিঙ্ক হবে তবে এতে কোনও বৈশিষ্ট্য শাখা থাকবে না।

git rebase upstream/branch-name
git push origin master

রিবেস একটি স্মার্ট মার্জ। তারপরে আবার মাস্টার চাপুন এবং আপনি নতুন রেপোতে মাস্টার হিসাবে নির্বাচিত বৈশিষ্ট্য শাখাটি দেখতে পাবেন।

ঐচ্ছিক:

git remote rm upstream
git remote add upstream new-repo-url

0

আমি বেশ কিছুদিন ধরে একই সমস্যাটিতে চলে আসছি। আমার অবশেষে বিবৃতিগুলির একটি সেট রয়েছে যাতে আমাকে git push origin local:remoteপ্রতিবার করতে হবে না । আমি এগুলি অনুসরণ করেছি:

git branch --set-upstream-to origin/remote_branch_name
git config push.default upstream
git push

বিভিন্ন নামের (1 ম লাইন) সহ একটি প্রত্যন্ত শাখায় আপসেট সেটআপ করার পরে এবং সেই উজানটিকে ডিফল্ট (2 য় লাইন) হিসাবে তৈরি করার পরে, 3 য় লাইন এখন এই নিয়মগুলি মানবে এবং সেট আপ স্ট্রিমটিতে ধাক্কা দেবে।

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