পূর্ববর্তী প্রতিশ্রুতি পরীক্ষা করে কীভাবে সর্বশেষ প্রতিশ্রুতিতে ফিরে আসবেন?


475

আমি কখনও কখনও পরীক্ষা বা পরীক্ষার জন্য কোডটির পূর্ববর্তী কিছু সংস্করণ পরীক্ষা করে দেখি। আমি পূর্ববর্তী কমিটগুলি সংশোধন করতে চাইলে করণীয় সম্পর্কে নির্দেশাবলী দেখেছি - তবে ধরুন আমি কোনও পরিবর্তন করি না। আমি উদাহরণস্বরূপ করার পরে, আমি git checkout HEAD^কীভাবে শাখার ডগায় ফিরে যাব? .. git logআর আমাকে সর্বশেষ প্রতিশ্রুতির এসএইচএ দেখায় না।


11
সংক্রান্ত git logআপনার প্রশ্নের বাক্য, আপনি সবসময় চালাতে পারেন git log --all(বা আরো গুরুত্বপূর্ণভাবে, git log --oneline --graph --all)।
ওয়াইল্ডকার্ড

উত্তর:


605

আপনি যদি যে প্রতিশ্রুতিতে ফিরে যেতে চান তা যদি কোনও শাখার প্রধান হয় বা ট্যাগ হয় তবে আপনি ঠিক করতে পারেন

git checkout branchname

git reflogঅতীতে আপনার হেড (বা অন্য কোনও রেফ) কী কী নির্দেশ করেছে তা দেখতে আপনিও ব্যবহার করতে পারেন।


যুক্ত করতে সম্পাদিত:

গীতের নতুন সংস্করণগুলিতে , আপনি একবার git checkoutচালানোর জন্য যদি কেবল দৌড়ে বা অন্য কিছু হয়ে থাকেন তবে HEADআপনি এটি করতেও পারেন

git checkout -

শেষ চেকআউটের আগে যেখানে ছিল সেখানে ফিরে যেতে। এটি শেল আইডিয়ামের সাদৃশ্য দ্বারা অনুপ্রাণিত হয়েছিল cd -যা পূর্বে যে কোনও কার্যনির্বাহী ডিরেক্টরি ছিল সেটিতে ফিরে যেতে।


27
আমি উল্লেখ করতে চাই যে আদর্শ উদাহরণটি হবে "গিট চেকআউট মাস্টার"। আমি গিট ব্যবহার করতে শিখেছি এমন একটি অসুবিধা হ'ল কোন নির্দিষ্ট কীওয়ার্ডগুলি (উদাহরণস্বরূপ "মাস্টার") না জেনে আমি আসলে "ব্রাঞ্চনাম" এর মতো স্থানধারক শব্দের স্থান নিতে পারি।
অ্যাবপ্যারেন্স

3
masterআসলে কোনও ধরণের কীওয়ার্ড নয়, উপায় HEAD। এটি একটি নতুন ভাণ্ডারে কেবলমাত্র ডিফল্ট শাখার নাম। আপনি git branchআপনার ভাণ্ডারে শাখাগুলির একটি তালিকা পেতে এবং git tag -lট্যাগগুলির তালিকার জন্য দৌড়াতে পারেন । একইভাবে, originরিপোজিটরিটি ক্লোন করা এমন রিমোটের ডিফল্ট নাম, তবে এটি সম্পর্কে বিশেষ কিছুই নেই।
ফিল মিলার

3
যদি এটি পরিষ্কার না হয় git reflogতবে আপনাকে হ্যাশগুলির একটি তালিকা দেয়, আপনি কোন পর্যায়ে ব্যবহার করতে পারেন git checkout [commit-hash]
jbnunn

আমি একটি ফাইল মুছে ফেলেছি এবং কমান্ডটি চেষ্টা করেছি, তবে এটি পুরোপুরি পুনরায় সেট করে না। প্রথমত, এটি পুনরাবৃত্ত হয় না। তারপরে আমি মুছে ফেলা ফাইলটিতে এটি চেষ্টা করার পরে, গিট পরে আমাকে বলে যে হেড পৃথক is কি করো?
ড্যানিয়েল এস

1
@ ড্যানিয়েলস: আপনি ফাইল সম্পর্কে কথা বলার সময় প্রশ্ন এবং আমার উত্তরগুলি কমিট সম্পর্কে ছিল । গিট তাদের পরিবর্তে অন্যরকম আচরণ করে।
ফিল মিলার

27

গিট চেকআউট মাস্টার

মাস্টার হ'ল টিপ, বা শেষ প্রতিশ্রুতি। গিটক কেবল তখনই আপনি গাছটিতে কোথায় আছেন তা আপনাকে দেখায়। গিট রিফ্লোগ সমস্ত কমিটগুলি দেখায়, তবে এই ক্ষেত্রে আপনি কেবল টিপটি চান, তাই গিট চেকআউট মাস্টার।


1
এই. বাgit checkout branchname
অ্যালেক্স

19

এই মুহূর্তে এই প্রশ্নটি জুড়ে এসেছিল এবং যুক্ত করার মতো কিছু আছে

সাম্প্রতিক প্রতিশ্রুতিতে যেতে:

git checkout $(git log --branches -1 --pretty=format:"%H")

ব্যাখ্যা:

git log --branchesসমস্ত স্থানীয় শাখা থেকে কমিটের লগটি একটি প্রতিশ্রুতিতে
-1সীমাবদ্ধ করে → সাম্প্রতিক কমিট
--pretty=format:"%H"ফর্ম্যাটটি কেবলমাত্র
git checkout $(...)চেকআউট করার পক্ষে যুক্তি হিসাবে সাবশেলের আউটপুট প্রদর্শন করার জন্য কমিটের হ্যাশ ব্যবহার করে

