"আপনি" ঠিক কি করেন? "গিট পুশ-ই অরিজিন মাস্টার" বনাম "গিট পুশ অরিজিন মাস্টার"


333

আমি গিট ব্যবহার করার ক্ষেত্রে স্পষ্টতই ভয়ঙ্কর, এটি চেষ্টা করার চেষ্টা করার পরেও।

থেকে kernel.org জন্য git push:

-u

--set-মূল প্রজেক্টের

আপ টু ডেট বা সফলভাবে ঠেলে দেওয়া প্রতিটি শাখার জন্য আপগ্রেম (ট্র্যাকিং) রেফারেন্স যুক্ত করুন, যুক্তি-কম গিট-পুল (1) এবং অন্যান্য কমান্ড দ্বারা ব্যবহৃত। আরও তথ্যের জন্য, branch.<name>.mergeগিট কনফিগারেশন (1) এ দেখুন।

এখানে branch.<name>.mergeথেকে git config:

branch.<name>.merge

branch.<name>.remoteপ্রদত্ত শাখার জন্য প্রবাহিত শাখা একসাথে সংজ্ঞায়িত করে । এটি গিট ফেচ / গিট টানকে বলে যে কোন শাখাটি মার্জ করতে হবে এবং গিট পুশকেও প্রভাবিত করতে পারে (পুশ.ডিফল্ট দেখুন)। শাখায় <name>থাকাকালীন, এটি গিটকে FETCH_HEAD এ মার্জ করার জন্য চিহ্নিত করা ডিফল্ট রেফস্পেককে বলে। মানটি একটি রেসপেসকের দূরবর্তী অংশের মতো পরিচালনা করা হয় এবং অবশ্যই প্রদত্ত রিমোট থেকে প্রাপ্ত একটি রেফের সাথে অবশ্যই মেলে "branch.<name>.remote"। মার্জ করার তথ্যটি গিট টান (যা প্রথমে গিট আনতে ডাকে) মার্জ করার জন্য ডিফল্ট শাখার অনুসন্ধান করতে ব্যবহৃত হয়। এই বিকল্পটি ছাড়াই, প্রথম রেস্পপেক আনার জন্য গিট টান ডিফল্ট। একটি অক্টোপাস মার্জ পেতে একাধিক মান নির্দিষ্ট করুন। আপনি যদি গিট টান সেটআপ করতে চান যাতে এটি <name>স্থানীয় সংগ্রহস্থলের অন্য একটি শাখা থেকে মিশে যায় তবে আপনি নির্দেশ করতে পারেনbranch.<name>.mergeপছন্দসই শাখায় এবং বিশেষ সেটিংটি ব্যবহার করুন। (একটি সময়কাল) জন্য branch.<name>.remote

আমি গিথুব সহ ​​সফলভাবে একটি রিমোট রিপোজিটরি সেট আপ করেছি এবং আমি এর সাথে আমার প্রথম প্রতিশ্রুতি সাফল্যের সাথে ঠেলে দিয়েছি:

git push -u origin master

তারপরে, আমি অজান্তে আমার দ্বিতীয় প্রতিশ্রুতিটি সফলভাবে আমার দূরবর্তী সংগ্রহস্থলের কাছে ঠেলে দিয়েছিলাম:

git commit -m '[...]'

যাইহোক, ভুলভাবে ভেবেছিলাম আমাকে আবার originথেকে ধাক্কা দিতে হবে master, আমি দৌড়ে:

# note: no -u
git push origin master

কী করল? এটির কোনও প্রভাব আছে বলে মনে হয় নি। আমি কি "পূর্বাবস্থাপন" করেছি git push -u origin master?


44
I'm apparently terrible at using git, despite my best attempts to understand it.- আমি কখনও কাউকে এত সুন্দরভাবে পুনরায় তৈরি করিনি।
ডিজিও 19

উত্তর:


335

