আমি সম্প্রতি এই বিষয়ে ব্লগ করেছি :
কীভাবে আমরা এই বৈশিষ্ট্যটির শাখাটি আপডেট রাখি? নতুন প্রবাহের কমিটগুলি মার্জ করা সহজ, তবে আপনি একীভূত প্রতিশ্রুতি তৈরি করা এড়াতে চান, যেহেতু উজানের দিকে ধাক্কা দেওয়ার সময় এটি প্রশংসা করা হবে না: আপনি তখন কার্যকরভাবে প্রবাহের পরিবর্তনগুলিকে পুনরায় প্রতিশ্রুতিবদ্ধ করছেন এবং সেই প্রবাহের সমাহারগুলি একটি নতুন হ্যাশ পাবে ( যেমন তারা একটি নতুন পিতামাতাকে পেয়েছে)। এটি বিশেষত গুরুত্বপূর্ণ, কারণ এই মার্জ করা কমিটগুলি আপনার গিটহাব পুলের অনুরোধে প্রতিফলিত হবে যখন আপনি সেই আপডেটগুলি আপনার ব্যক্তিগত গিটহাব বৈশিষ্ট্য শাখায় ঠেলাবেন (এমনকি আপনি যদি পুলের অনুরোধ জারি করার পরে তা করেন তবেও।)
এজন্য আমাদের মার্জ করার পরিবর্তে রিবেস করা দরকার:
git co devel #devel is ansible's HEAD aka "master" branch
git pull --rebase upstream devel
git co user-non-unique
git rebase devel
রিবায়েস বিকল্প এবং গিটকে পুনর্নির্মাণ আদেশ উভয়ই আপনার গাছকে পরিষ্কার রাখবে, এবং সংযুক্তির কমিটিকে এড়িয়ে চলবে। তবে মনে রাখবেন যে এগুলি আপনার প্রথম প্রতিশ্রুতি (যা দিয়ে আপনি আপনার প্রথম টানার অনুরোধ জারি করেছেন) যা প্রত্যাবাসিত হচ্ছে, এবং এখন একটি নতুন কমিট হ্যাশ রয়েছে, যা এখনও আপনার দূরবর্তী গিথুব রেপো শাখায় থাকা মূল হ্যাশগুলির থেকে পৃথক ।
এখন, আপনার ব্যক্তিগত গিটহাব বৈশিষ্ট্য শাখায় সেগুলি আপডেট করে দেওয়া এখানে ব্যর্থ হবে, কারণ উভয় শাখাই পৃথক: স্থানীয় শাখা গাছ এবং দূরবর্তী শাখার গাছটি "সমন্বয়হীন", কারণ এই বিভিন্ন কমিট হ্যাশ রয়েছে। গিট প্রথমে আপনাকে বলবে git pull --rebase
, তারপরে আবার চাপ দিন, তবে এটি আপনার ইতিহাস পুনরায় লেখার সাথে সাথে এটি একটি দ্রুত অগ্রসর করার ধাক্কা হবে না। যে না!
এখানে সমস্যাটি হ'ল আপনি আবার আপনার প্রথম পরিবর্তিত কমিটগুলি আসল হিসাবে তৈরি করে আনবেন এবং সেগুলি আপনার স্থানীয় শাখার শীর্ষে মিশে যাবে। সিঙ্ক-এর বাইরে থাকা অবস্থায়, এই টানটি পরিষ্কারভাবে প্রয়োগ হয় না। আপনি একটি ভাঙ্গা ইতিহাস পাবেন যেখানে আপনার প্রতিশ্রুতি দু'বার প্রদর্শিত হবে। আপনি যখন এই সমস্ত কিছু আপনার গিটহাব বৈশিষ্ট্য শাখায় ঠেলাবেন তখন সেই পরিবর্তনগুলি আসল পুল অনুরোধে প্রতিফলিত হবে, যা খুব, খুব কুরুচিপূর্ণ হবে।
আফাইক, আসলে এর কোনও সম্পূর্ণ পরিষ্কার সমাধান নেই। আমি যে সর্বোত্তম সমাধানটি পেয়েছি তা হ'ল আপনার স্থানীয় শাখাকে আপনার গিটহাব শাখায় জোর করে চাপানো (আসলে একটি দ্রুত-অগ্রগতির আপডেট জোর করে):
গিট-পুশ অনুযায়ী (1):
Update the origin repository’s remote branch with local branch, allowing non-fast-forward updates. This can leave unreferenced commits dangling in the origin repository.
সুতরাং টানবেন না, জোর করে এভাবে চাপ দিন:
git push svg +user-non-unique
বা:
git push svg user-non-unique --force
এটি আপনার স্পষ্টতই আপনার স্থানীয় শাখার সমস্ত কিছু সহ স্পষ্টভাবে আপনার দূরবর্তী শাখাটি ওভাররাইট করবে। দূরবর্তী স্ট্রিমে থাকা কমিটগুলি (এবং ব্যর্থতার কারণ হয়েছিল) সেখানেই থাকবে, তবে ঝুঁকির কমিট হবে, যা শেষ পর্যন্ত গিট-জিসি (1) দ্বারা মুছে ফেলা হবে। কোন ব্যাপারই না.
যেমনটি আমি বলেছি, এটি এএএএফআইএস সবচেয়ে পরিষ্কার সমাধান। এর নেতিবাচক দিকটি হ'ল আপনার PR সেই নতুন কমিটের সাথে আপডেট হবে যা পরবর্তী তারিখটি পাবে এবং PR এর মন্তব্য ইতিহাসে সিঙ্কের বাইরে উপস্থিত হতে পারে। কোনও বড় সমস্যা নয়, তবে এটি সম্ভবত বিভ্রান্তিকর হতে পারে।