অন্য শাখা থেকে কীভাবে একটি ফাইল পাবেন


1260

আমি গিট ব্যবহার করছি এবং মাস্টার শাখায় কাজ করছি। এই শাখায় একটি ফাইল রয়েছে app.js

আমার একটি experimentশাখা আছে যেখানে আমি প্রচুর পরিবর্তন এবং প্রচুর কমিট করেছি। এখন আমি সব পরিবর্তন শুধু কাজ আনতে চান app.jsথেকে experimentথেকে masterশাখা।

আমি কেমন করে ঐটি করি?

আবারও আমি একত্রীকরণ চাই না। আমি কেবল শাখা app.jsথেকে experimentশাখায় সমস্ত পরিবর্তন আনতে চাই master



1
বাদে থাকা উত্তর এবং আজকের অন্যরা কীভাবে ফাইলের বিষয়বস্তুগুলি অনুলিপি করবেন তা উত্তর দেয়, যখন আমি এটি খুঁজে পেয়েছিলাম তখন আমি নিজেই চেয়েছিলাম। তবে, সঠিকভাবে পড়লে নিক পুরোপুরি পাঠ্য নয়, পরিবর্তন আনতে চেয়েছিল এবং ফাইলটি masterএখান থেকে বিভক্ত হতে পারে experiment, যেমন ফাইলগুলিতে হারিয়ে যাওয়া অন্যান্য শাখাগুলির সাথে সংযুক্ত এমন পরিবর্তনগুলি থাকতে পারে যা কেবল অনুলিপি করা হয়েছে। পিএস অন্যদিকে তিনি মার্জ করতে চান না, তবে আমি জানি যে git mergeশব্দটি কেবলমাত্র শাখার জন্য, নির্দিষ্ট ফাইলের জন্য নয়, সুতরাং এখানে কোনও বৈপরীত্য নেই।
আলেক্সি মার্টিয়ানভ

উত্তর:


1599
git checkout master               # first get back to master
git checkout experiment -- app.js # then copy the version of app.js 
                                  # from branch "experiment"

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


আগস্ট 2019, গিট 2.23 আপডেট করুন

নতুন git switchএবং git restoreআদেশগুলি সহ, এটি হবে:

git switch master
git restore -s experiment -- app.js

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

git restore -s experiment --staged --worktree -- app.js
# shorter:
git restore -s experiment -WS -- app.js

যেমন জাকুব নরবস্কি মন্তব্যগুলিতে উল্লেখ করেছেন:

git show experiment:path/to/app.js > path/to/app.js

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

যেমন ফ্রস্টি মন্তব্যে উল্লেখ করেছেন:

আপনি কেবলমাত্র app.js এর সাম্প্রতিকতম অবস্থা পাবেন

তবে, git checkoutবা এর জন্য git show, আপনি আসলে যে কোনও সংশোধনীটি উল্লেখ করতে পারেন, তাই এসও প্রশ্ন " গিট গুইতে একটি ফাইলের গিট চেকআউট রিভিশন " তে চিত্রিত হিসাবে :

$ git show $REVISION:$FILENAME
$ git checkout $REVISION -- $FILENAME

একই রকম হবে $ ফাইল ফাইল একটি সংস্করণযুক্ত ফাইলের পুরো পথ

$REVISIONহিসাবে প্রদর্শিত হতে পারে git rev-parse:

experiment@{yesterday}:app.js # app.js as it was yesterday 
experiment^:app.js            # app.js on the first commit parent
experiment@{2}:app.js         # app.js two commits ago

ইত্যাদি।

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

আপনি স্ট্যাশ থেকে এটি করতে পারেন:

git checkout stash -- app.js

আপনি যদি দুটি শাখায় কাজ করছেন এবং প্রতিশ্রুতিবদ্ধ না করতে চান তবে এটি খুব কার্যকর।


