আমি কীভাবে একটি নতুন স্থানীয় শাখা দূরবর্তী গিট সংগ্রহস্থলে ঠেকাতে এবং এটির ট্র্যাক করব?


4301

আমি নিম্নলিখিতগুলি করতে সক্ষম হতে চাই:

  1. অন্য কোনও (দূরবর্তী বা স্থানীয়) শাখার (মাধ্যমে git branchবা git checkout -b) ভিত্তিতে একটি স্থানীয় শাখা তৈরি করুন

  2. স্থানীয় শাখাটিকে দূরবর্তী সংগ্রহস্থলে (প্রকাশ করুন) পুশ করুন, তবে এটি ট্র্যাকযোগ্য হিসাবে তৈরি করুন git pullএবং git pushঅবিলম্বে কাজ করবে।

আমি কেমন করে ঐটি করি?

আমি --set-upstreamগিট 1.7 এ সম্পর্কে জানি তবে এটি পোস্ট-ক্রিয়েশন অ্যাকশন। আমি ব্রাটকে রিমোট রিপোজিটরিতে ঠেকানোর সময় অনুরূপ পরিবর্তন করার একটি উপায় খুঁজতে চাই।



71
সবেমাত্র --set-upstream হ'ল
বাইয়ান হুয়াং

@ বাইয়ানহুয়াং এটি উল্লেখ করার জন্য ধন্যবাদ। প্রারম্ভিক আমি ভেবেছিলাম যে - আপনি বোঝা গেল না এমন ট্রে্যাক করা যা আমার কাছে তা বোঝায় না
দিমিত্রি

উত্তর:


6608

গিট 1.7.0 এ এবং তারপরে, আপনি একটি নতুন শাখা চেকআউট করতে পারেন:

git checkout -b <branch>

ফাইলগুলি সম্পাদনা করুন, যুক্ত করুন এবং প্রতিশ্রুতিবদ্ধ করুন। তারপর সঙ্গে ধাক্কা -u(সংক্ষিপ্ত --set-upstream) বিকল্প:

git push -u origin <branch>

গিট ধাক্কা দেওয়ার সময় ট্র্যাকিংয়ের তথ্য সেট আপ করবে।


81
এরও কোন মূল্য নেই যে আপনি যদি একটি বিদ্যমান ট্র্যাকিং শাখা আছে ইতিমধ্যে শাখা আপনি ঠেলাঠেলি করছি সেট মূল্য, এবং push.defaultসেট করা হয় upstream, এই আপনি কি মনে করেন এটা করতে হবে করে দেবে না। এটি বিদ্যমান ট্র্যাকিং শাখার উপর চাপ দেওয়ার চেষ্টা করবে। ব্যবহার করুন: git push -u origin mynewfeature:mynewfeatureবা git branch --unset-upstreamপ্রথমে করুন।
void.pointer

13
ভিজুয়াল স্টুডিও থেকে গিট ব্যবহার করা লোকদের জন্য: বাস্তবে এটি ভিজ্যুয়াল স্টুডিওতে "প্রকাশিত ব্রাঞ্চ" করে। -U প্যারামিটার দিয়ে গিট পুশ কার্যকর করার পরে অবশেষে আমার শাখাটি ভিএস ইউআইতে প্রকাশিত হিসাবে দেখতে পাচ্ছি।
পুটার্ডো বোরাটো

