গিটের একটি স্বেচ্ছাসেবী সংস্করণে একটি ফাইলকে কীভাবে পৃথক করা যায়?


324

আমি কীভাবে কোনও ফাইলকে pom.xmlআলাদা করে বলতে পারি , মাস্টার শাখা থেকে গিটের স্বেচ্ছাসেবী পুরানো সংস্করণে?

উত্তর:


347

আপনি করতে পারেন:

git diff master~20:pom.xml pom.xml

... প্রথম পিতামাতার মাধ্যমে 20 টি সংশোধন pom.xmlথেকে আপনার বর্তমানের সাথে তুলনা করতে master। আপনি master~20অবশ্যই প্রতিশ্রুতির অবজেক্ট নাম (SHA1sum) বা সংশোধন নির্দিষ্ট করার বিভিন্ন উপায়ের সাথে প্রতিস্থাপন করতে পারেন ।

নোট করুন যে এটি আসলে pom.xmlআপনার কার্যকরী গাছের সংস্করণটির সাথে পুরানো তুলনা করছে, প্রতিশ্রুতিবদ্ধ সংস্করণটি নয় master। আপনি যদি এটি চান তবে তার পরিবর্তে আপনি নিম্নলিখিতটি করতে পারেন:

git diff master~20:pom.xml master:pom.xml

12
মনে রাখবেন এটি কেবল ফাইলগুলির জন্যই কাজ করে না, উদাহরণস্বরূপ এটি (সাব) ডিরেক্টরিগুলির জন্যও কাজ করে git diff <revision>:foo/ HEAD:foo/

2
এছাড়াও নোট করুন যে উইন্ডোগুলিতে আপনাকে ডিরেক্টরিগুলির জন্য ফরোয়ার্ড স্ল্যাশগুলি ব্যবহার করতে হবে যদি আপনি একটি সংশোধনী নির্দিষ্টকারক ব্যবহার করেন বা গিট আপনাকে সেই সংশোধনটিতে বিদ্যমান ফাইল / ডিরেক্টরি সম্পর্কে ত্রুটি দেয়।
ডিলান নিসলে

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

উইন্ডোজ ফাইলগুলির সাথে আমি ডিরেক্টরি পরিবর্তন করতে এবং তারপরে গিট ডিফ মাস্টারকে কল করতে আরও সহজ পেয়েছি। 20: ./ pom.xML ./pom.xML
লয়েড

গিটের কিছু সংস্করণের জন্য <পুনর্বিবেচনা> এবং <पथ>
জোশ

140
git diff <revision> <path>

উদাহরণ স্বরূপ:

git diff b0d14a4 foobar.txt

ফাইলটি বর্তমান ডিরেক্টরিতে না থাকলে 1.7.11 সংস্করণে কাজ করে না। উদাহরণ: 'গিট ডিফারফ f76d078 পরীক্ষা / কনফিগারেশন' ফলন "ত্রুটি: 'পরীক্ষা / f76d078'" অ্যাক্সেস করা যায়নি
সিম্পুয়েসার

1
@ user1663987 শুধু পাস প্রকল্পের রুট করার জন্য একটি পূর্ণ পাথ আপেক্ষিক: git diff <revision> root/path/file

1
পরীক্ষা / কনফিগ হয় রুট আপেক্ষিক (টেস্ট হিসেবে রুট এর একটি উপ-ডিরেক্টরির যায়)। তবে তারপরে আপনার উদাহরণ / রুট / ফাইলটি মূলটিকে অন্তর্ভুক্ত করবে?
সিম্পুউজার

41

আপনি যদি একক ফাইলের সর্বশেষ কমিটের মধ্যে পার্থক্য দেখতে চান তবে আপনি এটি করতে পারেন:

git log -p -1 filename

এটি আপনাকে গিটের মধ্যে ফাইলের ভিন্নতা দেয়, আপনার স্থানীয় ফাইলের সাথে তুলনা করে না।


2
এটি কোনও কিছুই ফিরিয়ে
দিচ্ছে

পুনঃটুইট করেছেন আন্ড্রেই ক্রিশ্চিয়ান প্রডান তারপর আপনার সেখানে কোনও পরিবর্তন নেই। আপনি -1পরিবর্তনগুলি না পাওয়া পর্যন্ত আপনি ধাপে ধাপে বৃদ্ধি করতে পারেন ।
কায়সার

এই খুব সুন্দর. আমি একটি ব্যাশ ফাংশন যা সহায়ক হতে পারে তৈরি করা হয়েছে: gitlog () { git log -${3:-p} -${2:-1} $1; } মত ব্যবহার করা হয়েছে: gitlog Rakefileবা gitlog Rakefile 5এবং gitlog Rakefile 10 s। প্রথম দেখায় একটি পার্থক্য; দ্বিতীয়টি পাঁচটি পার্থক্য দেখায়; তৃতীয় দশটি শো --no-patch
অক্সবস

18

শেষ প্রতিশ্রুতিতে কোনও ফাইলে কী পরিবর্তন হয়েছিল তা দেখতে:

git diff HEAD~1 path/to/file.

