গিটে একীভূত করার উপায় কি আবার আছে?


17

তাই আমি খুব বড় ভুল করেছি। আমি একটি প্রতিশ্রুতিবদ্ধ করেছি, টানাছি, একীভূত করেছি (তবে কোডটি বিশৃঙ্খলা করতে গিয়ে এমনভাবে গণ্ডগোল করেছেন) এবং পরে ধাক্কা দিয়েছি। আমি সেই মার্জটি আবার করতে এবং কোডটি সঠিকভাবে পেতে চাই। এই কাজ করতে কোন উপায় আছে কি?

আমি বিটবাকেট ব্যবহার করি

git 

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

উত্তর:


13

এটি করার জন্য "আশীর্বাদী" উপায় কিনা তা নিশ্চিত নই, তবে "জোর করে চাপ" বা এর মতো স্থূল কিছু না করে একই সমস্যাটি সমাধান করার জন্য আমি এখানে যা করেছি।

আসুন ধরে নেওয়া যাক আপনার ইতিহাসটি এরকম কিছু দেখাচ্ছে (এবং এম হ'ল ফ্লাবড মার্জ):

-A--B--C--M (master points here)
  \      /
   D----E

git checkout -b merge_fix <commit ID E>কোনও ভুল করার আগে রানিং একটি শাখা তৈরি করে:

-A--B--C--M (master points here)
  \      /
   D----E (HEAD and merge_fix point here)

এখন, আমাদের নতুন শাখায় মার্জটি আবার করা যাক। আমরা কেবল মার্জ করতে পারি না master, সুতরাং আমাদের খারাপ সংশ্লেষের আগে আমাদের ম্যানুয়ালি প্রতিশ্রুতিটি বেছে নিতে হবে: git merge <commit ID C>আপনি গতবারের মতো একই ভুল করবেন না!

-A--B--C--M (master points here)
  \      X
   D----E-G (HEAD and merge_fix point here)

এই প্রতিশ্রুতিটি Gদেখতে দেখতে দেখতে দুর্দান্ত, এখন আমরা masterশাখার শীর্ষের সাথে সিঙ্ক আপ করতে চাই । এই কমান্ডটি গিটকে মাস্টারটিতে করা পরিবর্তনগুলি উপেক্ষা করতে এবং আমাদের পরিবর্তনগুলিকে একীভূত হওয়ার ফলাফল হিসাবে বাধ্য করতে বলছে:git merge -s ours master

-A--B--C--M (master points here)
  \      X  \
   D----E-G--H (HEAD and merge_fix point here)

শেষ অবধি, (আবারও ধরে নিলাম যে প্রতিশ্রুতিটি Hভাল দেখাচ্ছে) আমরা masterআমাদের স্থির মার্জটিকে অন্তর্ভুক্ত করার জন্য দ্রুত-এগিয়ে যেতে চাই :

git checkout master
git merge merge_fix

এটি সত্যিই কেবল masterশাখার পয়েন্টারটিতে স্থানান্তরিত করে H, তবে আমি আমার ASCII শিল্পকে কিছুটা পরিষ্কার করার সুযোগটি নেব:

-A--B--C--M--H (HEAD, master, and merge_fix all point here)
  \      X  /
   D----E--G

এবং সেখানে আপনি এটা আছে! আপনি কোনও ইতিহাস অবৈধ না করে সফলভাবে মার্জটি পুনরায় সম্পন্ন করেছেন!


6

আপনি এটি করতে পারেন, এটির মতো:

  1. আপনার মার্জ হওয়ার আগে কমিটিকে রিসেট করুন।
  2. আবার সংযুক্তি সম্পাদন করুন
  3. জোর ধাক্কা

এটাই:

git reset --hard SHA1
git merge branchname
git commit
git push --force remotename branchname

কেবল মনে রাখবেন যে git push --forceরিমোট শাখায় আপনার যা কিছু ছিল তা আবার লিখে ফেলবেন এবং সেই শাখাটি ব্যবহার করে এমন অন্যান্য লোকেরা এটি দ্বারা প্রভাবিতও হতে পারে। (সাধারণত আপনার এটি করা উচিত নয়))


6
কেবল মনে রাখবেন করা git push --forceনিরাপদ নয়
জেপলক

1

git merge --abort এবং তারপরে আপনি আবার মার্জ করতে পারেন


আমি সবেমাত্র একটি "গর্ভপাতের কোনও

3
এটি কেবল তখনই করা যেতে পারে যখন মার্জ সংঘাত রয়েছে।
চঞ্চল 118

মাইনাস কেন? এটি আমাকে সাহায্য করেছে।
সোদেব

কারণ প্রশ্ন আপনি যখন ইতোমধ্যে মার্জ শেষ করেছেন (ভুলভাবে) এবং ঠেলেছেন।
রবিন সবুজ

-1

এই আশা আপনার জন্য দরকারী পরীক্ষা করুন

https://www.kernel.org/pub/software/scm/git/docs/howto/revert-branch-rebase.html

যদিও এটি ওপি প্রশ্নের উত্তর দিতে পারে, কেবলমাত্র লিঙ্কের উত্তরগুলি এসও তে ভালভাবে গৃহীত হয় না। তবে আপনি লিঙ্ক থেকে আপনার উত্তর সর্বাধিক প্রাসঙ্গিক উদ্ধৃতি উদ্ধৃত করতে পারেন।

যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত পৃষ্ঠাগুলি পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তরগুলি অবৈধ হতে পারে।
প্রণব 웃
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.