গিট ব্যবহার করে আমি কীভাবে স্থানীয় এবং দূরবর্তীগুলির মধ্যে পরিবর্তনগুলি খুঁজে পেতে পারি


152

এখানে দুটি ভিন্ন প্রশ্ন রয়েছে তবে আমি মনে করি তারা সম্পর্কিত।

  1. গিট ব্যবহার করার সময়, আমি কীভাবে খুঁজে পাব যে আমি স্থানীয়ভাবে কোন পরিবর্তনগুলি করেছি, তবে এখনও কোনও প্রত্যন্ত শাখায় ঠেলাচ্ছি না? আমি মার্কুরিয়াল কমান্ডের অনুরূপ কিছু সন্ধান করছি hg outgoing

  2. গিট ব্যবহার করার সময়, আমি কীভাবে খুঁজে পাব যে টান দেওয়ার আগে কোনও দূরবর্তী শাখায় কী পরিবর্তন হয়েছিল? আমি মার্কুরিয়াল কমান্ডের অনুরূপ কিছু সন্ধান করছি hg incoming

দ্বিতীয়টির জন্য: কী কী উপলভ্য আছে তা দেখার উপায় আছে এবং তারপরে চেরি-বাছাই করা পরিবর্তনগুলি আমি টানতে চাই?


11
উত্তরগুলি খুঁজছেন, কিছু hg incomingএবং hg outgoingআসলে কী তা নিয়ে কিছুটা বিভ্রান্তি রয়েছে বলে মনে হচ্ছে । নিকটতম গিট সমতুল্য আমি খুঁজে পেয়েছি --dry-runবিকল্প। কেবলমাত্র git pull --dry-runএবং আপনি ঘটতে হবে এমন সমস্ত জিনিসের একটি তালিকা দেখতে পাবেন।
রোমান স্টারকভ

উত্তর:


97

গিট নেটওয়ার্কের মাধ্যমে এই জাতীয় তথ্য প্রেরণ করতে পারে না, যেমন এইচজি করতে পারে। তবে আপনি আপনার রিমোট সার্ভারগুলি থেকে নতুন কমিট আনতে চালাতে git fetch(যা এর hg pullচেয়ে বেশি ভালো hg fetch) can

সুতরাং, চলার পরে আপনার যদি একটি শাখা কল করা হয় masterএবং একটি রিমোট কল হয় origin, আপনারও git fetchএকটি শাখা কল করা উচিত origin/master। এর পরে আপনি পেতে পারেন git logসব করে যে masterএকটি সুপারসেটও করা প্রয়োজন origin/masterকরে git log master..origin/master। বিপরীত পেতে এই দুটি বিপরীত।

আমার এক বন্ধু ডেভিড ডলার অনুকরণ করার জন্য বেশ কয়েকটি গিট শেল স্ক্রিপ্ট তৈরি করেছে hg incoming/outgoing। আপনি এগুলিকে http://github.com/ddollar/git-utils এ খুঁজে পেতে পারেন ।


113

গীত 1.7.0 থেকে শুরু করে সেখানে একটি বিশেষ সিনট্যাক্স আপনি জেনেরিক মূল প্রজেক্টের শাখা পড়ুন করার মঞ্জুরি দেয়: @{u}বা @{upstream}

নকল করতে hg incoming:

git log ..@{u}

নকল করতে hg outgoing:

git log @{u}..

উপরেরটি ব্যবহার করা সহজ করার জন্য আমি নিম্নলিখিত incomingএবং outgoingউপাত্তগুলি ব্যবহার করি:

git config --global alias.incoming '!git remote update -p; git log ..@{u}'
git config --global alias.outgoing 'log @{u}..'

