স্থানীয় ফাইলগুলিকে ওভাররাইট না করে আমি কীভাবে দূরবর্তী থেকে ফাইলগুলি টানবো?


112

আমি পূর্ব-বিদ্যমান রিমোট রেপোতে একটি নতুন গিট রেপো স্থাপন করার চেষ্টা করছি।

আমি চাই যে আমার স্থানীয় ফাইলগুলি দূরবর্তী রেপোকে ওভাররাইট করে, তবে গিট বলে যে আমাকে প্রথমে those দূরবর্তী ফাইলগুলিতে টানতে হবে এবং সেগুলি মার্জ করতে হবে।

স্থানীয় ফাইলগুলি রিমোট দ্বারা ওভাররাইট করা না হয়েছে তা নিশ্চিত করার কোনও উপায় আছে কি না?

উত্তর:


181

হ্যাঁ, এবং না ...

আমি বুঝি যে আপনি "ওভাররাইড" কি,, মানুষ, দূরবর্তী মধ্যে, কিন্তু উহু যদি কেউ কিছু দূরবর্তী রেপো ফাইল মডিফাই করেছেন আপনার স্থানীয় অনুলিপি চান বিভিন্ন উপায়, এবং আপনি শুধু উপেক্ষা তাদের পরিবর্তন এবং "শক্তি" চেষ্টা আপনার নিজের পরিবর্তন এমনকি ছাড়া খুঁজছেন সম্ভব দ্বন্দ্ব এ, ভাল, আমি তোমাকে (এবং আপনার সহকর্মীদের) জন্য রোদন ;-)

এটি বলেছিল, যদিও, "সঠিক জিনিস ..." করা সত্যিই সহজ

ধাপ 1:

git stash

আপনার স্থানীয় রেপোতে এটি আপনার স্থানীয় আপডেটগুলি স্ট্যাশ-এ সরিয়ে ফেলবে, তারপরে আপনার পরিবর্তিত ফাইলগুলি তাদের প্রাক-সম্পাদনা অবস্থায় ফিরিয়ে আনবে।

ধাপ ২:

git pull

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

ধাপ 3:

git stash pop

এটি আপনার পরিবর্তিত সংস্করণগুলিকে একত্রীকরণ করবে যা আপনি পদক্ষেপ 1 এ সরিয়ে রেখেছেন কেবলমাত্র দ্বিতীয় ধাপে টানা সংস্করণগুলিতে everything যদি সবকিছু সহজেই চলে যায় তবে আপনি প্রস্তুত হয়ে যাবেন!

অন্যদিকে, আপনি দ্বিতীয় ধাপে কী টানলেন এবং আপনার সংশোধনগুলির (অন্তর্বর্তী সময়ে অন্য কেউ সম্পাদনার কারণে) এর মধ্যে যদি সত্যিকারের দ্বন্দ্ব দেখা দেয় তবে আপনি খুঁজে পাবেন এবং সেগুলি সমাধান করার জন্য আপনাকে বলা হবে। এটা কর.

বিষয়গুলি আরও ভালভাবে কাজ করবে - এটি আপনাকে গুরুতর, গুরুতর বিষয়ে সতর্ক করার সময় সম্ভবত আপনার কোনও বাস্তব কাজ ছাড়াই আপনার পরিবর্তনগুলি বজায় রাখবে।


5
git commitস্থানীয় পরিবর্তনগুলি কেন ক্ষমতায় আসে git pull?
ডন

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

3
আপনার যদি একাধিক ফাইল থাকে তবে কিছু কার্যকর হয় যা আপনি ওভাররাইট করতে চান এবং কিছুতে আপনি ওভাররাইট করতে চান না। জিআইটি বলার উপায় নেই যে টানতে থাকা ফাইলগুলি উপেক্ষা করুন? কেন .gitignore কেবল ধাক্কা দেওয়ার জন্য কাজ করে, আমি ডিজাইনের সিদ্ধান্তটি মোটেই বুঝতে পারি না ...
বোবাক হাশেমি

25

আপনি প্রথমে আপনার স্থানীয় পরিবর্তনগুলি স্ট্যাশ করতে পারেন, তারপরে টানুন, তারপরে স্ট্যাশটিকে পপ করুন।

git stash
git pull origin master
git stash pop

রিমোট থেকে পরিবর্তনগুলিকে ওভাররাইড করে এমন কোনও ক্ষেত্রে দ্বন্দ্ব থাকতে পারে যা আপনাকে ম্যানুয়ালি সমাধান করতে হবে।


4
আমি ইতিমধ্যে স্থানীয়ভাবে এই পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করেছি যাতে এটি বলে যে "সংরক্ষণের জন্য কোনও স্থানীয় পরিবর্তন নেই"
জো আইজ্যাকসন

আমি মনে করি, এটি সেরা কৌশল।
জিমি ওবনিও অ্যাবোর

13

সুতরাং আপনি আপনার স্থানীয় সংগ্রহস্থলে স্থানীয় পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করেছেন। তারপরে আপনার স্থানীয় ফাইলগুলিতে কোনও পরিবর্তন না করেই আপনার স্থানীয় সংগ্রহস্থলে দূরবর্তী পরিবর্তনগুলি পেতে, আপনি ব্যবহার করতে পারেন git fetch। আসলে git pullএকটি দুটি পদক্ষেপ অপারেশন: একটি অ-ধ্বংসাত্মক এর git fetchপরে ক git merge। দেখুন 'গিট টান' এবং 'গিট ফেচ' এর মধ্যে পার্থক্য কী? আরও আলোচনার জন্য।

বিস্তারিত উদাহরণ:

মনে করুন আপনার সংগ্রহশালাটি এর মতো (আপনি পরিবর্তন করেছেন test2:

* ed0bcb2 - (HEAD, master) test2
* 4942854 - (origin/master, origin/HEAD) first

এবং originসংগ্রহস্থলটি এর মতো (অন্য কেউ প্রতিশ্রুতিবদ্ধ test1):

* 5437ca5 - (HEAD, master) test1
* 4942854 - first

এই মুহুর্তে, গিট অভিযোগ করবে এবং আপনি যদি test2দূরবর্তী সংগ্রহস্থলের দিকে এগিয়ে যাওয়ার চেষ্টা করেন তবে আপনাকে প্রথমে টানতে বলবে । আপনি যদি স্থানীয় স্থানীয় সংগ্রহস্থলটি পরিবর্তন না করে পরীক্ষা 1 কী তা দেখতে চান তবে এটি চালান:

$ git fetch

আপনার ফলাফল স্থানীয় সংগ্রহস্থল এর মতো হবে:

* ed0bcb2 - (HEAD, master) test2 
| * 5437ca5 - (origin/master, origin/HEAD) test1 
|/  
* 4942854 - first 

এখন আপনার অন্য একটি শাখায় দূরবর্তী পরিবর্তন রয়েছে এবং আপনি আপনার স্থানীয় ফাইল অক্ষত রাখতে পারেন।

তারপরে কী আছে? আপনি একটি করতে পারেন git mergeযা git pullপূর্বের সাথে মিলিত হওয়ার সময় একই প্রভাব ফেলবে git fetch, বা যেমন আমি পছন্দ করি তার git rebase origin/masterউপরে আপনার পরিবর্তনটি প্রয়োগ করতে একটি করুন origin/masterযা আপনাকে একটি ক্লিনার ইতিহাস দেয়।


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