কোড পর্যালোচনার পরে একটি পুল অনুরোধ আপডেট করার জন্য পছন্দসই গিথুব ওয়ার্কফ্লো


341

আমি গিথুবের একটি ওপেন সোর্স প্রকল্পে একটি পরিবর্তন জমা দিয়েছি এবং মূল দলের সদস্যদের একজনের কাছ থেকে কোড পর্যালোচনা মন্তব্য পেয়েছি।

আমি পর্যালোচনা মন্তব্যগুলি আমলে নিয়ে কোডটি আপডেট করতে এবং পুনরায় জমা দিতে চাই। এটি করার জন্য সর্বোত্তম কর্মপ্রবাহ কি? গিট / গিথুব সম্পর্কে আমার সীমাবদ্ধ জ্ঞান থেকে, আমি নিম্নলিখিতগুলির মধ্যে যে কোনওটি করতে পারি:

  1. কোডটি নতুন প্রতিশ্রুতি হিসাবে আপডেট করুন এবং আমার টানার অনুরোধে প্রাথমিক এবং আপডেট উভয় প্রতিশ্রুতি যুক্ত করুন।

  2. কোনওভাবে (??) আমার সংগ্রহশালা থেকে পুরানো প্রতিশ্রুতিটি রোলব্যাক করুন এবং সমস্ত কিছু সমন্বিত একক নতুন প্রতিশ্রুতি তৈরি করুন, তারপরে একটি টানার অনুরোধ উত্থাপন করবেন?

  3. git commitএকটি সংশোধন বৈশিষ্ট্য আছে, কিন্তু আমি শুনেছি যে আপনার স্থানীয় সংগ্রহস্থলের বাইরে প্রতিশ্রুতিবদ্ধতার পরে আপনি এটি ব্যবহার করবেন না? এই ক্ষেত্রে আমি আমার স্থানীয় পিসিতে পরিবর্তন করেছি এবং আমার প্রকল্পের গিথুব শাখায় ঠেলাচ্ছি। 'সংশোধন' ব্যবহার করা কি ঠিক হবে?

  4. অন্যকিছু?

দেখে মনে হচ্ছে অপশন 2/3 ভাল লাগবে, যেহেতু ওপেন সোর্স প্রকল্পটিতে তাদের ইতিহাসে কেবল একটি প্রতিশ্রুতি থাকবে যা সমস্ত কিছুই বাস্তবায়িত করবে, তবে আমি কীভাবে এটি করব তা নিশ্চিত নই।

দ্রষ্টব্য: আমি জানি না যে এটির উত্তরটি প্রভাবিত করে বা না, তবে আমি একটি পৃথক শাখায় পরিবর্তন করিনি, আমি সবেমাত্র মাস্টারের শীর্ষে একটি প্রতিশ্রুতি করেছি

উত্তর:


219

টান অনুরোধে ব্যবহৃত শাখায় কেবল একটি নতুন প্রতিশ্রুতি যুক্ত করুন এবং ব্রাঞ্চটি গিটহাবের দিকে ঠেলাবেন। অতিরিক্ত প্রতিশ্রুতি সহ টান অনুরোধটি স্বয়ংক্রিয়ভাবে আপডেট হবে।

# 2 এবং # 3 অপ্রয়োজনীয়। লোকেরা যদি কেবল দেখতে পায় যে যেখানে আপনার শাখাটি মার্জ করা হয়েছে (এবং অতিরিক্ত প্রতিশ্রুতিগুলি নয়) তবে তারা git log --first-parentকেবল লগের মধ্যে মার্জ কমিটটি দেখতে ব্যবহার করতে পারেন ।


7
masterএকটি শাখা খুব, তাই টেকনিক্যালি এটা কোন ব্যাপার না হয় :)
অকর্মা

10
@ অরিওনএডওয়ার্ডস - পোকের উল্লিখিত হিসাবে, মাস্টার একটি শাখা, সুতরাং, এটি আপডেট করা তার উপর ভিত্তি করে যে কোনও পুল অনুরোধগুলিও আপডেট হবে। (এই কিছু আপনার জন্য একটি টান অনুরোধ জমা করার পরিকল্পনা জন্য পৃথক শাখা ব্যবহার করার জন্য একটি ভাল কারণ নেই।)
অ্যাম্বার

