নির্দিষ্ট প্রতিশ্রুতি না দেওয়া পর্যন্ত গিট টানুন


96

আমি git pullকেবল একটি নির্দিষ্ট প্রতিশ্রুতি অবধি একটি করতে চাই।

 A->B->C->D->E->F (Remote master HEAD)

সুতরাং ধরুন আমার local masterহেড ইঙ্গিত করেছে Bএবং আমি অবধি টানতে চাই E। আমার কি করা উচিৎ ?

এটি একটি নির্দিষ্ট প্রতিশ্রুতি টানছে না, এটি একটি নির্দিষ্ট প্রতিশ্রুতি পর্যন্ত টানছে।



4
git fetchএবং git merge E
poke

উদাহরণস্বরূপ আমি বর্তমানে বিতে আছি তবে আমি কেবল সি, ই এবং এফ টানতে চাই D. আমি ডি অপসারণ করতে চাই ধন্যবাদ!
ফ্রেঙ্কি

@ ফ্রেনকি আপনি মাস্টারকে মার্জ করতে পারবেন তারপরে শেষ তিনটি কমিট সরিয়ে ফেলুন এবং তারপরে চেরি শেষ দুটি বেছে নিন। এছাড়াও আপনি আরও নিয়ন্ত্রিত গিট মার্জ করার জন্য রিবেস -i চেষ্টা করতে পারেন
নিনজা 420

আমি যদি কেবল সি থেকে পরিবর্তন আনতে চাই, তবে কেবলমাত্র এ এবং বি এর পরিবর্তনগুলি অন্তর্ভুক্ত করবেন না? আমি এটা কিভাবে করবো?
বিকাশ চৌহান

উত্তর:


113

git pullgit fetchঅনুসরণ করা ছাড়া কিছুই নয় git merge। সুতরাং আপনি কি করতে পারেন

git fetch remote example_branch

git merge <commit_hash>


"এটি উল্লেখ করুন" অনুমিত হতে পারে কি?
বিকাশকারী

@ ব্রাইট লিঙ্কটি পোস্ট করতে ভুলে গেছেন .. সম্পূর্ণরূপে সরিয়ে
ফেলেছেন

@ unrealsoul007 এটি ঠিক যে একটি নির্দিষ্ট প্রতিশ্রুতি সঠিকভাবে মার্জ করবে? সুতরাং বি থেকে E তে টানতে কমান্ডটি গিটটি একীভূত হবে <কমিট_হ্যাশ সি> <কমিট_হ্যাশ ডি> <কমিট_হ্যাশ ই> ডান?
উইম ফেইজেন

6
@WimFeijen git merge Eএকত্র করে দেবে Eতার পূর্বপুরুষদের সঙ্গে বরাবর Cএবং D(Git যে জানে Aএবং Bকারণ তিনি আপনার শাখা ইতিমধ্যে ছিল মার্জ করা প্রয়োজন হবে না)। আপনি যদি কেবল পরিবর্তন চান Eতবে তার git cherry-pick Eপরিবর্তে আপনার উচিত ।
নেক্সাস

উত্তরের জন্য ধন্যবাদ বলছি, আমি একই সমস্যাটি খুঁজছিলাম।
আকাশ বিসারিয়ার

21

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

git fetch origin

তারপরে রিমোট ট্র্যাকিং শাখাটি চেকআউট করুন এবং কমিটগুলি দেখতে গিট লগ করুন

git checkout origin/master
git log

আপনি যে কমিটিকে মার্জ করতে চান তার প্রতিশ্রুতিবদ্ধ হ্যাশটি ধরুন (বা এর প্রথম প্রথম 5 ডলার অংশ) এবং সেই প্রতিশ্রুতিটিকে মাস্টার হিসাবে মার্জ করুন

git checkout master
git merge <commit hash>