3
গিট ধাক্কা-ও উত্স <ব্র্যাঞ্চ> গিট পুশ-ও অরিজিন হেডের সমান (অনুমান করে যে আপনি যে শাখাটি পরীক্ষা করতে চান তা আপনি ধরে
রেখেছেন

13
-uযখনই আমরা শাখাটিকে তার দূরবর্তী স্থানে ঠেলেছি তখনই আমাদের কি বিকল্পটি প্রয়োজন বা কেবল প্রথম বারের প্রয়োজন?
স্টিফেন

17
@ স্টাফেন আপনার -uট্র্যাকিং আরম্ভ করার জন্য একবার প্রয়োজন । এরপরে কেবল ব্যবহার করুনgit push
টড

490

যদি আপনি অন্যের সাথে আপনার রেপো ভাগ করে না নিচ্ছেন তবে এটি আপনার সমস্ত শাখা দূরবর্তী স্থানে ঠেলাতে এবং --set-upstreamআপনার জন্য সঠিকভাবে ট্র্যাকিংয়ে কার্যকর:

git push --all -u

(ওপি যা চেয়েছিল ঠিক তাই নয়, তবে এই ওয়ান-লাইনারটি বেশ জনপ্রিয়)

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


14
এবং git pull --allএটি অন্য কোথাও টান? কিউল
commonpike

1
এই কমান্ডটি কোনও কিছু না দেওয়ার প্রয়োজন ছাড়াই সঠিক শাখায় ট্র্যাকিং সেট আপ করে। ধন্যবাদ.
amey91

45
গিট একটি শাখা কমিট করার অনুমতি দেয় এবং খুব ভাল কারণে এটি চাপ দেয় না। শুধুমাত্র গিট পুশ ব্যবহার করা - সমস্ত গিট আর্কিটেকচারের টুকরোটি ফেলে দেওয়ার মতো। যদি এটি আপনার পক্ষে কাজ করে তবে এটি পুরোপুরি ঠিক আছে, দুর্দান্ত, চিরকাল এটি করুন। তবে অনুগ্রহ করে অন্যকে গিট শেখা এড়ানোর পরামর্শ দেবেন না কারণ এটি কাজ করার একটি দ্রুত উপায়।
ফেডেরিকো রাজ্জোলি

4
এটি সত্যই সঠিক উত্তর নয় এবং এটি কী করে এবং এর কী কী প্রভাব ফেলবে তার প্রকৃত ব্যাখ্যা ছাড়াই সুপারিশ করা ভাল সরঞ্জাম নয়। এই উত্তর নিচে নেওয়ার বিষয়টি দয়া করে বিবেচনা করুন।
এক্রোনিম

3
@Federico @akronymn এক কোথায় করছেন বিপদ জানতে পারেন git push --all -u?
ব্যবহারকারী 1823664

155

প্রবর্তনের আগে, আপনি যা চান git push -uতা পাওয়ার কোনও git pushবিকল্প ছিল না । আপনাকে নতুন কনফিগারেশন স্টেটমেন্ট যুক্ত করতে হয়েছিল।

যদি আপনি এটি ব্যবহার করে একটি নতুন শাখা তৈরি করেন:

$ git checkout -b branchB
$ git push origin branchB:branchB

আপনি git configসরাসরি .git/configফাইলটি সম্পাদনা এড়াতে কমান্ডটি ব্যবহার করতে পারেন ।

$ git config branch.branchB.remote origin
$ git config branch.branchB.merge refs/heads/branchB

অথবা আপনি .git/configএই শাখায় ট্র্যাকিংয়ের তথ্য রাখার জন্য ম্যানুয়ালি ফাইলটি সম্পাদনা করতে পারেন ।

[branch "branchB"]
    remote = origin
    merge = refs/heads/branchB

4
কখনও কখনও আপনার প্রয়োজন এটিgit push origin -u local_branch:remote_branch
ব্রুস লি

127

সহজভাবে বলতে গেলে একটি নতুন স্থানীয় শাখা তৈরি করতে , করুন:

git branch <branch-name>

এটিকে দূরবর্তী সংগ্রহস্থলের দিকে ঠেলে দিতে :

git push -u origin <branch-name>

17
git branch <branch-name>এবং git checkout -b <branch-name>উভয়ই একটি শাখা তৈরি করে তবে চেকআউট নতুন শাখায় স্যুইচ করে
রবার্ট

1
ড্যুড ব্র্যাকেটটি কেবলমাত্র উল্লেখ করতে হয় যে আপনি যে শাখার নামটি তৈরি করতে এবং চাপতে চান তার সাথে আপনাকে প্রতিস্থাপন করতে হবে।
পিয়ুশমন্ডভরা

এটি রিমোটে একটি অস্তিত্বযুক্ত শাখা, এবং এর সাথে প্রত্যাখ্যান করুনsrc branch-name does not match any
আদি প্রসত্যিও

96

ইতিমধ্যে এখানে প্রদত্ত সমাধানগুলির একটি সামান্য প্রকরণ:

  1. কিছু অন্যান্য (দূরবর্তী বা স্থানীয়) শাখার উপর ভিত্তি করে একটি স্থানীয় শাখা তৈরি করুন:

    git checkout -b branchname
    
  2. স্থানীয় শাখাটিকে দূরবর্তী সংগ্রহস্থলে (প্রকাশ করুন) পুশ করুন, তবে এটি ট্র্যাকযোগ্য হিসাবে তৈরি করুন git pullএবং git pushঅবিলম্বে কাজ করবে

    git push -u origin HEAD
    

    ব্যবহার করা HEADহল "বর্তমান শাখাটিকে দূরবর্তী স্থানে একই নামে চালিত করার সহজ উপায়"। উত্স: https://git-scm.com/docs/git-push গিটের ভাষায়, হেড (বড় হাতের মধ্যে) বর্তমান শাখার (গাছের) শীর্ষের একটি উল্লেখ।

    -uবিকল্প ঠিক ছোট --set-upstream। এটি বর্তমান শাখার জন্য একটি প্রবাহের ট্র্যাকিং রেফারেন্স যুক্ত করবে। আপনি আপনার .git / কনফিগারেশন ফাইলটি দেখে এটি যাচাই করতে পারেন:

    এখানে চিত্র বিবরণ লিখুন


2
ধন্যবাদ :) git push -u origin <branch-name>আমার পক্ষে কাজ করছিল না বরং পুরোপুরি কাজ করার HEADপরিবর্তে ব্যবহার <branch-name>
করছিলাম

