গিটহাবে দূরবর্তী পরিবর্তনগুলি কীভাবে মার্জ করবেন?


137

আমি প্রথমে গিথুবকে ধাক্কা দিয়ে চেষ্টা করছি:

[rejected] master -> master (non-fast forward)
error: failed to push some refs to 'git@github.com:me/me.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'non-fast forward'
section of 'git push --help' for details.

আমি কীভাবে এটি ঠিক করতে পারি এবং দূরবর্তী পরিবর্তনগুলিকে একীভূত করতে পারি?

উত্তর:


106

বিশদটির জন্য ' গিট পুশ - হেল্প ' এর 'নন-ফাস্ট ফরোয়ার্ড' বিভাগটি দেখুন।

আপনি "গিট টান" সঞ্চালন করতে পারেন, সম্ভাব্য দ্বন্দ্ব সমাধান করতে পারেন এবং ফলাফলটি "গিট পুশ" করতে পারেন। একটি "গিট টান" কমিট A এবং B এর মধ্যে মার্জ কমিট সি তৈরি করবে

বিকল্পভাবে, আপনি "গিট টান --rebase" দিয়ে এ এর ​​শীর্ষে এক্স এবং বি এর মধ্যে আপনার পরিবর্তনটি পুনরায় শোধ করতে পারেন এবং ফলাফলটি পিছনে ধাক্কা দিতে পারেন। রিবাজে একটি নতুন কমিট ডি তৈরি করবে যা এ এর ​​উপরে X এবং B এর মধ্যে পরিবর্তন তৈরি করে D


16
আমি "গিট টান" করি তবে আমাকে "ইতিমধ্যে আপ টু ডেট" বলা হয়ে থাকে except এবং যদি আমি "গিট টান --rebase" করি তবে আমাকে বলা হয়েছে যে "বর্তমান শাখার মাস্টার আপ টু ডেট।" কোন ধারনা? ধন্যবাদ!
jwl

3
@ লারসন ৪ আমি একই সমস্যা পেয়েছি, তবে আপনি যা করার পরে git pull, আরও একটি প্রতিশ্রুতি দিন এবং তারপরে এটি ভাল হওয়া উচিত
প্যাট্রিক

20
@ পেট্রিক @ আলারসন আমার ত্রুটি বার্তাটি মনোযোগ সহকারে না পড়ার কারণে আমার একই সমস্যা হয়েছিল। প্রত্যাখ্যান একটি শাখায় ছিল যা আমি চেক আউট করি নি। আমি যে শাখায় আসলে ছিলাম সফল হয়েছিল। সমাধান ছিল git checkout other-branch; git pull; git push; git checkout branch-i-was-working-on
নোয়া স্পুরিয়ার

86

আপনি নিজের শাখার নামের আগে + চিহ্ন যোগ করে একটি চাপ দিতে বাধ্য করতে পারেন।

git push origin +some_branch

1
আপনাকে ধন্যবাদ, এটি আমার জন্য কাজ করে। অন্যান্য সমাধানগুলি আমারgit reset --hard
অলির

1
ধন্যবাদ! উত্পাদনের পরিবেশে কিছু কার্যকারিতা পরীক্ষা করার জন্য আমি আমার হিরোকু স্টেজিং অ্যাপ্লিকেশন পর্যন্ত শাখা "এ" টিপলাম। তারপরে (স্থানীয়ভাবে) আমি "এ" এবং "বি" কে "মাস্টার" এ মিশ্রিত করে আমার স্টেজিং অ্যাপ্লিকেশনটিতে "মাস্টার" টিপতে চাইছি। সব ধরণের সমস্যা হচ্ছিল। এটি "মাস্টার" কে খুব সাধারণভাবে ঠেলে দিয়েছে। ধন্যবাদ!
ডন লিথাম

আমার জন্যও কাজ করেছেন। সমস্যাটি খুঁজতে আমাকে 4 ঘন্টা সময় নিয়েছে। অনেক ধন্যবাদ. আমি লোকাল মেশিনে নেটবিনগুলি চালিত করি (উইন্ডোজ and) এবং স্থানীয় প্রতিটি ধাক্কা নিতে চেয়েছিলাম, রিমোট মেশিনে (লিনাক্স) পরীক্ষা করে দেখুন।
ম্যাক্সিম শৌস্টিন

মনে রাখবেন যে এই পদ্ধতিটি নিরাপদ নাও হতে পারে এবং এর ফলে কিছুটা বিচ্ছিন্ন প্রতিশ্রুতিগুলি না পারা যায়।
সামুয়েল

এটি গ্রহণযোগ্য সমাধান হওয়া উচিত। অন্যান্য সমাধানগুলি আমার পক্ষে কাজ করছে না
বানারুন

20

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


18
আপনার যদি রিমোট মাস্টারের পরিবর্তনগুলি প্রত্যাখ্যান করতে এবং আপনার নিজের পরিবর্তনগুলিকে ধাক্কা দেওয়ার প্রয়োজন হয়, -f কী দিয়ে চাপ দেওয়ার চেষ্টা করুন
Hotsyk

