একবারে বেশ কয়েকটি বাগে কাজ করা কি একেবারে প্রয়োজনীয়? এবং "একবারে," আমার অর্থ "একই সাথে একাধিক বাগের জন্য ফাইল সম্পাদনা করা" " কারণ আপনার যদি একেবারে এটির প্রয়োজন না হয়, আমি আপনার পরিবেশে একবারে কেবল একটি বাগে কাজ করব। এইভাবে আপনি স্থানীয় শাখা এবং পুনর্বাসনা ব্যবহার করতে পারেন, যা আমি জটিল স্ট্যাশ / স্টেজ পরিচালনা করার চেয়ে অনেক সহজ মনে করি।
ধরা যাক মাস্টার কমিট বি তে আছেন এখন বাগ # 1 এ কাজ করুন।
git checkout -b bug1
এখন আপনি শাখা বাগ 1 এ আছেন। কিছু পরিবর্তন করুন, প্রতিশ্রুতি দিন, কোড পর্যালোচনার জন্য অপেক্ষা করুন। এটি স্থানীয়, সুতরাং আপনি অন্য কাউকে প্রভাবিত করছেন না এবং গিট ডিফ্স থেকে কোনও প্যাচ তৈরি করা যথেষ্ট সহজ হওয়া উচিত।
A-B < master
\
C < bug1
এখন আপনি বাগ 2 নিয়ে কাজ করছেন। সঙ্গে মাস্টার ফিরে যান git checkout master
। একটি নতুন শাখা তৈরি করুন git checkout -b bug2
,। পরিবর্তন করুন, প্রতিশ্রুতি দিন, কোড পর্যালোচনার জন্য অপেক্ষা করুন।
D < bug2
/
A-B < master
\
C < bug1
আসুন আমরা ভেবে দেখি যে আপনি যখন পর্যালোচনার অপেক্ষায় রয়েছেন তখন অন্য কেউ মাস্টারকে ই-এফ করুন করে।
D < bug2
/
A-B-E-F < master
\
C < bug1
আপনার কোড অনুমোদিত হয়ে গেলে, আপনি নিম্নলিখিত পদক্ষেপগুলির সাথে মাস্টারকে এটি পুনরায় চালু করতে পারেন:
git checkout bug1
git rebase master
git checkout master
git merge bug1
এর ফলে নিম্নলিখিত ফলাফলগুলি হবে:
D < bug2
/
A-B-E-F-C' < master, bug1
তারপরে আপনি আপনার স্থানীয় বাগ 1 শাখাটি টিপতে পারেন, মুছে ফেলতে পারেন এবং আপনি চলে যাবেন। আপনার কর্মক্ষেত্রে একবারে একটি বাগ, তবে স্থানীয় শাখা ব্যবহার করে আপনার সংগ্রহশালা একাধিক বাগ পরিচালনা করতে পারে। এবং এটি একটি জটিল মঞ্চ / স্ট্যাশ নাচ এড়ায়।
মন্তব্যে সিটিটের প্রশ্নের উত্তর:
ঠিক আছে, আপনি প্রতিটি বাগের জন্য স্ট্যাশিংয়ে ফিরে যেতে পারেন, এবং একবারে কেবল একটি বাগ দিয়ে কাজ করতে পারেন। অন্ততপক্ষে যা আপনাকে মঞ্চের সমস্যাটি সংরক্ষণ করে। তবে এটি চেষ্টা করেও আমি ব্যক্তিগতভাবে এটি ঝামেলাজনক মনে করি। গিট লগ গ্রাফে স্ট্যাশগুলি কিছুটা অগোছালো। এবং আরও গুরুত্বপূর্ণ, আপনি যদি কিছু আঁকেন তবে আপনি ফিরে যেতে পারবেন না। আপনার যদি কোনও নোংরা ওয়ার্কিং ডিরেক্টরি থাকে এবং আপনি কোনও স্ট্যাশ পপ করেন, আপনি সেই পপটিকে "পূর্বাবস্থাপন" করতে পারবেন না। ইতিমধ্যে বিদ্যমান কমিটগুলি স্ক্রু করা অনেক কঠিন।
তাই git rebase -i
।
আপনি যখন একটি শাখাকে অন্যটিতে রিবেস করেন, আপনি এটি ইন্টারেক্টিভভাবে করতে পারেন (-i পতাকা)। আপনি যখন এটি করেন, প্রতিটি প্রতিশ্রুতি দিয়ে আপনি কী করতে চান তা বাছাই করার বিকল্প আপনার কাছে রয়েছে। প্রো গিট একটি দুর্দান্ত বই যা এইচটিএমএল ফর্ম্যাটেও অনলাইনে রয়েছে এবং এটি রিবেসিং এবং স্কোয়াশিংয়ের উপর একটি দুর্দান্ত বিভাগ রয়েছে:
http://git-scm.com/book/ch6-4.html
সুবিধার্থে আমি তাদের উদাহরণ ভারব্যাটিম চুরি করব। আপনার নীচের প্রতিশ্রুতিবদ্ধ ইতিহাস রয়েছে বলে ভান করুন এবং আপনি মাস্টারটির উপরে আবার স্কোয়াশ বাগ 1 পুনরায় চালু করতে চান:
F < bug2
/
A-B-G-H < master
\
C-D-E < bug1
আপনি টাইপ করার সময় আপনি কী দেখতে পাবেন তা এখানে git rebase -i master bug1
pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added cat-file
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
একটি শাখার সমস্ত কমিটকে একক প্রতিশ্রুতি হিসাবে স্কোয়াশ করতে, প্রথম প্রতিশ্রুতিটিকে "বাছাই" হিসাবে রাখুন এবং পরবর্তী সমস্ত "পিক" এন্ট্রিগুলিকে "স্কোয়াশ" বা কেবল "এস" দিয়ে প্রতিস্থাপন করুন। আপনিও প্রতিশ্রুতি বার্তা পরিবর্তন করার সুযোগ পাবেন।
pick f7f3f6d changed my name a bit
s 310154e updated README formatting and added blame
s a5f4a0d added cat-file
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
হ্যাঁ, স্কোয়াশিং কিছুটা ব্যথা হয় তবে আমি স্ট্যাশগুলির ভারী ব্যবহারের জন্য এটি সুপারিশ করব।