গিট ইন, স্ট্যাশ প্রয়োগ না করে অবরুদ্ধ স্ট্যাশড ফাইলগুলি দেখানোর কোনও উপায় কি?


105

যদি আমি চালনা করি তবে আমি git stash -uঅনতিযুক্ত ফাইলগুলি স্ট্যাশ করতে পারি। তবে, বলেছে যে অনতিযুক্ত ফাইলগুলি মোটেও প্রদর্শিত হয় না git stash show stash@{0}। স্ট্যাশ প্রয়োগ না করে অবরুদ্ধ স্ট্যাশড ফাইলগুলি দেখানোর কোনও উপায় আছে কি?

উত্তর:


127

স্ট্র্যাচ কমিটের তৃতীয় পিতামাতার মধ্যে অবরুদ্ধ ফাইলগুলি সংরক্ষণ করা হয়। (এটি আসলে নথিভুক্ত নয়, তবে সেই প্রতিশ্রুতি থেকে স্পষ্টতই স্পষ্ট হয়েছে যা -u বৈশিষ্ট্যটি উপস্থাপন করেছে, 787513 ... এবং বাক্যাংশের বাক্যগুলির জন্য বাকী ডকুমেন্টেশনের git-stashউপায়টি ... বা কেবল করে git log --graph stash@{0})

আপনি স্ট্যাশের কেবল "অচিহ্নযুক্ত" অংশটি এর মাধ্যমে দেখতে পারবেন:

git show stash@{0}^3

বা, কেবল "অচিহ্নযুক্ত" গাছ নিজেই, এর মাধ্যমে:

git show stash@{0}^3:

বা, গাছের মধ্যে একটি "নির্দিষ্ট চিহ্নবিহীন" ফাইল, এর মাধ্যমে:

git show stash@{0}^3:<path/to/file>

দুর্ভাগ্যক্রমে, সমস্ত পর্যায়বদ্ধ + আনস্টেজড + আনট্র্যাকড বনাম "বর্তমান" অবস্থার মধ্যে পার্থক্যের সংক্ষিপ্তসার পাওয়ার ভাল উপায় নেই। অর্থাত: git show stash@{0}আনক্র্যাকড ফাইলগুলি অন্তর্ভুক্ত করার জন্য তৈরি করা যায় না। এটি কারণ হ'ল স্ট্যাশ গাছের বস্তু নিজেই প্রতিশ্রুতিবদ্ধ, হিসাবে উল্লেখ করা হয় stash@{0}:, তৃতীয়, "অস্থির" পিতামাতার থেকে কোনও পরিবর্তন অন্তর্ভুক্ত করে না।

এটি স্ট্যাশগুলি পুনরায় প্রয়োগ করার কারণে ঘটে: ট্র্যাক করা ফাইলগুলি সহজেই প্যাচ হিসাবে প্রয়োগ করা যেতে পারে, তবে তালিকানবিহীন ফাইলগুলি কেবলমাত্র "পুরো ফাইলগুলি" হিসাবে তত্ত্ব হিসাবে প্রয়োগ করা যেতে পারে।


সুতরাং স্ট্যাশ কমিটের পিতামাতারা হলেন (১. কমিট স্ট্যাশ ২. ইনডেক্সের বিরুদ্ধে তৈরি against. অবিরত ওয়ার্কিং কপি) এবং স্ট্যাশ কমিটে নিজেই ট্র্যাকড ওয়ার্কিং কপি থাকে? git stash showওয়ার্কিং কপি এবং # 1 (git-stash.sh এর প্রাসঙ্গিক কোড: git diff ${FLAGS:---stat} $b_commit $w_commitযার মধ্যে $ বি_কমিট # 1 এবং $ ডাব্লু_কমিট হ'ল স্ট্যাশ কমিট) এর মধ্যে পার্থক্য দেখায়; git stash show# 3 অন্তর্ভুক্ত করার জন্য কি কোনও অন্তর্নির্মিত উপায় আছে?
সর্বাধিক ন্যানসি

আপনি বলে, আমি একটি লুকোবার জায়গা একটি একক সারসংক্ষেপ দৃশ্য পেতে একটি উপায় খুঁজে পাওয়া যায় নি, কিন্তু আপনার সাথে মাত্র একটি কমান্ড তার সম্পূর্ণ তথ্য দেখতে পারেন: git log --graph --topo-order -m -umatthewlmcclure.com/s/2014/01/10/…
ম্যাট ম্যাকক্লিউর

4
মনে রাখবেন আপনি একটি কুশ্রী ভুল পান ( fatal: ambiguous argument 'stash@{0}^3': unknown revision or path not in the working tree.) আপনি না আসলে যে লুকোবার জায়গা মধ্যে untracked ফাইল আছে (কিন্তু ভেবেছিলাম তুমি করেনি)।
র্যান্ডল

4
@antak: না, git stash showনেই না untracked ফাইল (অন্তত Git 2.7.4 জন্য সত্য) দেন:
অনুরোধকে Bérci

4
দ্রষ্টব্য (২.১ -.২-লিনাক্স): git stash popপ্রথমে অবিরত ফাইলগুলি পুনরুদ্ধার করার চেষ্টা করবে এবং তারপরে ট্র্যাক করা ফাইল পুনরুদ্ধারের চেষ্টা করবে। যদি পরবর্তী অপারেশন ব্যর্থ হয় (উদাহরণস্বরূপ দ্বন্দ্ব), প্রথম অপারেশনটি রোলড-ব্যাক হয় না (ফাইলগুলি ডিস্ক থেকে সরানো হয় না তবে অবিরত-ফাইল-স্ট্যাশ থাকবে) তবে আপনি বিরোধটি স্থির করে নিলেও পরবর্তী পপ ব্যর্থ হবে যাইহোক।
মেরিনোজ আন

