চেকআউট --ours
এবং সমস্ত ফাইলের জন্য দ্বন্দ্ব সমাধানের কোনও উপায় আছে --theirs
? আমি জানি যে আপনি পৃথক ফাইলের জন্য এটি করতে পারেন তবে এটির জন্য কোনও উপায় খুঁজে পাচ্ছেন না।
চেকআউট --ours
এবং সমস্ত ফাইলের জন্য দ্বন্দ্ব সমাধানের কোনও উপায় আছে --theirs
? আমি জানি যে আপনি পৃথক ফাইলের জন্য এটি করতে পারেন তবে এটির জন্য কোনও উপায় খুঁজে পাচ্ছেন না।
উত্তর:
ওয়ার্কিং ডিরেক্টরি থেকে গ্রেপ করুন এবং এক্সগার্স কমান্ডের মাধ্যমে আউটপুট প্রেরণ করুন:
grep -lr '<<<<<<<' . | xargs git checkout --ours
অথবা
grep -lr '<<<<<<<' . | xargs git checkout --theirs
এটি কীভাবে কাজ করে: বিরোধী মার্কার্সের (স্ট্রিং '<<<<<<<') সন্ধানের জন্য grep
বর্তমান ডিরেক্টরি (দ্য .
) এবং উপ-ডিরেক্টরিগুলি পুনরাবৃত্তভাবে ( -r
পতাকা) প্রতিটি ফাইলের মধ্যে অনুসন্ধান করবে )
-l
বা --files-with-matches
পতাকা আউটপুট শুধুমাত্র ফাইলের নাম যেখানে স্ট্রিং পাওয়া যায়নি, grep ঘটায়। স্ক্যান করা প্রথম ম্যাচের পরে বন্ধ হয়ে যায়, সুতরাং প্রতিটি ম্যাচ করা ফাইল কেবল একবার আউটপুট হয়।
মিলে যাওয়া ফাইলের নামগুলি তারপরে xargs এ পাইপ করা হয় , এমন একটি ইউটিলিটি যা পাইপযুক্ত ইনপুট স্ট্রিমটিকে পৃথক যুক্তিগুলির জন্য আলাদা করে দেয় বাgit checkout --ours
--theirs
আরও এই লিঙ্কে ।
যেহেতু কমান্ড লাইনে প্রতিবার এটি টাইপ করা খুব অসুবিধে হবে, আপনি যদি নিজেকে এটি অনেক বেশি ব্যবহার করে দেখেন, তবে আপনার পছন্দসই শেলের জন্য একটি উলাম তৈরি করা খারাপ ধারণা নাও হতে পারে : বাশ স্বাভাবিক ।
এই পদ্ধতিটি কমপক্ষে গিট সংস্করণ 2.4.x এর মাধ্যমে কাজ করা উচিত
git diff --name-only --diff-filter=U
।
git status | grep both | awk '{print $3}' | xargs git checkout --[theirs|ours]
। আপনার যদি কোনও বড় প্রকল্প থাকে তবে গ্রেপিংয়ের চেয়ে দ্রুত।
CONFLICT (rename/rename): Rename "a.txt"->"c.txt" in branch "HEAD" rename "a.txt"->"b.txt" in "master"
git status --porcelain | egrep '^UU' | cut -d ' ' -f 2 |xargs git checkout --[theirs|ours]
।
আপনি -Xours
বা -Xtheirs
সঙ্গে git merge
হিসাবে ভাল। তাই:
git reset --hard HEAD
)git merge -Xours
বা git merge -Xtheirs
)অস্বীকৃতি: অবশ্যই আপনি কেবল একটি বিকল্প বেছে নিতে পারেন, হয় -Xours
বা -Xtheirs
, অবশ্যই অবশ্যই কৌশল দ্বারা ফাইলের মধ্যে যাওয়া উচিত strategy
এর জন্য কোনও উপায় আছে কিনা checkout
তা আমি জানি না, তবে আমি সত্যই এটি মারাত্মকভাবে দরকারী বলে মনে করি না: চেকআউট কমান্ডের সাহায্যে কৌশল নির্বাচন করা দরকারী যদি আপনি বিভিন্ন ফাইলের জন্য বিভিন্ন সমাধান চান তবে অন্যথায় কেবল মার্জ কৌশল কৌশলটি অনুসরণ করুন।
--theirs
বা- --ours
বিকল্প নেই । একটি পদ্ধতির হবে git merge -s recursive -Xtheirs BRANCH
।
--theirs
এবং --ours
না গিট সঙ্গে উপলব্ধ 2.2.0
। হয় আমার উত্তরটি সুনির্দিষ্ট ছিল না বা তারা পুরানো গিট সংস্করণে উপলব্ধ ছিল (এটি উত্তর আইটি যুগে বেশ পুরানো)। সঠিক পদ্ধতির সাথে হয় -X
। আমি সে অনুযায়ী আপডেট করছি
git checkout --[ours/theirs] .
যতক্ষণ আপনি সমস্ত দ্বন্দ্বের মূলে রয়েছেন ততক্ষণ আপনি যা চান তা করবে। আমাদের / তাদের কেবলমাত্র নিমজ্জিত ফাইলগুলিকেই প্রভাবিত করে যাতে আপনার বিশেষভাবে গ্রেপ / সন্ধান / ইত্যাদি দ্বন্দ্ব তৈরি করা উচিত নয়।
error: path 'foo/bar/blah' does not have our version
।
git diff --name-only --diff-filter=U | xargs git checkout --theirs
কাজটি মনে হচ্ছে। মনে রাখবেন এটি অর্জনের জন্য আপনাকে গিট রেপোর মূল ডিরেক্টরিতে সিডি করতে হবে।
যদি অন্য কেউ কেবল একটি শাখার থেকে অন্য শাখায় (ওস্তাদ বলুন) সমস্ত কিছু ওভাররাইট করে দেখছে, তবে এর থেকে সহজ উপায় আছে:
git merge origin/master --strategy=ours
ধন্যবাদ https://stackoverflow.com/a/1295232/560114
বা অন্য পথে, দেখুন "গিট মার্জ -স আওয়ারস" এর একটি "তাদের" সংস্করণ রয়েছে?
git checkout --ours -- .
কাজ করে?.
মানে বর্তমান ডিরেক্টরী, যখন কাজ ডিরেক্টরি রুট থেকে আবেদন করেছিলেন, তাই এটি মূলত সমগ্র পরিশ্রমী ডিরেক্টরি মানে।--ours
যদিও এটি পতাকাটির সাথে কাজ করবে কিনা তা নিশ্চিত নয় এবং এটি কীভাবে মুছে ফেলা বা নাম পরিবর্তিত ফাইল বিবাদগুলি পরিচালনা করবে তা আমি নিশ্চিত নই।