13
একটি নোট: আপনি কেবলমাত্র অ্যাপ্লিকেশনগুলির সর্বাধিক সাম্প্রতিক অবস্থা পাবেন, আপনি পরীক্ষা শাখা থেকে কোনও ইতিহাস পাবেন না।
ফ্রস্টি

2
@ থমাসেগজি আপনার যে কোনও শাখা থেকে যে কোনও শাখায় কোনও ফাইল আমদানি করতে (চেকআউট) করতে সক্ষম হওয়া উচিত। আপনি যদি এটি না করতে পারেন তবে সঠিক ত্রুটি বার্তার মতো নির্দিষ্ট বিবরণ এবং গিট এবং ওএস এর সংস্করণ ব্যবহৃত হিসাবে এখানে জিজ্ঞাসা করা ভাল প্রশ্ন হতে পারে।
ভোনসি

2
একটি সাব ডিরেক্টরি ডিরেক্টরিতে, আপনি ব্যবহার করতে পারেন experiment:./app.js। (আপনাকে পুরো পাথটি নির্দিষ্ট করতে হবে না)) আমি খুব সহায়ক ত্রুটি বার্তা গিটটি দিয়েছিলাম বলে ধন্যবাদটি শিখলাম: "আপনি কি বোঝাতে চেয়েছিলেন 'মাইবার্যাঞ্চ: ফুল / পাথ / টু / আমার / ফাইল.এক্সএসএল' ওরফে 'মাইব্র্যাঞ্চ: ./file.xsl '? " হ্যা, আমি করেছিলাম! আমি মনে করি না যে আমি মারাত্মক ত্রুটি বার্তায় এত আনন্দিত হয়েছি।
ইভান লেনজ

1
@TomaszGandor হ্যাঁ, আমি উল্লেখ যে stackoverflow.com/a/21066489/6309 , যেখানে Git প্রদর্শনী সূচক সংশোধন না, কিন্তু Git চেকআউট সূচক সংশোধন করে।
ভোনসি

1
@ ফ্রিডব্রাইস আমার উত্তর দেখুন: আজকাল, এটি হবেgit restore -s new-feature path/to/app.js
ভোনসি

358

সবকিছু অনেক সহজ, এর জন্য গিট চেকআউট ব্যবহার করুন।

ধরুন you're on masterশাখা, শাখাটি পেতে app.js from new-feature:

git checkout new-feature path/to/app.js

// note that there is no leading slash in the path!

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

দ্রষ্টব্য : দূরবর্তী শাখা নয়, স্থানীয় শাখা new-featureহওয়া দরকার ।


76
আমি সর্বদা উত্সটি নির্দিষ্ট করা সহায়ক বলে মনে করি git checkout origin/source_branch path/to/fileকারণ আপনি যদি নিজের স্থানীয় রেপোর উত্স শাখাটি আপডেট করতে অবহেলা করেন তবে আপনি ফাইলটির একটি পুরানো সংস্করণ পেতে পারেন ... আমাকে কীভাবে জানি তা জিজ্ঞাসা করুন। ;)
ট্যালরিক

2
@ মাইমোজা প্রশ্নটি রিমোটগুলির উল্লেখ করেনি, সুতরাং ধারণা করা হচ্ছে এটি
নিখুঁতভাবে

1
এই আদেশটি কি ফাইলের ইতিহাস, বা কেবল ফাইলের শেষ সংস্করণ নিয়ে আসবে?
ব্যবহারকারী 1366265

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

3
এটি স্বয়ংক্রিয়ভাবে চেক-আউট ফাইলটি স্টেজ করে বলে মনে হচ্ছে। মঞ্চ না রেখে কি একই কাজ করা সম্ভব?
bluenote10

44
git checkout branch_name file_name

উদাহরণ:

git checkout master App.java

আপনার শাখার নামটিতে একটি সময় থাকলে এটি কাজ করবে না।

