কোন শাখায় ফাইলগুলি পরিবর্তিত হয়েছে তা দেখার কোনও উপায় আছে কি?
কোন শাখায় ফাইলগুলি পরিবর্তিত হয়েছে তা দেখার কোনও উপায় আছে কি?
উত্তর:
@ মার্কো পন্টির উত্তরের বিকল্প, এবং চেকআউট এড়ানো:
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
যদি আপনার নির্দিষ্ট শেলটি $ () নির্মাণ বুঝতে না পারে তবে তার পরিবর্তে ব্যাক-টিক ব্যবহার করুন।
git diff --name-only <some-other-branch>
আপনার বর্তমান শাখা এবং এর মধ্যে ফাইলগুলি কী আলাদা তা আপনাকে দেখাবে <some-other-branch>
। সুতরাং এটি মূলত একই কমান্ড, তবে দ্রষ্টব্য যে আপনি যে কোনও দুটি শাখার মধ্যে পৃথক পৃথক পৃথক ফাইলগুলি সন্ধানের জন্য এটি ব্যবহার করতে পারেন , এমনকি সেগুলি দূরবর্তীভাবে সম্পর্কিত না হলেও। সেই তুলনাটি কার্যকর কিনা বা তা আপনার শাখাগুলির টপোলজির উপর নির্ভর করে ... এছাড়াও, দ্রষ্টব্য <some-other-branch>
সত্যই আদৌ কোনও প্রতিশ্রুতিবদ্ধ হতে পারে, বা যে কোনওটির সমাধান (ট্যাগস ইত্যাদি) হতে পারে।
<notMainDev>
এবং <MY_CURRENT_CO_BRANCH>
সম্প্রতি একটি সাধারণ পূর্বপুরুষ ছিল এবং <notMainDev>
সেই পূর্বপুরুষের সাথে তুলনা করে। আপনাকে আপনার বর্তমান শাখার নাম সরবরাহ করতে হবে, যদিও git merge-base
দুটি আর্গুমেন্টের প্রত্যাশা হিসাবে - কমপক্ষে বর্তমান সংস্করণে একটি শর্টকাট নেই।
git branch | grep '\*' | awk '{print $2}'
যা <নোটমেনডিভ> এবং আমার বর্তমান শাখার মধ্যে শাখার জন্য প্রতিশ্রুতি পাবে। আমি তখন গিট ডিফ করতে পারি - নাম-কেবলমাত্র <নোটমেনডেভ> $ (গিট মার্জ-বেস <নট মেইনডেভ> git branch | grep '\*' | awk '{print $2}'
)
আপনাকে যা করতে হবে তা হ'ল:
git checkout <notMainDev>
git diff --name-only <mainDev>
এটি আপনাকে কেবলমাত্র দুটি ফাইল শাখার মধ্যে থাকা ফাইলের নামগুলি দেখায়।
<mainDev>
শাখাগুলি হ'ল, যেহেতু পরিবর্তিত হয়েছে এমন স্টাফগুলিও প্রদর্শন করবে । git diff --name-only <sha-of-branch-point>
পরিবর্তে আপনি ব্যবহার করতে চাইতে পারেন , বা আমার পোস্ট করা বিকল্প উত্তর দেখুন যা চেকআউটটি এড়িয়ে চলে।
notMainDev
ধরেই নিয়েছিলাম যে মেইনডেভ কমিটস এর সাথে আপ টু ডেট থাকবে ... যদিও সাধারণত এই পার্থক্যগুলি দেখতে আমি দরকারী মনে করি।
<sha-of-branch-point>
দিয়েgit rev-parse <branch-name>
এখনও অবাক হয়ে বলা হয়নি!
git diff master...branch
সুতরাং পরিবর্তনগুলি কেবলমাত্র দেখুন branch
বর্তমান শাখার ব্যবহার পরীক্ষা করতে
git diff master...
ধন্যবাদ jqr
এটি সংক্ষিপ্ত হাত
git diff $(git merge-base master branch) branch
সুতরাং মার্জ বেস (শাখাগুলির মধ্যে সর্বাধিক সাধারণ প্রতিশ্রুতি) এবং শাখা টিপ
এছাড়াও কেবলমাত্র মাস্টারের পরিবর্তে উত্স / মাস্টার ব্যবহার আপনার স্থানীয় মাস্টারটির তারিখপ্রাপ্ত হওয়ার ক্ষেত্রে সহায়তা করবে
git diff --name-only master..
আপনি যদি কেবল দুটি শাখার মধ্যে পৃথক ফাইলগুলির নাম চান want
আমি বিশ্বাস করতে পারি না এটি করার অনেকগুলি উপায় আছে। আমি কেবল নিম্নলিখিত যুক্তি দিয়ে আগে কেউ পোস্ট করা হিসাবে কী পরিবর্তন হয়েছিল তা ব্যবহার করি:
git whatchanged --name-only --pretty="" origin..HEAD
এটি কেবল ফাইলের নামগুলি এবং বর্তমান শাখায় পরিবর্তিত কেবলমাত্র তালিকাভুক্ত করে।
আমি টাওয়ালবার্গের উত্তরটি সত্যিই পছন্দ করেছি তবে আমি বর্তমান শাখার নামটি সর্বদা টাইপ করতে চাইনি। সুতরাং আমি এটি ব্যবহার করছি:
git diff --name-only $(git merge-base master HEAD)
git diff master... --name-only
লক্ষ্য শাখায় চালানোর সময় ব্যবহার করেছি এবং একই ফল পেয়েছি । আপনার উত্তর এবং আমি যে কমান্ড দিয়েছি তার মধ্যে ভাল বনাম খারাপের কোনও প্রতিক্রিয়া জানাতে কি আপনি এত দয়াবান হতে পারেন?
git diff master.. --name-only
(দ্রষ্টব্য 3 এর পরিবর্তে কেবল 2 টি বিন্দু রয়েছে)। বিন্দুগুলির অর্থ বোঝার জন্য, এই উত্তরটি দেখুন
git diff --name-only master...branch-name
যা আমরা তুলনা করতে চান।
যদি এটি এত সহজ হতে পারে?
git changed
আপনি যদি ধরে নিতে ইচ্ছুক হন যে মূল শাখাটিকে "মাস্টার" বলা হয় এবং আপনি মাস্টার থেকে আপনার অন্যান্য শাখা তৈরি করেন, তবে ~/.gitconfig
এটি সহজ করার জন্য আপনি এই ফাইলটিকে নিজের ফাইলটিতে যুক্ত করতে পারেন:
cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"
এই অনুমানগুলি বেশিরভাগ পরিস্থিতিতে বেশিরভাগ মানুষের পক্ষে কাজ করবে তবে আপনি অবশ্যই সে সম্পর্কে সচেতন হন।
এছাড়াও, আপনাকে অবশ্যই একটি শেল ব্যবহার করবে যা সমর্থন করে $()
। এটি খুব সম্ভবত আপনার শেল এটি সমর্থন করে ।
git show --stat origin/branch_name
এটি আপনাকে এই শাখার অধীনে যুক্ত করা বা সংশোধিত ফাইলগুলির একটি তালিকা দেবে।
কিছু কারণে কেউ উল্লেখ করেনি git-tree
। Https://stackoverflow.com/a/424142/1657819 দেখুন
git-tree
এটি পছন্দসই কারণ এটি একটি নদীর গভীরতানির্ণয় আদেশ; প্রোগ্রামেটিক (এবং, সম্ভবত, দ্রুত) বোঝানো হয়েছে
(ধারনা বেস শাখা হয় master
)
git diff-tree --no-commit-id --name-only -r master..branch-name
তবে এটি আপনাকে শাখায় প্রভাবিত সমস্ত ফাইল দেখিয়ে দেবে, আপনি যদি কেবল স্পষ্টভাবে পরিবর্তিত ফাইলগুলি দেখতে চান তবে আপনি ব্যবহার করতে পারেন --diff-filter
:
git diff-tree --no-commit-id --name-only -r master..branch-name --diff-filter=M
এছাড়াও ফাইলগুলির স্থিতি ( / / এবং আরও) দেখার --name-status
পরিবর্তে কেউ ব্যবহার করতে পারেন--name-only
A
M
D
rubocop --fail-level error $(git diff-tree --no-commit-id --name-only -r origin/master..HEAD --diff-filter=M)
গৃহীত উত্তর - git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
- খুব নিকটে, তবে আমি লক্ষ্য করেছি যে এটি মুছে ফেলার জন্য স্থিতিটি ভুল পেয়েছে । আমি একটি শাখায় একটি ফাইল যুক্ত করেছি এবং তবুও এই আদেশটি (ব্যবহার করে --name-status
) আমি "এ" স্থিতি মুছে ফেলা ফাইলটি দিয়েছি এবং সেই ফাইলটি "ডি" স্থিতি যুক্ত করেছি।
পরিবর্তে আমাকে এই আদেশটি ব্যবহার করতে হয়েছিল:
git diff --name-only $(git merge-base <notMainDev> <mainDev>)
নীচের ব্যাচ ফাইলটি টোভলবার্গের উত্তরের উপর ভিত্তি করে তবে উইন্ডোজটিতে কাজ করবে:
@ECHO OFF
C: :: <== OR USE A DIFFERENT DRIVE
CD \path\to\where\git\files\are :: <== CHANGE TO THE ACTUAL PATH
SET /p b="Enter full path of an ALREADY MERGED branch to compare with origin/master: "
bash --login -i -c "git diff --name-only %b% $(git merge-base %b1% origin/drop2/master)"
PAUSE
উপরেরটি ধরে নেওয়া হয়েছে যে মূল শাখাটি উত্স / মাস্টার এবং গিট ইনস্টল করার সময় সেই গিট ব্যাশ অন্তর্ভুক্ত ছিল (এবং এর অবস্থানটি পথের পরিবেশে রয়েছে)। কনফিগার করা ডিফ টুল (kdiff3) ব্যবহার করে আমার প্রকৃত পার্থক্যগুলি দেখানোর দরকার হয়েছিল যাতে উপরের নীচের ব্যাশ কমান্ডটি প্রতিস্থাপন করা হয়:
bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"