56

আমি কেবল করি

git push -u origin localBranch:remoteBranchToBeCreated

একটি ইতিমধ্যে ক্লোনড প্রকল্পের উপর।

গিট remoteBranchToBeCreatedআমার প্রতিশ্রুতি অনুসারে একটি নতুন শাখা তৈরি করেছে localBranch

সম্পাদনা করুন : এটি আপনার বর্তমান স্থানীয় শাখার (সম্ভবত নাম দেওয়া হয়েছে localBranch) প্রবাহে পরিবর্তন করে origin/remoteBranchToBeCreated। এটি ঠিক করতে, কেবল টাইপ করুন:

git branch --set-upstream-to=origin/localBranch

সুতরাং আপনার বর্তমান স্থানীয় শাখা এখন origin/localBranchফিরে ট্র্যাক ।


1
এটি ঠিক আমি সক্রিয়ভাবে সন্ধান করছিলাম
এলি

error: src refspec <new branch> does not match any.আমি এই চেষ্টা করার পরে গিট নিক্ষেপ ।
কোডফোরস্টার

1
এটি শীর্ষ উত্তর হওয়া উচিত।
আদিত্য অভাস

30

আমি মনে করি আপনি ইতিমধ্যে একটি প্রকল্প ক্লোন করেছেন:

git clone http://github.com/myproject.git
  1. তারপরে আপনার স্থানীয় অনুলিপিতে একটি নতুন শাখা তৈরি করুন এবং এটি পরীক্ষা করে দেখুন:

    git checkout -b <newbranch>
    
  2. মনে করে আপনি নিজের সার্ভারে একটি "গিট বেয়ার - ইনিট" তৈরি করেছেন এবং মায়াপ.git তৈরি করেছেন, আপনার উচিত:

    git remote add origin ssh://example.com/var/git/myapp.git
    git push origin master
    
  3. এর পরে, ব্যবহারকারীদের সক্ষম হওয়া উচিত

    git clone http://example.com/var/git/myapp.git
    

দ্রষ্টব্য: আমি ধরে নিচ্ছি যে আপনার সার্ভারটি চালু আছে। যদি তা না হয় তবে এটি কাজ করবে না। কীভাবে করা যায় তা এখানে একটি ভাল ।

যোগ করা হয়েছে

একটি দূরবর্তী শাখা যুক্ত করুন:

git push origin master:new_feature_name

সবকিছু ভাল কিনা তা পরীক্ষা করুন (আনুন উত্স এবং দূরবর্তী শাখাগুলির তালিকা):

git fetch origin
git branch -r

একটি স্থানীয় শাখা তৈরি করুন এবং দূরবর্তী শাখা ট্র্যাক করুন:

git checkout -tb new_feature_name origin/new_feature_name

সবকিছু আপডেট করুন:

git pull

1
আমি উইলিয়ামের স্ক্রিপ্টের সাথে লিঙ্ক করেছি যা রিমোট শাখা এবং কিছু
সুরক্ষাও

1
> স্থানীয় শাখাকে দূরবর্তী রেপোতে (প্রকাশ করা) ঠেলাতে, তবে এটি> ট্র্যাকযোগ্য করে তোলা যাতে গিট টান এবং গিট পুশ অবিলম্বে কাজ করবে। আপনি যখন নিজের কোডটি তাদের সংগ্রহস্থলের :-)

