গিতে রিমোট শাখা ছাড়ানো


135

আমি একটি দূরবর্তী এসভিএন সংগ্রহস্থলকে মিরর করার জন্য একটি মধ্যবর্তী গিট সংগ্রহস্থল ব্যবহার করছি, যেখান থেকে লোকেরা ক্লোন করতে এবং কাজ করতে পারে। মধ্যবর্তী সংগ্রহস্থলটির মাস্টার শাখাটি উজানের এসভিএন থেকে রাতের বেলা পুনর্বাসিত হয়েছে এবং আমরা বৈশিষ্ট্য শাখায় কাজ করছি। উদাহরণ স্বরূপ:

remote:
  master

local:
  master
  feature

আমি আমার বৈশিষ্ট্য শাখাটিকে সফলভাবে রিমোটে ফিরে যেতে পারি এবং আমার প্রত্যাশাটি শেষ করতে পারে:

remote:
  master
  feature

local:
  master
  feature

আমি তখন রিমোটটি ট্র্যাক করতে শাখাটি পুনরায় সেটআপ করব:

remote:
  master
  feature

local:
  master
  feature -> origin/feature

এবং সব ঠিক আছে। আমি এখান থেকে যা করতে চাই তা হ'ল রিমোটের মাস্টার ব্রাঞ্চে বৈশিষ্ট্য শাখাটি পুনরায় চালু করা, তবে আমি আমার স্থানীয় মেশিন থেকে এটি করতে চাই। আমি করতে সক্ষম হতে চাই:

git checkout master
git pull
git checkout feature
git rebase master
git push origin feature

রিমোট বৈশিষ্ট্য শাখাকে রিমোট মাস্টারের সাথে আপ-টু-ডেট রাখার জন্য। তবে এই পদ্ধতির কারণে গিট অভিযোগ করতে পারে:

To <remote>
 ! [rejected]        feature -> feature (non-fast-forward)
error: failed to push some refs to '<remote>'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

git pullকৌতুকটি করে তবে এমন একীভূত প্রতিশ্রুতি দেয় যা আমি এড়াতে চাই। আমি উদ্বিগ্ন যে বার্তাটির feature -> featureপরিবর্তে বলা হয়েছে feature -> origin/featureতবে এটি কেবল উপস্থাপনের জিনিস হতে পারে।

আমি কি কিছু মিস করছি, বা পুরোপুরি ভুল উপায়ে এ নিয়ে যাচ্ছি? রিমোট সার্ভারে রিবেসটি করা এড়ানো গুরুত্বপূর্ণ নয়, তবে এটি রিবেস থেকে যে কোনও মার্জ সংঘাতকে সংশোধন করা আরও শক্ত করে তোলে।


আমারও একই সমস্যা ছিল। আমি একটি শাখা রিবেস মডেল ( এই জাতীয় ) শুরু করতে চেয়েছিলাম । তারপরে আমি লক্ষ্য করেছি যে আমি একটি ভুল করেছি: আপনি যদি পুনরায় চালু করতে চান (তবে মাস্টারটির উপরে রিবেস করার আগে আপনার পরিবর্তনগুলি দূরবর্তী বৈশিষ্ট্যে ঠেকানো উচিত নয়) সুতরাং আপনি আপনার বৈশিষ্ট্যটিতে কিছু কোড দেন commit এবং এখন আপনি এটিকে আপনার দূরবর্তী বৈশিষ্ট্যটিতে ঠেলাতে চান। আপনি এটি করার উপভোগ করুন: - আপনার প্রয়োজনে আপনার মাস্টারকে আনতে এবং টানতে হবে। -আপনার বৈশিষ্ট্যটিতে না থাকলে মাস্টারটিতে কিছু পরিবর্তন হয়েছে যদি আপনার মাস্টারকে পুনর্বাসনা করা উচিত। এখন আপনি বৈশিষ্ট্যটি ধাক্কা দিতে পারেন এবং কোনও সমস্যা হবে না।
মার্কাস

উত্তর:


185

বৈশিষ্ট্যটি কোনও ব্যক্তি ব্যবহার করেছেন বা অন্যরা এটির কাজ বন্ধ করে দিচ্ছে কিনা তা নেমে আসে।

আপনি যদি পুনরায় চাপের পরে চাপটি চাপান তবে তা কেবল আপনি:

git push origin feature -f