13

যদি আপনি "গিট টান" এবং এটি "ইতিমধ্যে আপ টু ডেট says" বলে থাকে এবং এখনও এই ত্রুটিটি পেয়ে থাকে তবে এটি হতে পারে কারণ আপনার অন্যান্য শাখাগুলির মধ্যে একটি আপ টু ডেট না। অন্য শাখায় স্যুইচ করার চেষ্টা করুন এবং আবার "গিট পুশ" করার চেষ্টা করার আগে নিশ্চিত হয়ে নিন যে একটিটিও আপ টু ডেট রয়েছে:

শাখা "foo" এ স্যুইচ করুন এবং এটি আপডেট করুন:

$ git checkout foo
$ git pull

কমান্ড জারি করে আপনি যে শাখাগুলি পেয়েছেন তা দেখতে পাবেন:

$ git branch

এটি কেন কাজ করে এবং প্রয়োজনীয় তা আপনি ব্যাখ্যা করতে পারেন? (এটি আমার সমস্যার সমাধান করেছিল)) এটি আমার কাছে কেবল স্ব-স্বজ্ঞাত বলে মনে হচ্ছে। আমি বুঝতে পারি না যে মাস্টার শাখায় ঠেলাঠেলি করার জন্য গিটারের আরও একটি শাখার ডেট আপ টু ডেট থাকতে হবে।
কুইন্সি ভন বেসিক্স

@ কুইনসিভনবেসিেক্স আমি নিশ্চিত না যে আমি নিজেই বুঝতে পেরেছি। গিটের নিজস্ব অন্তর্নিহিত কাঠামোর সাথে এটির কোনও সম্পর্ক থাকতে পারে এবং এটি কীভাবে শাখাগুলি সংগঠিত করে (যা মূলত আমি যতটা বুঝি ট্যাগ হিসাবে একই)।
ডেভিড ক্যালহাউন

7

আপনি এটিকে চাপ দিতে বাধ্য করতে পারেন, তবে আপনি যখন যা করছেন তা নিশ্চিত হওয়ার পরে দয়া করে এটি করুন।

আদেশটি হ'ল:

git push -f 

3

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

আপনি এটি স্থানীয় ট্যাগ মুছে ফেলার সমাধান করতে পারেন:

$ git tag --delete foo_tag

2

যখন আমি এই ত্রুটি পেয়েছি, তখন আমি আমার পুরো প্রকল্প ফোল্ডারটি ব্যাক আপ করেছি। তারপরে আমি এরকম কিছু করলাম

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

... আপনার শাখার নামের উপর নির্ভর করে (এটি যদি মাস্টার না হয়)।

তারপরে আমি করলাম git pull --rebase। এর পরে, আমি টানা ফাইলগুলিকে আমার ব্যাক-আপ প্রকল্পের ফাইলগুলি প্রতিস্থাপন করেছি। এখন আমি আমার পরিবর্তনগুলি আবার করতে এবং প্রস্তুত করার জন্য প্রস্তুত।


0

1) স্থানীয় পরিবর্তনগুলি ওভাররাইট করতে একটি টান জোর করা

আপনি যদি স্থানীয়ভাবে করা পরিবর্তনগুলি সম্পর্কে চিন্তা না করেন এবং সংগ্রহশালা থেকে কোডটি পেতে চান, আপনি একটি টানতে বাধ্য করতে পারেন। এটি আপনার কম্পিউটারে করা সমস্ত স্থানীয় পরিবর্তনগুলিকে ওভাররাইট করে দেবে it

আপনার আইডিইতে নিম্নলিখিত কমান্ডগুলি কার্যকর করুন:

গিট রিসেট - হার্ড

গিট টান

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

2) উভয় পরিবর্তন রাখা (স্থানীয় এবং রেপো থেকে)

আপনি যদি উভয় পরিবর্তন রাখতে চান (স্থানীয়ভাবে করা পরিবর্তনগুলি এবং সংরক্ষণাগারে উপস্থিত পরিবর্তনগুলি), আপনি নিজের পরিবর্তনগুলি যুক্ত করতে এবং প্রতিশ্রুতিবদ্ধ করতে পারেন। আপনি যখন টানবেন, স্পষ্টতই সংযুক্তির সংঘাত হবে। কোডের দুটি টুকরা তুলনা করতে এবং কোন পরিবর্তন রাখতে হবে এবং কোনটি অপসারণ করতে হবে তা নির্ধারণ করতে আপনি এখানে আপনার আইডিইতে (যেমন ডিফ্টল এবং মার্জেটুল) সরঞ্জামগুলি ব্যবহার করতে পারেন। এটি মধ্যম পথ; আপনি ম্যানুয়ালি এগুলি অপসারণ না করা পর্যন্ত কোনও পরিবর্তন হারাবে না।

গিট অ্যাড $ দি_ফাইলে_উন্ডার_অরর

গিট কমিট

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