1
এটি প্রশ্নের জবাব দেয় না, মূল রেপোটির <নিউ ব্র্যাঞ্চ> ট্র্যাকযোগ্য নয় (এবং এর নামকরণ করা হয়েছে <মাস্টার> আপনি নতুন পদক্ষেপ 3 এ ক্লোন করেছেন))
লোহরন

1
একরকম ওভারকিল মনে হচ্ছে। git remote add originস্থানীয় শাখাটি ট্র্যাকযোগ্য করে তোলে? এখানে কি কী কমান্ড?
রনি ইয়ানিভ

3
@ রনি ইয়ানিভ: git remote add originকেবলমাত্র নতুন দূরবর্তী সংগ্রহস্থলটি নিবন্ধন করবেন না । আপনার শাখাটিকে সেই দূরবর্তী সংগ্রহস্থলে
চাপানোর

23

পুরানো সম্পাদনা করুন , শুধু ব্যবহার করুনgit push -u origin $BRANCHNAME


ব্যবহার করুন git publish-branchথেকে উইলিয়ামের বিবিধ গীত সরঞ্জাম ( gitorious রেপো এবং ক্লোন )।

ঠিক আছে, কোনও রুবি নেই, তাই - সুরক্ষাগুলি উপেক্ষা করুন! - স্ক্রিপ্টের শেষ তিনটি লাইন নিন এবং একটি বাশ স্ক্রিপ্ট তৈরি করুন git-publish-branch:

#!/bin/bash
REMOTE=$1 # Rewrite this to make it optional...
BRANCH=$2
# Uncomment the following line to create BRANCH locally first
#git checkout -b ${BRANCH}
git push ${ORIGIN} ${BRANCH}:refs/heads/${BRANCH} &&
git config branch.${BRANCH}.remote ${REMOTE} &&
git config branch.${BRANCH}.merge refs/heads/${BRANCH}

তারপরে চালান git-publish-branch REMOTENAME BRANCHNAME, যেখানে REMOTENAME সাধারণত উত্স হয় (আপনি স্ক্রিপ্টটি ডিফল্ট হিসাবে গ্রহণের জন্য পরিবর্তন করতে পারেন, ইত্যাদি ...)


1
এই ধরে আমি রুবি ইনস্টল করা আছে। এমন ভাগ্য নেই. অন্য কোন ধারণা?
রনি ইয়ানিভ

2
রুবি স্ক্রিপ্ট কল git pushএবং git configকমান্ড। আমি আমার উত্তর সম্পাদনা করতে স্ক্রিপ্টের কোড ব্যবহার করেছি। আপনি এই তথ্যটি একটি ছোট শেল স্ক্রিপ্ট তৈরি করতে ব্যবহার করতে পারেন যা আপনার জন্য ধিক্কার দেয়।
লোহরন

1
উইলিয়ামের বিবিধ গিট সরঞ্জামগুলি সরানো হয়েছে বলে মনে হয় (সেই লিঙ্কটি এখন মারা গেছে)। একটি কাজের লিঙ্কটি হ'ল: gitorious.org/willgit
মাইক ডি

1
"উইলিয়ামের" লিঙ্কটি আবার ভেঙে গেছে; নতুন লিঙ্কটি মনে হয় git-wt-commit.rubyforge.org
স্কটজে

22

বিদ্যমান শাখা থেকে শাখা বন্ধ করে একটি নতুন শাখা তৈরি করা

git checkout -b <new_branch>

এবং তারপরে ব্যবহার করে এই নতুন শাখাটিকে সংগ্রহস্থলগুলিতে চাপ দিন

git push -u origin <new_branch>

এটি একটি সদ্য নির্মিত দূরবর্তী শাখায় সমস্ত স্থানীয় কমিট তৈরি করে এবং পুশ করে origin/<new_branch>


12

1.7 এর আগে গিটল্যাব সংস্করণে, ব্যবহার করুন:

git checkout -b name_branch

(নাম_ ব্রাঞ্চ, প্রাক্তন master:)

এটিকে দূরবর্তী সংগ্রহস্থলের দিকে ঠেলে দিতে:

git push -u origin name_new_branch

(নাম_নু_ব্রাঞ্চ, উদাহরণ feature:)


9

আমি একটি উপনাম তৈরি করেছি যাতে আমি যখনই একটি নতুন শাখা তৈরি করি, ততক্ষণে এটি দূরবর্তী শাখাকে ধাক্কা এবং ট্র্যাক করবে। আমি .bash_profileফাইলটিতে নিম্নলিখিত অংশগুলি রেখেছি :