18
যেহেতু কোডটি এখনও পর্যালোচনায় রয়েছে , কেবল অতিরিক্ত বিশৃঙ্খলা
প্রকাশের

4
@ এমগলস এটি পছন্দসই বিষয়।
আম্বর

4
আমি স্রেফ লিখেছি ব্লগ পোস্টে ব্যাখ্যা করা কারণে এই উত্তরটি পছন্দ করি না ; আমি বিশ্বাস করি অন্য উত্তরটি আরও ভাল।
অ্যাডাম স্পায়ার্স

224

একটি টান অনুরোধ আপডেট করতে

একটি টানার অনুরোধটি আপডেট করতে (পয়েন্ট # 1), আপনাকে কেবল একই কাজটি করতে হবে টান অনুরোধটি একই শাখায় চেকআউট করে আবার এটিতে চাপ দিন:

cd /my/fork
git checkout master
...
git commit -va -m "Correcting for PR comments"
git push

Alচ্ছিক - সাফল্য প্রতিশ্রুতিবদ্ধ ইতিহাস

আপনাকে আপনার প্রতিশ্রুতিগুলি একসাথে স্কোয়াশ করতে বলা হতে পারে যাতে সংগ্রহস্থলটির ইতিহাস পরিষ্কার থাকে, বা আপনি নিজের মধ্যস্থতার কমিটিগুলি মুছে ফেলতে চান যা আপনার বারার অনুরোধে "বার্তা" থেকে বিভ্রান্ত হয় (পয়েন্ট # 2)। উদাহরণস্বরূপ, যদি আপনার প্রতিশ্রুতিবদ্ধ ইতিহাসটি এরকম দেখাচ্ছে:

$ git remote add parent git@github.com:other-user/project.git
$ git fetch parent
$ git log --oneline parent/master..master
e4e32b8 add test case as per PR comments
eccaa56 code standard fixes as per PR comments
fb30112 correct typos and fatal error
58ae094 fixing problem

জিনিসগুলি একসাথে স্কোয়াশ করা ভাল ধারণা যাতে তারা একক প্রতিশ্রুতি হিসাবে উপস্থিত হয়:

$ git rebase -i parent/master 

এটি আপনাকে কীভাবে আপনার টানার অনুরোধের ইতিহাসটি আবার লিখতে হবে তা চয়ন করতে অনুরোধ করবে, নিম্নলিখিতটি আপনার সম্পাদকের মধ্যে থাকবে:

pick 58ae094 fixing actual problem
pick fb30112 correct typos
pick eccaa56 code standard fixes
pick e4e32b8 add test case as per PR comments

যে কোনও প্রতিশ্রুতির জন্য আপনি আগের প্রতিশ্রুতিতে অংশ নিতে চান - স্কোয়াশে পরিবর্তন করুন:

pick 58ae094 fixing actual problem
squash fb30112 correct typos
squash eccaa56 code standard fixes
squash e4e32b8 add test case as per PR comments

এবং আপনার সম্পাদক বন্ধ করুন। গিট তারপরে ইতিহাসটি পুনর্লিখন করবে এবং সম্মিলিত প্রতিশ্রুতিবদ্ধতার জন্য একটি প্রতিশ্রুতি বার্তা দেওয়ার জন্য আপনাকে অনুরোধ করবে। সেই অনুযায়ী সংশোধন করুন এবং আপনার প্রতিশ্রুতিবদ্ধ ইতিহাস এখন সংক্ষিপ্ত হবে:

$ git log --oneline parent/master..master
9de3202 fixing actual problem

আপনার কাঁটাচামচ এটি চাপুন:

$ git push -f
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (11/11), 978 bytes, done.
Total 11 (delta 9), reused 7 (delta 6)
To git@github.com:me/my-fork.git
   f1238d0..9de3202  HEAD -> master

এবং আপনার টানার অনুরোধটিতে একক প্রতিশ্রুতি থাকবে, পূর্বে কয়েকটি পরিবর্তনগুলিতে বিভক্ত সমস্ত পরিবর্তনকে একত্রিত করে।

সর্বজনীন ভাণ্ডারে ইতিহাস পরিবর্তন করা একটি খারাপ জিনিস

ইতিহাসের পুনর্লিখন এবং git push -fএমন একটি শাখায় ব্যবহার করা যা সম্ভবত অন্য কেউ ইতিমধ্যে ক্লোন করেছেন এটি একটি খারাপ জিনিস - এটি সংগ্রহস্থলের ইতিহাস এবং চেকআউটের ইতিহাসকে বিচ্ছিন্ন করার কারণ করে।

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

শাখায় একটি নোট

উপরের দিকে আমি masterআপনার কাঁটাচামচের শাখা থেকে আগত অনুরোধটি দেখাব, এটির সাথে অগত্যা কোনও ভুল নেই তবে এটি নির্দিষ্ট সীমাবদ্ধতা তৈরি করে যেমন, এটি যদি আপনার স্ট্যান্ডার্ড কৌশল হয় তবে কেবল প্রতি ভান্ডার প্রতি এক জন পিআর খুলতে সক্ষম হবেন । আপনার প্রস্তাবিত প্রতিটি স্বতন্ত্র পরিবর্তনের জন্য একটি শাখা তৈরি করা যদিও এটি একটি ভাল ধারণা:

$ git branch feature/new-widgets
$ git checkout feature/new-widgets
...
Hack hack hack
...
$ git push
# Now create PR from feature/new-widgets

28
অতিরিক্ত ফিক্সআপ কমিটগুলি চাপ দেওয়ার চেয়ে কমিটস কীভাবে পরিষ্কার করবেন তা উল্লেখ করার জন্য +1।
mgalgs

3
আমি বাছাই / স্কোয়াশিংয়ে কিছু সমস্যার মধ্যে পড়েছিলাম এবং এই উত্তরটি আমাকে সাহায্য করেছে। আরও খেয়াল হয়েছে যে আমি করার পরে গিথুব পূর্ববর্তী কথোপকথনটি সরিয়ে ফেলেছিল git push -f। অনেক মন্তব্য ছিল না, তবে এটি এমনটি যা আমি প্রত্যাশা করি না।
हितেশ

5
কেবল স্পষ্ট করে বলতে গেলে, একটি পরিষ্কার ইতিহাসের সাথে প্রত্যাবর্তনের সময়, আপনি প্রকৃতপক্ষে আপনার প্রকাশ্য প্রতিশ্রুতিগুলি পরিবর্তন করছেন, আপনি কেবল ধরে নিচ্ছেন যে এটি একটি কাঁটাচামচ কারণ কেউই পাত্তা দেয় না।
ব্রিটা_

2
ফলোআপ: আপনার PR এর সময় মাস্টার পরিবর্তিত হলে সেরা অনুশীলন?
কেভিন সটল

1
বিবেচনা করুন যে পর্যালোচনা করা হয়েছে এমন টান অনুরোধগুলিতে পুনর্লিখনের ইতিহাস (বা সাধারণভাবে কোড সম্পর্কে / মন্তব্য করার ক্ষেত্রে) বিভ্রান্তির কারণ হতে পারে, যেহেতু ইতিহাস আর মন্তব্যগুলির সাথে মিলছে না match কোনও সহজ সমাধান নেই: কেউ পিআর বন্ধ করে একটি নতুনটিতে উল্লেখ করবে (ইতিহাস পুনরায় লেখার জন্য নয়); আমার ধারণাটি কেবলমাত্র সাম্প্রতিক কমিট এসএইচএর ব্যাকআপ করা যা পুনরায় সেট / পুনর্লিখন করা হচ্ছে এবং জোর করে ধাক্কা দেওয়ার পরে PR তে একটি মন্তব্যে উল্লেখ করুন। আইএফ যদি prune সেই বিচ্ছিন্ন প্রতিশ্রুতি সরিয়ে না নেয় তবে এর ইতিহাস এখনও পিআর এর মন্তব্যের সাথে মিলবে।
কামাফেদার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.