4
আমি আপনাকে নীচে ভোট দিয়েছি কারণ এটি বিজ্ঞাপন হিসাবে কাজ করে না। প্রথমত, আপনার পদ্ধতির "গিট আনতে উত্স" দিয়ে এটি সমস্ত প্রত্যন্ত শাখাগুলি নিয়ে আসে (এটি স্পষ্টভাবে উল্লেখ করা উচিত, বিশেষত অনেকগুলি এবং বৃহত্তর শাখাগুলি সহ প্রকল্পগুলিতে কাজ করা লোকদের জন্য)। দ্বিতীয়ত, এই পদ্ধতির সাথে "গিট মার্জ <কম হ্যাশ>" আপনার স্থানীয় ইতিহাসকে ওয়ান্টেড কমিট পর্যন্ত মার্জ করে না, যদি আপনি ইতিহাসে ফিরে আসেন are উদাহরণ: আপনি স্থানীয়ভাবে প্রতিশ্রুতিবদ্ধ 100, আপনি কিছু আনতে (দূরবর্তী হেড 100 এর সাথে থাকা) দ্বারা 150 এ পৌঁছতে চান।
স্থানধারক

8
@ স্থানধারক আপনার এই git fetchজাতীয় বাজে কথা লেখার আগে ম্যানুয়ালটি পড়া উচিত । তারপরেও আপনার আসল প্রশ্ন এবং আমার উত্তরটি পড়া উচিত। আপনি যদি আমার উত্তর অনুসরণ করেন তবে ব্যবহারকারীকে আমি স্পষ্টভাবে নির্দেশ দিয়েছিলাম আপনি "ইতিহাসে ফিরে" পাবেন না git checkout master। সামগ্রিকভাবে, আপনি যদি কমপক্ষে 50% পরিষ্কার না হন তবে দয়া করে স্টাফ পোস্ট করবেন না।
developerbmw

4
এটি অন্য কারও পক্ষে সুস্পষ্ট না হলে স্পষ্টতই উত্সটিgit fetch origin আনে ।
ড্যানিয়েল ফারেল

4
এটি নিখুঁতভাবে কাজ করে এবং গৃহীত উত্তরের চেয়ে আরও ভালভাবে ব্যাখ্যা করা হয়।
ওয়ালেন

4
সেরা উত্তর,
নিখুঁতভাবে

13

আপনি সর্বশেষতম প্রতিশ্রুতিটিও টানতে পারেন এবং আপনি যে প্রতিশ্রুতি চান তা না করা অবধি পূর্বাবস্থায় ফিরে আসতে পারেন:

git pull origin master
git reset --hard HEAD~1

masterআপনার পছন্দসই শাখা দিয়ে প্রতিস্থাপন করুন ।

আপনি কোন প্রতিশ্রুতি প্রত্যাহার করতে চান তা দেখতে গিট লগ ব্যবহার করুন:

git log

ব্যক্তিগতভাবে, এটি আমার পক্ষে আরও ভাল কাজ করেছে।

মূলত, এটি যা করে তা হ'ল সর্বশেষ প্রতিশ্রুতিটি টান দেয় এবং আপনি ম্যানুয়ালি ফিরিয়ে দেন একে একে প্রতিশ্রুতিবদ্ধ। প্রতিশ্রুতিবদ্ধ ইতিহাস দেখতে গিট লগ ব্যবহার করুন।

ভাল পয়েন্ট: বিজ্ঞাপন হিসাবে কাজ করে। আপনাকে কমিট হ্যাশ ব্যবহার করতে হবে না বা অনিবদ্ধ শাখাগুলি টানতে হবে না।

খারাপ পয়েন্ট: আপনাকে একের পর এক প্রতিশ্রুতি ফিরিয়ে নেওয়া দরকার।

সতর্কতা: আপনার সমস্ত স্থানীয় পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ / লুকিয়ে রাখুন, কারণ আপনার সাথে --hardসেগুলি হারাতে চলেছে। আপনার নিজের ঝুঁকিতে ব্যবহার করুন!


4
আমি জানি না কেন নিম্নাঞ্চলীরা, এটিকে সবচেয়ে পরিষ্কার উপায়ে মনে হয় এবং আপনি যত তাড়াতাড়ি ডেটে যেতে চান অন্য সরল উত্তরগুলি থেকে পৃথক করে একটি সহজ টান করবেন
মৌরিসিও পাসকুইয়ার জুয়ান