গিট লগ .. @ {u me আমাকে এই ত্রুটিগুলি দেয়। (আমার গিট কনফিগারেশনে আমার উত্স এবং একটি প্রবাহের সংগ্রহস্থল উভয়ই রয়েছে)। ত্রুটি: '' ত্রুটির জন্য কোনও প্রবাহ শাখা খুঁজে পাওয়া যায়নি: '..' ত্রুটির জন্য কোনও উজানের শাখা পাওয়া যায় নি: '..' মারাত্মক: দ্ব্যর্থক আর্গুমেন্ট '.. @ {u}': অজানা সংশোধন বা পথ এতে নেই কাজের গাছ। সংশোধন থেকে পাথ পৃথক করতে '-' ব্যবহার করুন
হেনরিক

6
আপনার স্থানীয় শাখা একটি প্রবাহের সাথে কনফিগার করা না থাকলে আপনি এই ত্রুটিগুলি পেয়ে যাবেন। ঠিক করতে, চালান git branch --set-upstream foo origin/foo
রিচার্ড হ্যানসেন

git log @{u}..আমার জন্য রেপোতে প্রতিটি পরিবর্তন তালিকাভুক্ত করে। তাদের অস্তিত্ব নেই এমন কোনও উপায় নেই।
রোমান স্টারকভ

@ ক্রমিনস: আপনার স্থানীয় শাখার পক্ষে উজ প্রবাহ হিসাবে ভুল দূরবর্তী শাখাটি কনফিগার করা সম্ভব। git rev-parse --symbolic-full-name @{u}যথাযথ দূরবর্তী রেফারেন্স প্রিন্ট করে তা নিশ্চিত করুন । এছাড়াও, git log @{u}..আপস্টিম শাখার মাধ্যমে যেগুলি সম্পাদনযোগ্য নয় এমন কমিটগুলি দেখায়, যার মধ্যে ইতিমধ্যে দূরবর্তী সংগ্রহস্থলে থাকা কমিটগুলি অন্তর্ভুক্ত থাকতে পারে (যদি তারা কোনও আলাদা রেফারেন্সের মাধ্যমে পৌঁছতে পারে)। আপনি ইতিমধ্যে ধাক্কা দেওয়া শাখায় মার্জ হওয়ার পরে ঠিক এটি ঘটবে।
রিচার্ড হ্যানসেন

@ রিচার্ডহানসান আমি আশঙ্কা করছি যে আমি দূরবর্তী রেফারেন্সের জন্য উপযুক্ত কি তা জানার পক্ষে খুব কমই নই, তবে এটি একটি সদ্য ক্লোন করা রেপো ছিল যার উপরে আমি কেবল একটি checkout <somebranch>এবং করেছি merge <otherbranch>। এই মুহুর্তে, আমি যা করেছি log @{u}..এবং প্রতিটি পরিবর্তন তালিকাভুক্ত দেখেছি।
রোমান স্টারকভ

42

পুরো উত্তর নয় তবে গিট ফেচ দূরবর্তী রেপো টানবে এবং মার্জ করবে না। আপনি তারপর একটি করতে পারেন

গিট ডিফার্টার মাস্টার উত্স / মাস্টার


1
আমার জন্য কাজ করেছেন (তবে অন্যভাবে) -git diff origin/master master
নিক গ্রেইলি

34
  1. "গিট লগ অরিজিন..ইইএইডি" ব্যবহার করুন

  2. "গিট ফেইচ" ব্যবহার করুন "গিট লগ HEAD..origin" এর পরে। আপনি তালিকাবদ্ধ কমিট আইডি ব্যবহার করে পৃথক কমিটিকে চেরি-বাছাই করতে পারেন।

উপরের অনুমানগুলি অবশ্যই, সেই "উত্স" আপনার দূরবর্তী ট্র্যাকিং শাখার নাম (এটি যদি আপনি ডিফল্ট বিকল্পগুলির সাথে ক্লোন ব্যবহার করেছেন) used


3
(এবং যদি আপনি দূরবর্তী শাখাটি সন্ধান না করেন তবে এটি "গিট লগ অরিজিন / মাস্টার..হ্যাড"))
প্লিন্ডবার্গ

4
"উত্স" দূরবর্তী ট্র্যাকিং শাখার নাম নয়, এটি রিমোটের নাম। এবং কেবলমাত্র দূরবর্তী নামটি কাজ করে না তা নির্দিষ্ট করে আপনাকে রিমোট ট্র্যাকিং শাখাটি নির্দিষ্ট করতে হবে যা মূল / মাস্টার হবে।
25:56

22

সমস্ত শাখার তুলনা করার জন্য এটিও রয়েছে:

git log --branches --not --remotes=origin

গিট লগ ম্যান পৃষ্ঠাটি এটি সম্পর্কে এটি বলে:

স্থানীয় কোনও শাখায় থাকা তবে উত্সের জন্য কোনও দূরবর্তী ট্র্যাকিং শাখায় নয় এমন সমস্ত প্রতিশ্রুতি দেখায় (যা আপনার কাছে এটির উত্স নেই)।

উপরের জন্য outgoing। জন্য incoming, কেবল অদলবদল:

git log --remotes=origin --not --branches

8

আমি করবো

$ git fetch --dry-run

জন্য hg incomingএবং

$ git push --dry-run

জন্য hg outgoing


দুঃখিত, আমি উপেক্ষা করেছি যে এটি ইতিমধ্যে ওপিতে একটি মন্তব্য হিসাবে বলা হয়েছিল।
ক্রিস

1

গিট-আউট হ'ল একটি স্ক্রিপ্ট যা hg outgoingবেশ নির্ভুলভাবে অনুকরণ করে । এটি "পুশ-এন" আউটপুটকে বিশ্লেষণ করে, সুতরাং আপনাকে চাপ দেওয়ার জন্য অতিরিক্ত যুক্তি নির্দিষ্ট করার প্রয়োজন হলে এটি সঠিক আউটপুট উত্পাদন করে।


0

গিট ইনকামিং

$ git fetch && git log ..origin/master --stat
OR
$ git fetch && git log ..origin/master --patch

গিট আউটগোয়িং

$ git fetch && git log origin/master.. --stat
OR
$ git fetch && git log origin/master.. --patch

0

"গিট লগ" এবং @ {u} উত্তরগুলি যখন প্রাথমিকভাবে আমাকে "অজানা সংশোধন" ত্রুটি দেয় তখন আমি ক্রিস / রোমকেন্সের পরামর্শটি চেষ্টা করে দেখি git push --dry-run

আপনি "5905..4878 মাস্টার-> মাস্টার" এর মতো আউটপুট পাবেন। 5905 হ'ল সর্বশেষ প্রতিশ্রুতি যা রিমোটটি করেছে এবং প্রতিশ্রুতিবদ্ধ (এবং সহ) 4878 দূরবর্তীটিতে প্রয়োগ করা হবে।

তারপরে আপনি আরও বিশদ পেতে আরও বেশ কয়েকটি গিট কমান্ডের তর্ক হিসাবে 5905..4878 ব্যবহার করতে পারেন:

git diff 5905..4878 # Gives full code changes in diff style

git log --online 5905..4878 # Displays each commit's comment

-1

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

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