চাবিটি হ'ল "আর্গুমেন্ট-কম গিট-পুল"। আপনি যখন git pullকোনও শাখা থেকে কোনও উত্স, কোনও প্রত্যন্ত বা শাখা নির্দিষ্ট না করেই করেন, গিটটি branch.<name>.mergeকোথা থেকে টানতে হবে তা জানার জন্য সেটিংটি দেখে । git push -uআপনি যে শাখাকে চাপ দিচ্ছেন তার জন্য এই তথ্য সেট করে।

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

$ git checkout -b test

প্রথমত, আমরা ছাড়াই -u:

$ git push origin test
$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.test.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.

If you often merge with the same branch, you may want to
use something like the following in your configuration file:

    [branch "test"]
    remote = <nickname>
    merge = <remote-ref>

    [remote "<nickname>"]
    url = <url>
    fetch = <refspec>

See git-config(1) for details.

এখন যদি আমরা যুক্ত করি -u:

$ git push -u origin test
Branch test set up to track remote branch test from origin.
Everything up-to-date
$ git pull
Already up-to-date.

নোট করুন যে ট্র্যাকিংয়ের তথ্য সেট আপ করা হয়েছে যাতে git pullদূরবর্তী বা শাখা নির্দিষ্ট করে না দিয়ে প্রত্যাশার মতো কাজ করে।

আপডেট: বোনাস টিপস:

  • হিসাবে মার্ক একটি মন্তব্যে উল্লেখ করেছে, git pullএই সেটিংটি ছাড়াও এর ডিফল্ট আচরণকেও প্রভাবিত করে git push। আপনি যদি -uট্র্যাক করতে চান এমন রিমোট শাখা ক্যাপচার করার অভ্যাসটি পান তবে আমি আপনার push.defaultকনফিগার মানটি সেট করার পরামর্শ দিচ্ছি upstream
  • git push -u <remote> HEADবর্তমান শাখাটিকে একই নামের একটি শাখায় ঠেলে দেবে <remote>(এবং ট্র্যাকিংও সেট আপ করবে যাতে আপনি এর git pushপরে এটি করতে পারেন )।

4
git push <remote> <branch>বিষয়গুলিকে দ্ব্যর্থহীন করে তোলে । আপনি যদি রিমোট ছেড়ে চলে যান বা ব্রাঞ্চের গিটটি আপনার জন্য সেট করা ব্রাঞ্চ কনফিগারেশন সেটিংসে ফিরে আসে git push -u
dahlbyk

2
@ ডাহলবিইক আমি এগিয়ে গিয়েছিলাম এবং আপনাকে উত্তর হিসাবে চিহ্নিত করেছি, কিন্তু সেই মন্তব্য আমাকে কিছুটা বিভ্রান্ত করেছে। আপনার উত্তরে, আপনি দেখিয়েছেন যে গিটটি (যা নেই ) পরে বিভ্রান্ত হয়েছিল । এরপরে আপনি দেখিয়েছেন যে অস্পষ্টতা দূর করে। টাইপো আছে, নাকি আমি আবার ঘন হয়ে যাচ্ছি? git push origin test-ugit push -u origin test
ক্লোজারকাউয়

1
আমি মনে করি আমরা একে অপরের অতীত কথা বলছি। :) যখন আমি বলি git push <remote> <branch>দ্ব্যর্থহীন, তখন আমি তার সাথে সম্পর্কিত git pushযা শাখা কনফিগারেশনের উপর নির্ভর করে। একইভাবে, git pull <remote> <branch>দ্ব্যর্থহীন এবং git pullশাখা কনফিগারেশনের উপর নির্ভর করে। একবার আপনি ধাক্কা পরে -u, উভয় git pushএবং git pullপ্রত্যাশা অনুযায়ী কাজ করবে।
dahlbyk

10
@ ডাহলবিক: আপনার উত্তরটি ঠিক আছে, তবে উপরের আপনার মন্তব্যে আপনি একটি সাধারণ ভুল ধারণাটি পুনরাবৃত্তি করেছেন git push- আপনি push.defaultনিজেকে সেট git pushনা করা হলে কোন রিমোটটি আপডেট করা উচিত তা নয়, কোন রিমোটটি চাপতে হবে তা সিদ্ধান্ত নিতে কেবল উজানের শাখা কনফিগারেশন ব্যবহার করে।
লংগায়ার

