গিটের একটি শাখায় কীভাবে পরিবর্তনগুলি পাওয়া যায়


264

বর্তমান শাখা থেকে ব্রাঞ্চ হওয়ার সময় থেকে কোনও শাখায় কমিটের লগ পাওয়ার সর্বোত্তম উপায় কী? আমার সমাধান এখন পর্যন্ত:

git log $(git merge-base HEAD branch)..branch

গিট-ডিফের জন্য ডকুমেন্টেশন ইঙ্গিত দেয় যে git diff A...Bএর সমতুল্য git diff $(git-merge-base A B) B। অন্যদিকে, গিট-রেভ-পার্সের জন্য ডকুমেন্টেশন ইঙ্গিত করে যে r1...r2হিসাবে সংজ্ঞায়িত করা হয়েছে r1 r2 --not $(git merge-base --all r1 r2)

এগুলি আলাদা কেন? নোট যেটি git diff HEAD...branchআমাকে চাই তার বিচ্ছিন্নতা দেয় তবে সংশ্লিষ্ট গিট লগ কমান্ড আমাকে যা চাই তার চেয়ে বেশি দেয়।

ছবিগুলিতে, ধরুন:

         এক্স --- Y --- z- র --- শাখা
        /
--- একটি --- খ --- গ --- ঘ --- ই --- মস্তক

আমি এক্স, ওয়াই, জেড করে একটি লগ পেতে চাই।

  • git diff HEAD...branch এই কমিট দেয়
  • তবে, git log HEAD...branchx, y, z, c, d, e দেয়।

আমি যা দেখতে পাচ্ছি তার থেকে আপনি নিজের উদ্দেশ্যে ভুলভাবে "গিট লগ" ব্যবহার করছেন। আমি নীচে আমার উত্তর যোগ করেছেন।
প্লেগহ্যামার

উত্তর:


186

একটি সংশোধন তালিকার প্রসঙ্গে A...Bএটি কীভাবে git-rev-parseসংজ্ঞায়িত হয়। গিট-লগ একটি পুনর্বিবেচনার তালিকা নেয়। git-diffসংশোধনগুলির একটি তালিকা গ্রহণ করে না - এটি এক বা দুটি সংশোধনী গ্রহণ করে এবং A...Bসিনট্যাক্সটি এটি git-diffম্যানপেজে কীভাবে সংজ্ঞায়িত করা হয়েছে তার অর্থ সংজ্ঞায়িত করেছে । যদি git-diffস্পষ্টভাবে সংজ্ঞায়িত না করা হয় A...B, তবে সেই বাক্য গঠনটি অবৈধ। নোট করুন যে git-rev-parseম্যানপেজটি A...B"সুনির্দিষ্ট রেঞ্জ" বিভাগে বর্ণিত হয়েছে এবং সেই বিভাগের সমস্ত কিছুই কেবলমাত্র এমন পরিস্থিতিতে বৈধ যেখানে সংশোধন সীমাটি বৈধ (যেমন যখন পুনর্বিবেচনার তালিকাটি পছন্দসই হয়)।

মাত্র x, y এবং z সহ একটি লগ পাওয়ার জন্য চেষ্টা করুন git log HEAD..branch(দুটি বিন্দু, তিনটি নয়)। এটি অভিন্ন git log branch --not HEADএবং এর অর্থ শাখায় সমস্ত প্রতিশ্রুতি যা হেডে নেই।


31
বাহ, এটা বিভ্রান্তিকর। দেখা যাচ্ছে যে "গিট ডিফার হেড.. ব্রাঞ্চ" ব্যবহার করে সমস্ত কমিট (x, y, z, c, d, e) দেখা যায়, তবে "গিট লগ হেড..ব্র্যাঞ্চ" আমি যা করতে চাই ঠিক তা করে এবং কেবল x, y দেখায় , জেড! এটি "..." ব্যবহারের ঠিক বিপরীত।
গ্রেগ হিউগিল

22
git diff HEAD..branchঅনুরূপ git diff HEAD branch। এখানে মনে রাখার মূল বিষয়টি হ'ল লগটি পুনর্বিবেচনার তালিকা / ব্যাপ্তি নেয়, তবে ভিন্ন হয় না। এজন্য তারা তাদের আরগগুলি অন্যরকম আচরণ করে।
লিলি বালার্ড

4
দেখে মনে হচ্ছে git diff HEAD...branch(তিনটি বিন্দু)git log HEAD..branch
জেচুকের

72
git cherry branch [newbranch]

আপনি masterশাখায় থাকাকালীন যা চান তা ঠিক করে দেয় ।

আমিও খুব পছন্দ করি:

git diff --name-status branch [newbranch]

যা আপনি যা চেয়েছিলেন ঠিক তা নয় তবে একই প্রসঙ্গে এখনও খুব কার্যকর।


8
'গিট চেরি' কমিট আইডির একটি তালিকা আউটপুট করে। আমি কি প্রতিশ্রুতিবদ্ধ সমস্ত পরিবর্তনকে একত্রে পরিবর্তিত করতে পারি?
জোনাথন হার্টলি

1
git cherryসত্যিই খুব দরকারী। ধন্যবাদ :)
jkp