git checkout "fix.june" alive.html
error: pathspec 'fix.june' did not match any file(s) known to git.

@ ফিলিপরেগো এই উত্তরটি সঠিক। আমি অনুমান করছি যে আপনার শাখায় বিভিন্ন ধরণের মূলধন বা বিরামচিহ্ন রয়েছে, বা আপনার কাছে কেবল একটি দূরবর্তী শাখা রয়েছে এবং কোনও স্থানীয় শাখা নেই। গিট চেকআউট ডক দেখুন: git-scm.com/docs/git-checkout#
ব্রেট

@ ব্রেট আমি দেখতে পেলাম যে শাখার নাম সময়সীমার পরে এটি কাজ করে না। আমি একটি সম্পাদনার পরামর্শ দিয়েছি
ফিলিপ রেগো

এটি সেরা উত্তর। আমি আশা করি এই উত্তরটি সর্বাধিক রেট হয়েছে। বর্তমানের সর্বোচ্চটি অত্যন্ত বিভ্রান্তিকর এবং সোজা নয়
রাসেল লেগো

41

ভনস এবং চি এর উত্তরগুলির পরিপূরক to

git show experiment:path/to/relative/app.js > app.js
# If your current working directory is relative than just use
git show experiment:app.js > app.js

অথবা

git checkout experiment -- app.js

2
শান্ত! আমি দীর্ঘ পথ নির্দিষ্ট করে ঘৃণা করি। --শাখার নাম এবং পাথগুলির মধ্যে ডাবল ড্যাশ ( ) alচ্ছিক? বিকল্পগুলি / স্যুইচ হিসাবে বিবেচনা করা থেকে শুরু করে কোনও ড্যাশ দিয়ে শুরু হওয়া পথগুলি কী কেবল আটকাতে হবে?
টমাসজ গ্যান্ডার

সত্যি বলতে আমি জানি না। এমনকি আপনি খেয়ালও করেননি যে আপনি এটি নির্দেশ না করা পর্যন্ত আমি দ্বৈত ড্যাশ ভুলে গিয়েছি।
অ্যালেক্সLordThorsen

6
@ টমাসজেন্ডার optionচ্ছিক --, তবে শাখার নামগুলির সাথে দ্বন্দ্ব এড়াতে এটি আরও কার্যকর। উদাহরণস্বরূপ, এর git checkout -- fooঅর্থ হ'ল "হেড থেকে ফাইল ফু পরীক্ষা করুন" (যেমন। Foo এ স্থানীয় পরিবর্তনগুলি ওভাররাইট করুন , অর্থাত্ একটি উপসেট git reset --hard), তবে এর git checkout fooঅর্থ হতে পারে বা "চলুন ব্রাঞ্চ ফুতে যাই "।
আলয়েস মাহডাল

8

অথবা আপনি যদি অন্য শাখা থেকে সমস্ত ফাইল চান:

git checkout <branch name> -- .

23
প্রাথমিক কোয়েস্টনে "কেবল একটি ফাইল" রয়েছে।
গ্রেটভোভান

1
এটি মার্জ করার পরিবর্তে বিদ্যমান ফাইলগুলিকে প্রতিস্থাপন করে
Amare

3
এটি .একটি বিশাল পার্থক্য করে: অন্য শাখায় যাওয়ার পরিবর্তে এটি সেখান থেকে সমস্ত ফাইল অনুলিপি করে এখনও আপনার বর্তমান শাখায় রেখে দেয়। আপনি অন্য শাখায় প্রবেশ না করেই সামগ্রীগুলি পান।
Xeverous

4

গিথুবে ফাইলটি পর্যালোচনা করুন এবং সেখান থেকে টানুন

এটি একটি ব্যবহারিক পদ্ধতির যা সরাসরি ওপিকে উত্তর দেয় না, তবে কিছু দরকারী বলে মনে করেছে:

যদি প্রশ্নে থাকা শাখাটি গিটহাবটিতে থাকে, তবে আপনি গিটহাবের যে কোনও সরঞ্জাম ব্যবহার করে কাঙ্ক্ষিত শাখায় গিয়ে ফাইল করতে পারেন, তারপরে সরল পাঠ্যটি দেখতে 'কাঁচা' ক্লিক করুন, এবং (allyচ্ছিকভাবে) পাঠ্যটি অনুলিপি করে পেস্ট করুন আকাঙ্ক্ষিত.

আমি এই পদ্ধতির পছন্দ করি কারণ এটি আপনাকে আপনার স্থানীয় মেশিনে টানানোর আগে দূরবর্তী ফাইলটিকে সম্পূর্ণরূপে দেখতে দেয়।


2
তবে কাঁচা ফাইলটি অনুলিপি করা ও আটকে দেওয়ার ফলে আপনার গিটের পার্থক্যতে অযাচিত চরিত্রের পরিবর্তন হতে পারে। কোনও পরিবর্তন নিশ্চিত না করে সরাসরি আপনার প্রকল্পে ফাইলটি সংরক্ষণ করা নিরাপদ।
ফিলিপ রেগো

0

আপনি যদি কোনও বিশেষ প্রতিশ্রুতি (কোনও শাখা) থেকে ফাইলটি চান তবে 06f8251f বলুন

গিট চেকআউট 06f8251f path_to_file

উদাহরণস্বরূপ, উইন্ডোতে:

গিট চেকআউট 06f8251f সি: \ এ \ বি \ সি \ ডি \ file.h


1
উত্তর দেওয়ার জন্য সময় দেওয়ার জন্য ধন্যবাদ! তবে এটি প্রশ্নের উত্তর দেয় না, এবং একটি খুব ভাল উত্তর যা খুব বিশদভাবে বর্ণিত হয়েছে 9 বছর আগে ইতিমধ্যে পোস্ট করা হয়েছে। প্রশ্নটি কাটানোর দরকার নেই।
নাথান

এটি একটি বৈধ বাস্তব পরিস্থিতি। উত্তরটি শাখার সাথে সঠিকভাবে ডিল করে, তবে শাখার একটি বিশেষ প্রতিশ্রুতি দেখার জন্য কী।
অরূপজবাশু

0

আর একটি উপায় হ'ল পার্থক্যগুলি সহ একটি প্যাচ তৈরি করা এবং এটি মাস্টার শাখায় প্রয়োগ করা। আসুন আপনি অ্যাপটি কাজ শুরু করার আগে শেষ প্রতিশ্রুতিটি বলুন.জেএসটি 00000aaaaa এবং আপনার যে সংস্করণটি চান সেটি প্রতিপন্ন করা প্রতিশ্রুতি 00000bbbb

আপনি পরীক্ষা শাখায় এটি চালান:

git diff 00000aaaaa 00000bbbbb app.js > ~/app_changes.git

এটি app.js এর জন্য এই দুটি চুক্তির মধ্যকার সমস্ত পার্থক্য সহ একটি ফাইল তৈরি করবে যা আপনি যেখানে খুশি আবেদন করতে পারবেন। আপনি এই ফাইলটি প্রকল্পের বাইরে যে কোনও জায়গায় রাখতে পারেন

তারপরে, মাস্টারে আপনি কেবল চালান:

git apply ~/app_changes.git

এখন আপনি প্রকল্পগুলির পরিবর্তনগুলি দেখতে পাবেন যেন আপনি সেগুলি ম্যানুয়ালি তৈরি করেছেন।


-3
git checkout master               -go to the master branch first
git checkout <your-branch> -- <your-file> --copy your file data from your branch.

git show <your-branch>:path/to/<your-file> 

আশা করি এটা তোমাকে সাহায্য করবে। আপনার যদি কোন প্রশ্ন থাকে তবে দয়া করে আমাকে জানান know

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