গিট: রিমোট অরিজিন মাস্টার থেকে একটি ফাইল আপডেট / চেকআউট করবেন কীভাবে?


362

দৃশ্য:

  1. আমি স্থানীয়ভাবে একটি একক ফাইলে কিছু পরিবর্তনগুলি করুন এবং চালানোর git add, git commitএবংgit push
  2. ফাইলটি দূরবর্তী উত্সের মাস্টার সংগ্রহস্থলে ঠেলাঠেলি করা হয়েছে
  3. আমার কাছে আরও একটি স্থানীয় সংগ্রহস্থল রয়েছে যা ক্যাপিস্ট্রানো হয়ে সেই দূরবর্তী সংগ্রহস্থল থেকে "রিমোট_ক্যাচ" পদ্ধতিতে স্থাপন করা হয়
  4. এখন আমি পুরো অ্যাপ্লিকেশন মোতায়েন করতে চাই না তবে কেবলমাত্র সেই একক ফাইলটি আপডেট / চেকআউট করব।

এটা কি গিট দিয়ে কোনওভাবে সম্ভব? আমি এমন কোনও কাজ খুঁজে পাচ্ছিলাম না যা কাজ করবে বা আমি এটি বের করতে সক্ষম হয়েছি। এসভিএন দিয়ে আমি কেবল করেছি svn up fileএবং ভয়েলা।


19
আপনি যে উত্তরটি আসলে আপনার প্রশ্নের উত্তর দিয়েছেন তার উত্তর গ্রহণের পরিবর্তনের বিষয়ে আপনি বিবেচনা করতে পারেন। ;)
পদক্ষেপ

6
Years বছরেরও বেশি সময় পরে, আমি বিশ্বাস করি যে আমরা নিরাপদে ধরেই নিতে পারি যে এটি @ পদক্ষেপগুলি হবে না ...
-গ্রেনিয়ার

গিট 2.23 (আগস্ট 2019) এর সাথে, এটি git restore -s origin/master -- path/to/file। দেখুন নিচের আমার উত্তর
ভোনসি

উত্তর:


914

এটি করা সম্ভব (মোতায়েন করা ভান্ডারে)

git fetch
git checkout origin/master -- path/to/file

আনয়ন সাম্প্রতিক সমস্ত পরিবর্তনগুলি ডাউনলোড করবে, তবে এটি এটি আপনার বর্তমান চেক আউট কোডে (কার্যকারী অঞ্চল) রাখবে না।

চেকআউটটি ডাউনলোড করা পরিবর্তনগুলি ( origin/master) থেকে নির্দিষ্ট ফাইলের সাথে কার্যকারী গাছকে আপডেট করবে ।

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


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

6
এই আমি উত্তর খুঁজছিলাম ছিল।
জাভাদবা

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

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

ছোট প্রশ্ন, এটি করার পরে, আমি একটি আলাদা মেশিনে যাচ্ছি, তারপরে আমি আপনার উপরে উল্লিখিত ক্রিয়াকলাপগুলি করব, তবে তারপরে git statusআমি এগুলি দেখতে পাচ্ছি Changes to be committed:- অর্থ, আমার আবার তাদের প্রতিশ্রুতিবদ্ধ হওয়া দরকার? (কেবলমাত্র লক্ষণীয় যে আমি একটি একা ছোঁয়া থাকা ফাইলটি রিফ্রেশ করতে চেয়েছিলাম কিন্তু রেপো নিজেই অন্য একটি মেশিনে স্পর্শ করা হয়েছে)
রিকি লেভি

42

নিম্নলিখিত কোডটি আমার পক্ষে কাজ করেছে:

     git fetch
     git checkout <branch from which file needs to be fetched> <filepath> 

19
git archive --format=zip --remote=ssh://<user>@<host>/repos/<repo name> <tag or HEAD> <filename> > <output file name>.zip

1
এটি ssh- এর উপরে ক্লোন করা রেপোসের জন্য একটি ভাল সমাধান, তবে মনে হয় এটি git archive --remote=https://github.com/git/git.git master:git/contrib/completion git-completion.bash | tar -xfatal: Operation not supported by protocol.
https- র মধ্যে

1
এর সাথে চমৎকার মিলিত হয়েছিল tar: গুলি --to-stdout,git archive --remote="gitolite3@<host>:<repo>" <tag> <file> | tar xf - --to-stdout
পগগান সে

18