বিঃদ্রঃ:

এর ফলে বিচ্ছিন্ন মাথা হতে পারে (কারণ আমরা সরাসরি প্রতিশ্রুতিতে চেকআউট করি)। sedনীচে ব্যাখ্যা করে , শাখার নামটি ব্যবহার করে এড়ানো যায় ।


সাম্প্রতিক প্রতিশ্রুতিবদ্ধ শাখায় যেতে:

git checkout $(git log --branches -1 --pretty=format:'%D' | sed 's/.*, //g')

ব্যাখ্যা:

git log --branchesসমস্ত স্থানীয় শাখা থেকে কমিটের লগটি একটি প্রতিশ্রুতিতে
-1সীমাবদ্ধ করে - একমাত্র সাম্প্রতিক কমিট
--pretty=format:"%D"ফর্ম্যাটটি কেবল রেফ নামগুলি দেখানোর জন্য কেবলমাত্র
| sed 's/.*, //g'একাধিক রেফ (*)
git checkout $(...)এর চেকআউটটির আর্গুমেন্ট হিসাবে সাবশেলের আউটপুট ব্যবহার বাদ দেয়

*) হেড এবং রিমোট শাখাগুলি প্রথমে তালিকাভুক্ত করা হয়, স্থানীয় শাখাগুলি বর্ণমালা অনুসারে অবতরণ ক্রমে সর্বশেষে তালিকাভুক্ত হয়, সুতরাং অবশিষ্ট একটিটি বর্ণমালা অনুসারে প্রথম শাখার নাম হবে

বিঃদ্রঃ:

যদি প্রতিশ্রুতিবদ্ধতার জন্য একাধিক থাকে তবে এটি সর্বদা (বর্ণানুক্রমিক) প্রথম শাখার নামটি ব্যবহার করবে।


যাইহোক, আমি মনে করি সেরা সমাধানটি হবে সর্বাধিক সাম্প্রতিক প্রতিশ্রুতি হিসাবে রেজিস্ট্রেশন নামগুলি প্রদর্শন করা যেখানে চেকআউট করতে হবে তা জানতে:

git log --branches -1 --pretty=format:'%D'

উদাহরণস্বরূপ git topযে কমান্ডের জন্য উপনাম তৈরি করুন ।


1
কোনওভাবে আমি দ্বিতীয় কমান্ডটি গুছিয়ে নিলাম ... এটি স্থির করে নিন, এটি আপনাকে সঠিকভাবে সাম্প্রতিক কমিটের শাখাটি পরীক্ষা করবে।
816-8055

কমান্ডটি আবার মাথায় ফিরতে বাশ / জেডশ ওরফেalias git-head='git checkout $(git log --branches -1 --pretty=format:"%D" | sed "s/.*, //g")'
হাই-অ্যাঞ্জেল

9

গ্রাফিকাল জিইউআই একবার দেখুন ... gitkএটি সমস্ত প্রতিশ্রুতি দেখায়। কখনও কখনও গ্রাফিকাল কাজ করা সহজ ... ^^


হ্যাঁ, আমি আসলে এটি এটি অতীতে করেছি - তবে এই মুহুর্তে আমার কাছে জিইউআই উপলব্ধ নেই
লিও আলেক্সিয়েভ

7

আপনি এটির জন্য নিম্নলিখিত গিট কমান্ডটি ব্যবহার করতে পারেন:

git checkout master
git checkout branchname

4

সমস্ত শাখা দেখান এবং গিট লগ - শাখা -
অনলাইনে প্রতিশ্রুতিবদ্ধ

সর্বশেষ কমিট গিট লগ - ব্রাঞ্চ -1 - অনলাইনলাইন প্রদর্শন করুন
show

শেষ কমিট গিট লগের আগে প্রদর্শন করুন -
ব্রাঞ্চ -2 --অনলাইন


প্রথম কমান্ডটি আসলে কোন কোডটি বর্তমানে মঞ্চায়িত হয় তা প্রতিশ্রুতি দেবে, বা আমি এটি ভুলভাবে পড়ছি?
Lazerbeak12345


0

আপনার যদি মাস্টারের চেয়ে আলাদা শাখা থাকে তবে একটি সহজ উপায় হল সেই শাখাটি পরীক্ষা করে নেওয়া, তারপরে মাস্টারকে পরীক্ষা করে দেখুন। ভয়েলা, আপনি মাস্টারের ডগায় ফিরে এসেছেন। সম্ভবত স্মার্ট উপায় আছে ...


0

আপনি সহজভাবে করতে পারেন git pull origin branchname। এটি আবার সর্বশেষ প্রতিশ্রুতি আনবে।


আপনি যদি উজান থেকে টানতে না চান তবে আমি এটির প্রস্তাব দিচ্ছি না। মার্জ সংঘাতগুলি যখন প্রস্তুত থাকে তখনই তাদের পরিচালনা করা উচিত।
Lazerbeak12345

ঠিক আছে, সেক্ষেত্রে আপনি সর্বশেষ প্রতিশ্রুতিতে চেকআউট করলেও মাথাটি বিচ্ছিন্ন অবস্থায় থাকবে।
অঙ্কিত সিং

-2

যদি আপনার সর্বশেষ প্রতিশ্রুতি মাস্টার শাখায় থাকে তবে আপনি সহজভাবে ব্যবহার করতে পারেন

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