1
গিটের জন্য সর্বোত্তম অনুশীলন হ'ল git push origin masterঅন্য পক্ষের আইই-তেও। git pull origin master.. সুতরাং ধরুন যদি শাখা পরিবর্তন হয় তবে আপনি git push origin branch_nameএবং অন্য পাশের আইই তেও পারেন। git pull origin branch_name
অর্পিত বৈষ্ণব

87
git push -u origin master

… হিসাবে একই:

git push origin master ; git branch --set-upstream master origin/master

শেষ বিবৃতিটি করুন, আপনি যদি ভুলে যান -u!

অথবা আপনি এটি জোর করতে পারে:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

যদি আপনি কমান্ডটি এটি করতে দেন তবে এটি আপনার ভুলগুলি বেছে নেবে যেমন আপনি যদি অস্তিত্বহীন শাখা টাইপ করেন বা আপনি না করেন git remote add; যদিও এটি আপনি চান হতে পারে। :)


1
BTW masterশুধু একটি উদাহরণ :) হল
sabgenton

: ঠিক আছে দ্বিতীয় বিট এখন জন্য নতুন সংস্করণে অবমূল্যায়ন ঘটেছে git branch master -u origin/masterবিবরণ @ stackoverflow.com/a/2286030/790359
sabgenton

2
আপনি যদি -uবিকল্পটি ব্যবহার করতে ভুলে যান তবে git push -uঅবিলম্বে টাইপ করুন ঠিক আছে।
zeekvfu

1
গিটের আরও নতুন সংস্করণগুলি হ্রাস করা --setup-upstreamহবে বলে ইঙ্গিত দেয় : The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
বিল হোয়াগ

--set-upstream হ্রাস করা হয়েছে, এখন এটি কাজ করে:git branch --set-upstream-to=origin/master master
আলবার্তো পেরেজ

43

আরও সাধারণ পদে:

প্রযুক্তিগতভাবে, -uপতাকাটি আপনি প্রবাহিত প্রবাহের সার্ভারে একটি ট্র্যাকিং রেফারেন্স যুক্ত করে।

এখানে যা গুরুত্বপূর্ণ তা হল এটি আপনাকে আর git pullকোনও যুক্তি সরবরাহ না করে একটি করতে দেয় । উদাহরণস্বরূপ, একবার আপনি git push -u origin masterএটি করার পরে, আপনি পরে কল করতে পারেন git pullএবং গিটটি জানতে পারবেন যে আপনি আসলে বোঝাতে চেয়েছিলেন git pull origin master

অন্যথায়, আপনাকে পুরো কমান্ডটি টাইপ করতে হবে।


1
সুতরাং আমি যদি প্রতিটি পরবর্তী টানতে -uপতাকা সেট করি তবে orgin masterএটি উল্লেখ করবে। এবং git pullআমি যদি চালানো উচিত এমন আচরণটি পরিবর্তন করতে চাই git push -u origin some_other_branchএবং git pullএখন উল্লেখ করব some_other_branch? ধন্যবাদ!
তোমা টমভ

1
আমরা কি "গিট পুশ" ব্যবহারের পরিবর্তে "গিট পুশ অরিজিন মাস্টার" ব্যবহার করতে পারি?
সেগপ্রকাশ

হ্যাঁ, আপনি @ এসপিপ্রকাশ করতে পারেন। তবে আপনি প্রাথমিকভাবে একটি করতে git push -u origin master
পেরেছিলেন

-11

গিথুবকে ধাক্কা দিতে এবং টানতে সমস্ত প্রয়োজনীয় গিট ব্যাশ আদেশ:

git status 
git pull
git add filefullpath

git commit -m "comments for checkin file" 
git push origin branch/master
git remote -v 
git log -2 

আপনি যদি কোনও ফাইল সম্পাদনা করতে চান তবে:

edit filename.* 

সমস্ত শাখা এবং তাদের কমিটগুলি দেখতে:

git show-branch

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