2
@ জোনাথন হার্টলি কমিট আইডিগুলির মতো প্রথম এবং শেষের মতো নিন এবং এগুলিকে নিক্ষেপ করুন gif-diff: git diff x..zবা আমার নিজের উদাহরণের জন্য এটি git diff 13bc4d..8eda3a
তোয়াই

3
আপনার কমান্ডে কোন কোডটি প্রতিস্থাপন করা উচিত তা বোঝা মুশকিল যে কোনও শাখা বা নিউব্র্যাঞ্চের একটি কী-ওয়ার্ড এবং যা কাস্টম শাখার নামের সাথে প্রতিস্থাপন করা উচিত
pal4 Life

37

আপনি যা দেখতে চান তা হল বহির্গামী কমিটগুলির তালিকা। আপনি এটি ব্যবহার করে করতে পারেন

git log master..branchName 

অথবা

git log master..branchName --oneline

যেখানে আমি ধরে নিয়েছি যে "ব্রাঞ্চনাম" "মাস্টার" এর ট্র্যাকিং শাখা হিসাবে তৈরি হয়েছিল।

একইভাবে, আগত পরিবর্তনগুলি দেখতে আপনি ব্যবহার করতে পারেন:

git log branchName..master

1
@ এ বি বি, যদি ব্রাঞ্চনাম বাদ দেওয়া হয় তবে এটি "মাথা" এর উপর ডিফল্ট হয়, যা উপরের উদাহরণে কার্যকরভাবে ব্র্যাঞ্চনাম।
প্লেগহ্যামার

25

এটি আমি পোস্ট করা উত্তরের মতোই: একটি গিট পুশের পূর্বরূপ দেখুন

আপনার বাশ প্রোফাইলে এই ফাংশনগুলি ফেলে দিন:

  • gbout - গিট শাখা আউটগোয়িং
  • gbin - গিট শাখা আগত

আপনি এটি ব্যবহার করতে পারেন:

  • মাস্টারটিতে থাকলে: গিবিন ব্রাঞ্চ 1 <- এটি আপনাকে শাখা 1 এ যা দেখায় এবং মাস্টারে নেই তা দেখায়
  • মাস্টারটিতে থাকলে: গ্যাবাউট শাখা 1 <- এটি আপনাকে দেখাবে যে মাস্টার যা শাখা 1 এ নেই

এটি যে কোনও শাখার সাথে কাজ করবে।

function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

function gbin {
    echo branch \($1\) has these commits and \($(parse_git_branch)\) does not
    git log ..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

function gbout {
    echo branch \($(parse_git_branch)\) has these commits and \($1\) does not
    git log $1.. --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

16

অ্যালেক্স ভি এর এবং এনডাভিস এর মতো বেশ কয়েকটি উত্তরের অনুরূপ, তবে সেগুলির কোনওোটাই একরকম নয়।

ইতিমধ্যে প্রশ্নে শাখায় যখন

ব্যবহার:

git diff master...

যা বেশ কয়েকটি বৈশিষ্ট্য সমন্বয় করে:

  • এটি সুপার সংক্ষিপ্ত
  • প্রকৃত পরিবর্তনগুলি দেখায়

হালনাগাদ:

এটি সম্ভবত হওয়া উচিত git diff master, তবে এটি পৃথকটিও দেখায়, উল্লিখিত প্রশ্ন অনুসারে কমিট করে না।


1
আপনি git co master; git pullযখন থেকে এই শাখাটি তৈরি করেছেন, git diff masterতবে নির্দিষ্ট শাখায় কমিট করে কেবলমাত্র তফাতগুলি চালু করার জন্য খুব বেশি ব্যবহার হবে না।
সাহসী

1
বা শাখাগুলি স্পষ্টভাবে নির্দিষ্ট করতে: git diff <branch1>...<branch2>প্রবর্তিত পরিবর্তনগুলি প্রদর্শন করবে branch2
অ্যালেক্স

10

কিছু ফাইল পরিবর্তন দেখতে সেখানে একটি -p ছুড়ে দিন

git log -p master..branch

কিছু উপকরণ করুন:

alias gbc="git branch --no-color | sed -e '/^[^\*]/d' -e 's/* \\(.*\\)/\1/'"

alias gbl='git log -p master..\`gbc\`'

একটি শাখার অনন্য কমিট দেখুন:

gbl

6

মাস্টার শাখা বন্ধ করার পর থেকে বর্তমান শাখার লগটি দেখতে:

git log master...

আপনি যদি বর্তমানে মাস্টারটিতে থাকেন তবে কোনও ভিন্ন শাখার লগ দেখতে মাস্টারটি বন্ধ করে দেওয়া হয়েছে:

git log ...other-branch


4
git log --cherry-mark --oneline from_branch...to_branch

(3 ডটস) তবে কখনও কখনও এটি '=' এর পরিবর্তে '+' দেখায়


3 টি বিন্দু দুটি শাখায় প্রথম প্রতিশ্রুতি দেখায় যখন দুটি করে না।
টিজে বিডল

2

আমি পেয়েছি

git diff <branch_with_changes> <branch_to_compare_to>

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

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