তবে, অন্যরা যদি এতে কাজ করে থাকে তবে আপনার মার্জ করা উচিত এবং মাস্টারকে ছাড়িয়ে নেওয়া উচিত নয়।

git merge master
git push origin feature

এটি নিশ্চিত করবে যে আপনি যাদের সাথে সহযোগিতা করছেন তাদের সাথে আপনার একটি সাধারণ ইতিহাস রয়েছে।

ভিন্ন স্তরে, আপনার ব্যাক-মার্জগুলি করা উচিত নয়। আপনি যা করছেন তা হ'ল বৈশিষ্ট্যটির সাথে সম্পর্কিত নয় এমন অন্যান্য কমিটগুলির সাথে আপনার বৈশিষ্ট্য শাখার ইতিহাসকে কলুষিত করছে, সেই শাখার সাথে পরবর্তী কাজকে আরও কঠিন করে তুলবে - ছাড় দেওয়া বা না করা।

বৈশিষ্ট্য অনুসারে এটি শাখার বিষয়টিতে এটি আমার নিবন্ধ ।

আশাকরি এটা সাহায্য করবে.


29
+1 এর জন্য if others are working on it, you should merge and not rebase off of master, রিবেস আরও ভাল কেবল ব্যক্তিগত শাখায় ব্যবহার করা যেতে পারে।
হেন্দ্র উজিয়া

6
গিট পুশ অরিজিন বৈশিষ্ট্যটির বিকল্প - যদি আপনি আপনার দূরবর্তী বৈশিষ্ট্যটি আবার মুছে ফেলা বৈশিষ্ট্যটি আবারও মুছে ফেলতে পারেন
মার্কাস

2
আপনার শাখায় মাস্টারকে মার্জ করলে মার্জ কমিট তৈরি হবে এবং আপনার পরিবর্তনগুলি ধাক্কা দেওয়ার পরে মাস্টার থেকে অন্য কোনও উন্মুক্ত বৈশিষ্ট্য শাখার সাথে দ্বন্দ্ব সৃষ্টি করবে।
স্টিভেন

+1 এর জন্য git push origin feature -f। কিছু নির্দিষ্ট প্রসঙ্গে দূরবর্তী শাখাগুলি সহ একটি রিবেস সম্পাদন করা প্রয়োজন হতে পারে। কর্কস জেনে যাচ্ছে আপনি কী করছেন। এবং আমাদের এটি নেওয়া উচিত যে আপনি দূরবর্তী রেপোতে কমিটগুলি মুছে ফেলতে পারেন।
এনগাগ্রা

33

আপনি এই বিষয়টিকে সামনে নিয়ে এসেছেন।

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

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

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


খারাপ ভাষার জন্য বঞ্চিত
শক্তি

1
আমার ভাষা আপডেট।
রালফিথিনেঞ্জ

5

আপনি নতুনটির featureউপরে প্রত্যাবর্তন করার কারণে masterআপনার স্থানীয় featureআর কোনও দ্রুত অগ্রসর origin/featureনয়। সুতরাং, আমি মনে করি, দ্রুত-ফরোয়ার্ড চেকটি করার দ্বারা ওভাররাইড করা এক্ষেত্রে পুরোপুরি ঠিক git push origin +feature। আপনি আপনার কনফিগারেশনে এটি নির্দিষ্ট করতে পারেন

git config remote.origin.push +refs/heads/feature:refs/heads/feature

অন্যান্য লোকেরা যদি উপরে কাজ করে তবে origin/featureতারা এই জোর করে আপডেট দ্বারা বিরক্ত হবে। আপনি এড়াতে পারবেন না পরিবর্তে নতুন masterমধ্যে মার্জ করে feature। ফলাফল প্রকৃতপক্ষে দ্রুতগামী হবে।


1

--forceবিকল্পটি ব্যবহার করে আপনি চেকটি অক্ষম করতে পারেন (আপনি যদি সত্যিই নিশ্চিত হন যে আপনি কী করছেন তা) git push


15
সমস্যাটি হচ্ছে, আমি নিশ্চিত না যে আমি আসলে কী জানি আমি কী করছি :)
কেএফবি

@ আর_: দয়া করে আমার উত্তরটি পড়ুন। এটি আপনি কী করছেন তা বোঝার ক্ষেত্রে আপনাকে সাহায্য করতে পারে :)
রাফালফিনেঞ্জা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.