# Create a new branch, push to origin and track that remote branch
publishBranch() {
  git checkout -b $1
  git push -u origin $1
}
alias gcb=publishBranch

ব্যবহারের : শুধু টাইপ gcb thuy/do-sth-koolসঙ্গে thuy/do-sth-koolআমার নতুন শাখা নাম।


4

এখানে উত্তরের উপর সামান্য নির্মাণ করে, আমি এই প্রক্রিয়াটিকে একটি সরল বাশ স্ক্রিপ্ট হিসাবে গুটিয়ে রেখেছি, যা অবশ্যই গিট ওরফে হিসাবে ব্যবহার করা যেতে পারে।

আমার কাছে গুরুত্বপূর্ণ সংযোজনটি হ'ল এটি আমাকে প্রতিশ্রুতি দেওয়ার আগে ইউনিট পরীক্ষা চালানোর অনুরোধ জানায় এবং ডিফল্টরূপে বর্তমান শাখার নামে পাস করে।

$ git_push_new_branch.sh

  Have you run your unit tests yet? If so, pass OK or a branch name, and try again

  usage: git_push_new_branch {OK|BRANCH_NAME}

  e.g.

  git_push_new_branch           -> Displays prompt reminding you to run unit tests
  git_push_new_branch OK        -> Pushes the current branch as a new branch to the origin
  git_push_new_branch MYBRANCH  -> Pushes branch MYBRANCH as a new branch to the origin

git_push_new_branch.sh

function show_help()
{
  IT=$(cat <<EOF

  Have you run your unit tests yet? If so, pass OK or a branch name, and try again

  usage: git_push_new_branch {OK|BRANCH_NAME}

  e.g.

  git_push_new_branch.sh           -> Displays prompt reminding you to run unit tests
  git_push_new_branch.sh OK        -> Pushes the current branch as a new branch to the origin
  git_push_new_branch.sh MYBRANCH  -> Pushes branch MYBRANCH as a new branch to the origin

  )
  echo "$IT"
  exit
}

if [ -z "$1" ]
then
  show_help
fi

CURR_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$1" == "OK" ]
then
  BRANCH=$CURR_BRANCH
else
  BRANCH=${1:-$CURR_BRANCH}
fi

git push -u origin $BRANCH

2

আপনি এটি 2 টি খাড়াভাবে করতে পারেন:

1.checkout স্থানীয় শাখা তৈরি করতে ব্যবহার করুন :

git checkout -b yourBranchName

আপনার শাখার সাথে আপনি যেমন চান তেমন কাজ করুন।

২.push শাখাটি স্বতঃসিদ্ধ করতে কমান্ডটি ব্যবহার করুন এবং কোডটি দূরবর্তী সংগ্রহস্থলে প্রেরণ করুন:

git push -u origin yourBanchName

এটি করার একাধিক উপায় রয়েছে তবে আমি মনে করি যে এই উপায়টি খুব সহজ।


0

সর্বাধিক নমনীয়তার জন্য, আপনি একটি কাস্টম গিট কমান্ড ব্যবহার করতে পারেন । উদাহরণস্বরূপ, নীচের পাইথন স্ক্রিপ্টটি আপনার $PATHনামে কোথাও তৈরি করুন git-publishএবং এটি কার্যকর করতে সক্ষম করুন:

#!/usr/bin/env python3

import argparse
import subprocess
import sys


def publish(args):
    return subprocess.run(['git', 'push', '--set-upstream', args.remote, args.branch]).returncode


def parse_args():
    parser = argparse.ArgumentParser(description='Push and set upstream for a branch')
    parser.add_argument('-r', '--remote', default='origin',
                        help="The remote name (default is 'origin')")
    parser.add_argument('-b', '--branch', help='The branch name (default is whatever HEAD is pointing to)',
                        default='HEAD')
    return parser.parse_args()


def main():
    args = parse_args()
    return publish(args)


if __name__ == '__main__':
    sys.exit(main())

তারপরে git publish -hআপনাকে ব্যবহারের তথ্য প্রদর্শন করবে:

usage: git-publish [-h] [-r REMOTE] [-b BRANCH]

Push and set upstream for a branch

optional arguments:
  -h, --help            show this help message and exit
  -r REMOTE, --remote REMOTE
                        The remote name (default is 'origin')
  -b BRANCH, --branch BRANCH
                        The branch name (default is whatever HEAD is pointing to)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.