24

আপনি নিম্নলিখিত আদেশটি দিয়ে সমস্ত স্ট্যাশ কমিটের তালিকা করতে পারেন:

git rev-list -g stash

যেহেতু স্ট্যাশগুলি হেড, ইনডেক্সের 3-উপায়ে মার্জ কমিট হিসাবে উপস্থাপিত হয় এবং অবিরত ফাইলগুলির প্যারেন্ট-কম "রুট" কমিট হিসাবে চিহ্নিত হয় না, ততোধিক ফাইল স্ট্যাশগুলি উপরের আউটপুটটি নীচে পাইপ করে তালিকাভুক্ত করা যায়:

git rev-list -g stash | git rev-list --stdin --max-parents=0

উপরের দরকারী অ্যাপ্লিকেশন:

কেবল চিহ্নবিহীন, স্ট্যাশযুক্ত ফাইলগুলি দেখান

git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git show --stat

অবশ্যই, --statফাইলগুলির বিষয়বস্তু দেখতে অপসারণ করুন ।

একটি নির্দিষ্ট ফাইল সন্ধান করুন

git rev-list -g stash | xargs -n1 git ls-tree -r | sort -u | grep <pattern>

গ্রেপ্তারবিহীন ফাইলগুলি

git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git grep <pattern>

সমস্ত স্ট্যাসের সমস্ত বিষয়বস্তু তালিকাবদ্ধ করুন

git rev-list -g stash | git rev-list --stdin | xargs git show --stat

ধন্যবাদ! আমি যখন Find a specific fileকমান্ডটি ব্যবহার করি , আমি উদাহরণস্বরূপ পাই: 100644 blob 05e25619a6f2649b7d635b5aa897cbfc68a4f15d widget/app.css এখন আমি কীভাবে এই পরিবর্তনগুলি পপ করতে পারি? (কোন স্ট্যাশ এতে রয়েছে তা আমি নিশ্চিত নই)
জন স্মিথ

4
এই হ্যাশটি ফাইল অবজেক্টের জন্য (ব্লব), যাতে আপনি ব্যবহার করতে পারেন git show 05e25619a6f2649b7d635b5aa897cbfc68a4f15d > widget/app.css। ( widget/ডিরেক্টরিটি অবশ্যই উপস্থিত থাকতে হবে, সুতরাং এটি git checkoutকোনও পথস্পেক ব্যবহার করার মতো সুবিধাজনক নয় ))
স্টিভ

এই @ স্টিভ সমাধানের দুর্দান্ত উপায়
জন স্মিথ

10

স্ট্যাশ-এ অনতিযুক্ত ফাইলগুলি তালিকাভুক্ত করতে:

git ls-tree -r stash@{0}^3 --name-only

সমস্ত চিহ্নবিহীন ফাইলের (সম্পূর্ণ সামগ্রী সহ) সম্পূর্ণ আলাদা দেখানোর জন্য:

git show stash@{0}^3

এই কমান্ডগুলি সর্বশেষ (অতি সাম্প্রতিক) স্ট্যাশ পড়বে। পূর্ববর্তী স্ট্যাশগুলির জন্য, "স্ট্যাশ @" এর পিছনে সংখ্যা বৃদ্ধি করুন, উদাহরণস্বরূপ stash@{2}শেষ স্ট্যাশ থেকে দ্বিতীয়টির জন্য।

কারণ এই কাজ যে git stashকোনো মার্জ প্রতিটি লুকোবার জায়গা, যা উল্লেখ করা করা যেতে পারে কমিট সৃষ্টি stash@{0}, stash@{1}ইত্যাদি এই প্রথম পিতা বা মাতা কমিট লুকোবার জায়গা সময় মাথা, দ্বিতীয় পিতা বা মাতা ট্র্যাক ফাইলগুলিতে পরিবর্তন রয়েছে এবং তৃতীয় (যা নাও থাকতে পারে) অচিহ্নযুক্ত ফাইলগুলিতে পরিবর্তন।

এটি "আলোচনা" এর অধীনে ম্যানপেজে আংশিকভাবে ব্যাখ্যা করা হয়েছে ।


6

স্ট্যাশ-এর ​​সমস্ত ফাইলগুলি দেখতে (উভয়ই ট্র্যাকড এবং তালাবিহীন), আমি এই কনফিগারেশনটি আমার কনফিগারেশনে যুক্ত করেছি:

showstash = "!if test -z $1; then set -- 0; fi; git show --stat stash@{$1} && git show --stat stash@{$1}^3 2>/dev/null || echo No untracked files -"

আপনি কোন স্ট্যাশ দেখতে চান তার একক যুক্তি লাগে । নোট করুন এটি এখনও এটি দুটি পিছনে পিছনে তালিকার মধ্যে উপস্থিত হবে।

if...fiঅধ্যায় ব্যাশ যুক্তি পরিবর্তন $ 1 0 যদি কেউ পাস হয়।


5

একটি কার্যনির্বাহী: স্ট্যাশ করার আগে ফাইলগুলি স্টেজিং git stash show -pকরা প্রত্যাশা অনুযায়ী কাজ করবে।

git add .
git stash save

দ্রষ্টব্য: এই উপায়টি ইন্টারেক্টিভ অংশগুলি যুক্ত করার ক্ষমতাও দেয়, কীভাবে তা এখানে
সতর্কতা: নিশ্চিত করুন যে আপনার আগে কাজ মঞ্চায়িত হয়নি, বা আপনি এটি আলাদা করতে সক্ষম হবেন না।
এটি ব্যবহার হতে পারে।

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