গিট ২.২৩ (আগস্ট 2019) এবং নতুন (এখনও পরীক্ষামূলক) কমান্ডের সাহায্যে git restore, " স্টেজিং এরিয়া থেকে নয় তবে ওয়ার্কিং ডিরেক্টরি থেকে সমস্ত ফাইল কীভাবে পুনরায় সেট করা যায়? " তে দেখা যায়, এটি হবে:

git fetch
git restore -s origin/master -- path/to/file

ধারণাটি হ'ল: git restoreকেবল ফাইলগুলির সাথেই কাজ করে, ফাইল এবং শাখাগুলির মতো git checkoutনয়।
" বিভ্রান্ত হয়েgit checkout " দেখুন: এটি এখানে git switchআসে)


codersam যোগ মন্তব্য :

আমার ক্ষেত্রে আমি আমার প্রবাহ থেকে ডেটা পেতে চেয়েছিলাম (যা থেকে আমি কল্পনা করেছি)।
সুতরাং সবেমাত্র পরিবর্তিত হয়েছে:

git restore -s upstream/master -- path/to/file

2
কী আরাম যে এই আদেশটি অবশেষে বিদ্যমান ... গিট-ক্লুফুল লোকেরা আগে কী করছিল? আমি পুরো জিনিসটি পুনরুদ্ধার করছি এবং আমার প্রয়োজন মতো পৃথক ফাইলগুলি অনুলিপি করছি, তবে এটি বেদনাদায়ক ছিল।
মাইক ওয়াইজ

এটি আমার পক্ষে কাজ করেছিল, তবে আমার ক্ষেত্রে আমি আমার উজানের থেকে ডেটা পেতে চেয়েছিলাম (যা থেকে আমি কল্পনা করেছি)। সুতরাং সবেমাত্র পরিবর্তিত হয়েছেgit restore -s upstream/master -- path/to/file
কোডারস্যাম

এই মতামতের জন্য @ কোডারসাম আপনাকে ধন্যবাদ। আরও দৃশ্যমানতার জন্য আমি আপনার মন্তব্যে উত্তরে অন্তর্ভুক্ত করেছি।
ভোনসি

8

আপনি যা করতে পারেন তা হ'ল:

  1. আপনার স্থানীয় গিট রেপো আপডেট করুন:

    git fetch

  2. একটি স্থানীয় শাখা তৈরি করুন এবং এটিতে চেকআউট করুন:

    git branch pouet && git checkout pouet

  3. এই শাখায় আপনি যে কমিটগুলি চান তা প্রয়োগ করুন:

    git cherry-pick abcdefabcdef

    (abcdefabcdef আপনি প্রয়োগ করতে চান এমন প্রতিশ্রুতির sha1)


4
সরু হিসাবে, আপনার দ্বিতীয় পদক্ষেপটি একটি কমান্ড হিসাবেও করা যেতে পারে git checkout -b pouet
গ্রেগ হিউগিল

4
'pouet' এই উদাহরণের জন্য সেরা শাখার নাম।
হুসার্ড

2

বা আপনি যে শাখায় রয়েছেন সেখানে গিট স্ট্যাশ (যদি আপনার পরিবর্তন থাকে), চেকআউট মাস্টার, সর্বশেষ পরিবর্তনগুলি সন্ধান করুন, সেই ফাইলটি আপনার ডেস্কটপে (বা পুরো অ্যাপ্লিকেশন) ধরুন। আপনি যে শাখায় ছিলেন তা চেকআউট করুন। গিট স্ট্যাশ আপনি যেখানে ছিলেন সেই স্থানে আবার প্রয়োগ করুন, তারপরে পরিবর্তনগুলি ম্যানুয়ালি স্থির করুন বা ফাইলটি প্রতিস্থাপন করে টেনে আনুন।

এই উপায়টি খুব সুন্দর নয় তবে আপনি যদি অন্য কিছু খুঁজে নাও পান তবে এটি কাজ করে।


-10

আমি মনে করি আমি একটি সহজ হ্যাক আউট পেয়েছি।

স্থানীয় সংগ্রহস্থলে আপনার থাকা ফাইলটি মুছুন (রিমোট সার্ভারের সর্বশেষ প্রতিশ্রুতি থেকে আপনি যে ফাইলটি আপডেট করতে চান)

এবং তারপর একটি git pull

ফাইলটি মোছা হওয়ায় কোনও বিরোধ নেই


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

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