কোনও নাম বা স্ক্রিপ্ট লেখার পাশাপাশি, কোনও বিশেষ কমিটের জন্য আলাদা করার জন্য একটি সংক্ষিপ্ত আদেশ রয়েছে?
git diff 15dc8^..15dc8
যদি আপনি কেবল একক প্রতিশ্রুতি আইডি দেন git diff 15dc8
, তবে হেডের বিরুদ্ধে প্রতিশ্রুতিবদ্ধতার চেয়ে আলাদা।
কোনও নাম বা স্ক্রিপ্ট লেখার পাশাপাশি, কোনও বিশেষ কমিটের জন্য আলাদা করার জন্য একটি সংক্ষিপ্ত আদেশ রয়েছে?
git diff 15dc8^..15dc8
যদি আপনি কেবল একক প্রতিশ্রুতি আইডি দেন git diff 15dc8
, তবে হেডের বিরুদ্ধে প্রতিশ্রুতিবদ্ধতার চেয়ে আলাদা।
উত্তর:
ব্যবহার git show $COMMIT
। এটি আপনাকে প্রতিশ্রুতি দেওয়ার জন্য লগ বার্তা এবং সেই বিশেষ প্রতিশ্রুতির ভিন্নতা দেখাবে।
ব্যবহার করুন:
git diff 15dc8^!
গিট-রেভ-পার্স (1) ম্যানপেজ ( বা আধুনিক গিট গিটারভিভিশনস (7) ম্যানপেজ ) এর নিম্নলিখিত খণ্ডে বর্ণিত হিসাবে :
একটি সেট নামকরণের জন্য অন্য দুটি শর্টহ্যান্ডস যা একটি প্রতিশ্রুতিবদ্ধ দ্বারা গঠিত এবং এর পিতামাতার অঙ্গীকারগুলি বিদ্যমান। R1 ^ @ স্বরলিপি অর্থ r1 এর সমস্ত পিতামাতাকে। R1 ^! কমিট r1 অন্তর্ভুক্ত করে তবে এর সমস্ত পিতামাতাকে বাদ দেয়।
এর অর্থ হল আপনি ব্যবহার করতে পারেন 15dc8^!
জন্য একটি সাঁটে লেখার হিসাবে 15dc8^..15dc8
Git যে কোন জায়গায় যেখানে পুনর্বিবেচনা প্রয়োজন হয়। ডিফার্ট কমান্ডের জন্য কম্যান্ডের git diff 15dc8^..15dc8
বোঝা যায় git diff 15dc8^ 15dc8
, যার অর্থ কমিট ( 15dc8^
) এবং কমিট ( 15dc8
) এর পিতামাতার মধ্যে পার্থক্য ।
দ্রষ্টব্য : git-rev-parse(1)
মানচিত্রের বিবরণটি পুনর্বিবেচনার পরিসীমা সম্পর্কে আলোচনা করে , যেখানে একাধিক পিতামাতার সাথে একত্রীকরণের জন্যও এটির কাজ করা প্রয়োজন। তারপরে r1^!
" r1 --not r1^@
" অর্থাৎ " r1 ^r1^1 ^r1^2 ...
"
এছাড়াও, আপনি git show COMMIT
কমিটের বিবরণ পেতে এবং কমিটের জন্য আলাদা করতে ব্যবহার করতে পারেন । আপনি যদি কেবল ভিন্নতা চান তবে আপনি ব্যবহার করতে পারেনgit diff-tree -p COMMIT
^!
পিতা বা মাতা সাঁটে লেখার স্বরলিপি স্বাভাবিক করে জন্য difftool সাথে যথাযথভাবে কাজ করে কিন্তু পরিবর্তন একত্রীকরণ করে জন্য বিপরীত। কেন এমন?
যদি আপনি কতটা পিছন থেকে জানেন তবে আপনি এর মতো কিছু চেষ্টা করতে পারেন:
# Current branch vs. parent
git diff HEAD^ HEAD
# Current branch, diff between commits 2 and 3 times back
git diff HEAD~3 HEAD~2
পূর্বে এইরকম কিছু কাজের প্রতিশ্রুতিবদ্ধ:
# Parent of HEAD
git show HEAD^1
# Grandparent
git show HEAD^2
কমিটগুলি নির্দিষ্ট করতে পারেন এমন অনেকগুলি উপায় রয়েছে:
# Great grandparent
git show HEAD~3
বিশদ জন্য এই পৃষ্ঠা দেখুন ।
@ মিপাদি যেমন উল্লেখ করেছেন, আপনি ব্যবহার করতে পারেন git show $COMMIT
তবে এটি কিছু শিরোনাম এবং প্রতিশ্রুতি বার্তাও দেখায়। আপনি যদি একটি সরাসরি পার্থক্য চান, ব্যবহার করুন git show --pretty=format:%b $COMMIT
।
এটি স্পষ্টতই খুব ছোট হাত নয়, তাই আমি এই উপনামটি আমার .gitconfig এ রাখছি
[alias]
sd = show --pretty=format:%b
এটি আমার ব্যবহার করতে সক্ষম git sd $COMMIT
করার জন্য পরিবর্তন দেন ।
উল্লিখিত উদাহরণগুলির মধ্যে অনেকগুলি (উদাহরণস্বরূপ git diff 15dc8^!
, বা git diff 15dc8^..15dc8
) আপনি zsh ব্যবহার করছেন এবং extendedglob
বিকল্প সেট রেখে কাজ করেন না। আপনি নিম্নলিখিত তিনটি পদ্ধতির একটি দ্বারা এটি ঠিক করতে পারেন:
unsetopt extendedglob
(এবং / অথবা এটি .zshrc থেকে সরান)
setopt NO_NOMATCH
(এবং / অথবা এটিকে .zshrc এ সেট করুন)
ক্যারেট থেকে বেরিয়ে আসুন এবং প্রতিবার ব্যাকস্ল্যাশ দিয়ে ঠুং শব্দ করুন git diff 15dc8\^\!
git diff 15dc8 15dce~1
~ 1 এর অর্থ 'পিতামাতা', ~ 2 'পিতামহ ইত্যাদি etc.
উপরের পলের সমাধান আমি যা আশা করছিলাম তা করেছিল did
$ git diff HEAD^1
এছাড়াও, উল্লেখ করা শখগুলির মতো উপকরণ যুক্ত করা দরকারী, যদি আপনি নিম্নলিখিতটি আপনার alias / .gitconfig ফাইলের [عرف] বিভাগে রাখেন তবে আপনি মাথা এবং পূর্বের মধ্যে পার্থক্য দেখতে সংক্ষিপ্ত হাত ব্যবহার করতে পারেন।
[alias]
diff-last = diff HEAD^1
তারপরে it গিট ডিফ-লাস্ট চালানো আপনাকে আপনার ফলাফল এনে দেবে। নোট করুন যে এর মধ্যে এমন কোনও পরিবর্তন অন্তর্ভুক্ত থাকবে যা আপনি এখনও প্রতিশ্রুতিবদ্ধ হননি এবং পাশাপাশি কমিটগুলির মধ্যে পার্থক্যও অন্তর্ভুক্ত করবেন। আপনি যদি এখনও প্রতিশ্রুতিবদ্ধ না এমন পরিবর্তনগুলি উপেক্ষা করতে চান , তবে আপনি সরাসরি তার পিতামাতার সাথে হেডের তুলনা করতে ডিফ ব্যবহার করতে পারেন:
$ git diff HEAD^1 HEAD
উপকরণ ব্যবহার করে, তাই আপনার প্রশ্নের সঠিক উত্তর দেয় না তবে আপনি যা চান তা করার জন্য আমি এগুলি দরকারী বলে মনে করি ...
alias gitdiff-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitlog-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"