হয় না কেন আরও উপবিষ্ট হন না, একমাত্র নেতিবাচকতা হ'ল HEADফিরে যাওয়ার আগে আপনাকে আগে যেতে হবে - এবং যদি আপনি বিরোধগুলি সমাধান করতে হয় তবে আমি কী করব না। কিন্তু এই সমাধান জন্য করতে পারবেন git pull --rebase, এবং কি বিপরীত বলেন আপনি সরাসরি রিসেট ফিরে পারেন Nকরে আগে সঙ্গে git reset --hard HEAD~N(অর্থাত 3 করে জন্য, git reset --hard HEAD~3)।
স্টক ওভারফ্লা

2

আপনি যদি নিজের শাখায় কোনও প্রতিশ্রুতি মার্জ করেন তবে আপনার মধ্যে সমস্ত ইতিহাস পাওয়া উচিত।

পর্যবেক্ষণ:

it গিট ইনি। /
/ ব্যবহারকারী / ডিফারেল / গীত / ডেমো /.git/ এ খালি গিট সংগ্রহস্থল শুরু করা হয়েছে
$ প্রতিধ্বনি 'এ'> চিঠি
it গিট অ্যাড লেটার
Initial গিট কমিট-এম 'প্রাথমিক পত্র'
[মাস্টার (রুট-কমিট) 6e59e76] প্রাথমিক চিঠি
 1 টি ফাইল পরিবর্তন করা হয়েছে, 1 টি সন্নিবেশ (+)
 মোড 100644 চিঠি তৈরি করুন
$ প্রতিধ্বনি 'বি' >> চিঠি
it গিট অ্যাড লেটার && গিট কমিট-এম 'চিঠি যুক্ত করা'
[মাস্টার 7126e6 ডি] চিঠি যুক্ত করা
 1 টি ফাইল পরিবর্তন করা হয়েছে, 1 টি সন্নিবেশ (+)
$ প্রতিধ্বনি 'গ' >> চিঠি; গিট অ্যাড লেটার && গিট কমিট-এম 'চিঠি যুক্ত করা'
[মাস্টার f2458be] চিঠি যুক্ত করা হচ্ছে
 1 টি ফাইল পরিবর্তন করা হয়েছে, 1 টি সন্নিবেশ (+)
$ প্রতিধ্বনি 'ডি' >> চিঠি; গিট অ্যাড লেটার && গিট কমিট-এম 'চিঠি যুক্ত করা'
[মাস্টার 7f77979] চিঠি যুক্ত করা হচ্ছে
 1 টি ফাইল পরিবর্তন করা হয়েছে, 1 টি সন্নিবেশ (+)
$ প্রতিধ্বনি 'ই' >> চিঠি; গিট অ্যাড লেটার && গিট কমিট-এম 'চিঠি যুক্ত করা'
[মাস্টার 790eade] চিঠি যোগ করা হচ্ছে
 1 টি ফাইল পরিবর্তন করা হয়েছে, 1 টি সন্নিবেশ (+)
it গিট লগ
কমিট করুন 790eade367b0d8ab8146596cd717c25fd895302a
লেখক: ড্যান ফারেল 
তারিখ: থু জুলাই 16 14:21:26 2015 -0500

    চিঠি যুক্ত করা হচ্ছে

কমিট করুন 7f77979efd17f277b4be695c559c1383d2fc2f27
লেখক: ড্যান ফারেল 
তারিখ: থু জুলাই 16 14:21:24 2015 -0500

    চিঠি যুক্ত করা হচ্ছে

কমিট করুন f2458bea7780bf09fe643095dbae95cf97357ccc
লেখক: ড্যান ফারেল 
তারিখ: বৃহস্পতিবার 16 জুলাই 14:21:19 2015 -0500

    চিঠি যুক্ত করা হচ্ছে