আপনি যে সংখ্যাটি (~ 1) এর সাথে পরিবর্তিত করতে চান সেই এন-ওটি প্রতিশ্রুতিতে পরিবর্তন করতে পারেন।


এই উত্তরটি এই আরও সাধারণ উত্তরের সত্যই একটি নির্দিষ্ট ক্ষেত্রে , যেখানে HEAD~1প্রতিস্থাপন করা হয়েছে <revision>, যা এই উত্তরটিকে সদৃশ করে তোলে।

1
এটি কাজ করছে না! মারাত্মক: অস্পষ্ট আর্গুমেন্ট 'শিরোনাম ~ 1': অজানা সংশোধন বা পথ কার্যকর গাছের মধ্যে নেই। সংশোধন থেকে পাথ পৃথক করতে '-' ব্যবহার করুন
আন্দ্রে ক্রিশ্চিয়ান প্রোডান

এই উত্তরটি আমার পক্ষে সহজ এবং কার্যক্ষম।
ডগলাস ফ্রেরি

6

জেনেরিক সিনট্যাক্স:

$git diff oldCommit..newCommit -- **FileName.xml > ~/diff.txt

আপনার রেপোর যে কোনও জায়গায় "FileName.xML" নামের সমস্ত ফাইলের জন্য।

"-" এবং "**" এর মধ্যে স্থানটি লক্ষ্য করুন

আপনার প্রশ্নের উত্তর:

$git checkout master
$git diff oldCommit..HEAD -- **pom.xml 
or
$git diff oldCommit..HEAD -- relative/path/to/pom.xml 

গিটের মতো সর্বদা আপনি কমিট আইডি করতে একটি ট্যাগ / শা 1 / "হেড ^" ব্যবহার করতে পারেন।

উবুন্টুতে 1.9.1 গিট দিয়ে পরীক্ষা করা হয়েছে।


6

যদি উভয়ই প্রতিশ্রুতিবদ্ধ না হয় তবে আপনার বাতুলের ব্রেস সম্প্রসারণটি সত্যই কার্যকর প্রমাণিত হয়েছে, বিশেষত যদি আপনার ফাইলের নাম দীর্ঘ হয় তবে উপরের উদাহরণটি:

git diff master~20:pom.xml master:pom.xml

হবে

git diff {master~20,master}:pom.xml

আরো বন্ধনী সম্প্রসারণ ব্যাশ সঙ্গে।


6

5 টি বর্তমানের সাথে প্রতিশ্রুতিবদ্ধ করার জন্য, উভয়ই masterকেবল সহজভাবে করুন:

git diff master~5:pom.xml master:pom.xml

এছাড়াও আপনি হ্যাশ নম্বর প্রতিশ্রুতিবদ্ধ করতে পারেন, উদাহরণস্বরূপ যদি হ্যাশ নম্বরটি হয় x110bd64তবে পার্থক্যটি দেখতে আপনি এই জাতীয় কিছু করতে পারেন:

git diff x110bd64 pom.xml

4

গিট ডিফার-WE হেড উত্স / মাস্টার পাথ / টু / ফাইল



2

আপনি যদি কোনও গ্রাফিকাল সরঞ্জাম ব্যবহার করে ভাল থাকেন (বা এমনকি এটি পছন্দ করেন) তবে আপনি:

gitk pom.xml

গিটকে আপনি যে কোনও কমিট ক্লিক করতে পারেন (এটি "নির্বাচন করতে") এবং পপআপ মেনুতে "আপনি এই ডিফ করুন -> নির্বাচিত" বা "পৃথক নির্বাচিত -> এটি" নির্বাচন করতে আপনি কোন আদেশ পছন্দ করেন তার উপর নির্ভর করে অন্য কোনও প্রতিশ্রুতিতে ডান ক্লিক করতে পারেন।



0

উদাহরণস্বরূপ আপনার যদি কোনও একক ফাইলের মধ্যে আলাদা করতে হয় তবে আপনি এটি করতে পারেন

git diff stash@{0} -- path/to/file

-1

আপনি যদি কোনও নির্দিষ্ট প্রতিশ্রুতিতে পার্থক্যটি সন্ধান করে থাকেন এবং আপনি কমান্ড লাইনের পরিবর্তে গিথুব ইউআই ব্যবহার করতে চান (বলুন আপনি এটি অন্যান্য লোকের সাথে লিঙ্ক করতে চান), আপনি এটি করতে পারেন:

https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file>

উদাহরণ স্বরূপ:

https://github.com/grails/grails-core/commit/02942c5b4d832b856fbc04c186f1d02416895a7e/grails-test-suite-uber/build.gradle

উপরের ডানদিকে আগের এবং পরবর্তী লিঙ্কগুলি নোট করুন যা আপনাকে কমিটের সমস্ত ফাইলের মধ্যে নেভিগেট করার অনুমতি দেয়।

এটি কেবল কোনও নির্দিষ্ট কমিটের জন্য কাজ করে, কোনও দুটি স্বেচ্ছাসেবী সংস্করণের মধ্যে তুলনা করার জন্য নয়।

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