কমিট 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad
লেখক: ড্যান ফারেল 
তারিখ: বৃহস্পতিবার 16 জুলাই 14:20:52 2015 -0500

    চিঠি যুক্ত করা হচ্ছে

প্রতিশ্রুতিবদ্ধ 6e59e7650314112fb80097d7d3803c964b3656f0
লেখক: ড্যান ফারেল 
তারিখ: থু জুলাই 16 14:20:33 2015 -0500

    প্রাথমিক চিঠি
it গিট চেকআউট 6e59e7650314112fb80097d7d3803c964b3656f
it গিট চেকআউট 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad
দ্রষ্টব্য: '7126e6dcb9c28ac60cb86ae40fb358350d0c5fad' পরীক্ষা করা।

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

আপনি যদি নিজের তৈরি কমিটগুলি ধরে রাখতে একটি নতুন শাখা তৈরি করতে চান তবে আপনি তা করতে পারেন
আবার (এখন বা পরে) চেকআউট কমান্ডের সাহায্যে -b ব্যবহার করে করুন। উদাহরণ:

  গিট চেকআউট-বি নতুন_ ব্রাঞ্চ_নাম

হেড এখন 7126e6 ডি এ ... চিঠি যুক্ত করা হচ্ছে
it গিট চেকআউট-বি বি 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad
একটি নতুন শাখা 'বি' তে স্যুইচ করা হয়েছে
it গিট টান 790eade367b0d8ab8146596cd717c25fd895302a
মারাত্মক: '790eade367b0d8ab8146596cd717c25fd895302a' গিট সংগ্রহস্থল হিসাবে উপস্থিত হয় না
মারাত্মক: দূরবর্তী সংগ্রহস্থল থেকে পড়া যায়নি।

আপনার সঠিক অ্যাক্সেসের অধিকার রয়েছে কিনা তা নিশ্চিত হয়ে নিন
এবং সংগ্রহস্থল বিদ্যমান।
it গিট মার্জ 7f77979efd17f277b4be695c559c1383d2fc2f27
7126e6d..7f77979 আপডেট করা হচ্ছে
দ্রুত অগ্রগামী
 চিঠি | 2 ++
 1 ফাইল পরিবর্তন করা হয়েছে, 2 টি সন্নিবেশ (+)
$ বিড়ালের চিঠি
ক
খ
গ
d

1

এটি আমার পক্ষে কাজ করে:

git pull origin <sha>

যেমন

[dbn src]$ git fetch
[dbn src]$ git status
On branch current_feature
Your branch and 'origin/master' have diverged,
and have 2 and 7 different commits each, respectively.
...
[dbn src]$ git log -3 --pretty=oneline origin/master
f4d10ad2a5eda447bea53fed0b421106dbecea66 CASE-ID1: some descriptive msg
28eb00a42e682e32bdc92e5753a4a9c315f62b42 CASE-ID2: I'm so good at writing commit titles
ff39e46b18a66b21bc1eed81a0974e5c7de6a3e5 CASE-ID2: woooooo
[dbn src]$ git pull origin 28eb00a42e682e32bdc92e5753a4a9c315f62b42
[dbn src]$ git status
On branch current_feature
Your branch and 'origin/master' have diverged,
and have 2 and 1 different commits each, respectively.
...

এটি 28eb00, ff39e4 এবং এর আগে সমস্ত কিছু টানে, তবে f4d10ad টানেনি। এটি টান --rebase এবং সম্মানগুলি আপনার gitconfig এ টানুন সেটিংস ব্যবহারের অনুমতি দেয়। এটি কাজ করে কারণ আপনি মূলত একটি শাখা হিসাবে 28eb00 চিকিত্সা করছেন।

যে গিটটি আমি ব্যবহার করছি তার সংস্করণের জন্য, এই পদ্ধতির জন্য একটি সম্পূর্ণ কমিট হ্যাশ দরকার - কোনও সংক্ষেপণ বা উপকরণ অনুমোদিত নয় allowed আপনি যেমন কিছু করতে পারেন:

[dbn src]$ git pull origin `git rev-parse origin/master^`
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.