বিচ্ছিন্ন মাথায় তৈরি প্রতিশ্রুতি দিয়ে কী করবেন


279

গিট ব্যবহার করে আমি এরকম কিছু তৈরি করেছি

git clone
git checkout {a rev number tree rev before} (here I started to be in a detached head state)
//hacking
git commit
//hacking
git commit
(some commit where made on origin/master)
git pull (which does complete because there was some error due to the fact that I'm no more on master)

কারণ এটি আমাকে বলেছিল যে বিচ্ছিন্ন মাথাব্যবস্থায় থাকাকালীন আমি এখনও প্রতিশ্রুতি দিতে পারি, আমি তা করেছিলাম। তবে এখন আমি আমার বিচ্ছিন্ন হেড ব্রাঞ্চ এবং আমার স্থানীয় মাস্টার শাখাটি মার্জ করতে চাই এবং তারপরে আমার গুচ্ছ পরিবর্তনগুলি উত্স / মাস্টারে ঠেলাতে চাই।

সুতরাং আমার প্রশ্ন হ'ল আমি কীভাবে মাস্টার শাখাটিকে আমার আসল অবস্থার সাথে বিচ্ছিন্ন করতে পারি (বিচ্ছিন্ন মাথা)



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

দুর্ভাগ্য এই মুহূর্তে আমি পারছি না তবে আপনি যদি সরবরাহ করতে পারেন তবে আমি এটি এখানে দেখে খুশি হব। এমনকি এটি অবশ্যই একটি ড্র
হলেও,

উত্তর:


476

আপনি যেখানে আছেন সেখানে একটি শাখা তৈরি করুন, তারপরে মাস্টার এবং এটিকে মার্জ করুন:

git branch my-temporary-work
git checkout master
git merge my-temporary-work

12
ভবিষ্যতে কেউ কীভাবে মাথা বিচ্ছিন্ন করতে পারে?
ycomp

আমি এটি করেছি এবং 5 টি কমিট দ্বারা নিজেকে উত্সের চেয়ে এগিয়ে পেয়েছি। সেক্ষেত্রে আপনি কি কেবল গিট পুশ অরিজিন করবেন?
Winnemucca

5
আজব, আমি "ইতিমধ্যে আপ টু ডেট" পেয়েছি। আমার-অস্থায়ী-কাজটি মার্জ করার সময়
রবার্ট সিনক্লেয়ার

10
"গিট শাখা -d আমার-অস্থায়ী-কাজ" দিয়ে আমার-অস্থায়ী-কাজটি মুছে ফেলতে ভুলবেন না
ক্যাপ্টেন লেপটন

5
@comp "বিচ্ছিন্ন মাথা" ঘটে যখন আপনি একটি পুরানো কমিটের ফাইলগুলি সম্পাদনা করেন এবং শাখাবিহীন লোকদের প্রতিশ্রুতিবদ্ধ পরে এই নতুন প্রতিশ্রুতি উল্লেখ করার জন্য। বিচ্ছিন্ন মাথা এড়ানোর জন্য, পুরানো কমিটগুলি চেকআউট করবেন না। আপনি যদি এখনও সেখান থেকে সমস্ত ফাইল চান তবে নতুন প্রতিশ্রুতি হিসাবে, তবে আপনি নিজের দায়বদ্ধতার পরিবর্তে কমিট থেকে ডিরেক্টরিটি চেকআউট করতে পারেন। এই উত্তরটি দেখুন
লুসিডব্রোট

96

আপনি এই মত কিছু করতে পারে।

# Create temporary branch for your detached head
git branch tmp

# Go to master
git checkout master

# Merge in commits from previously detached head
git merge tmp

# Delete temporary branch
git branch -d tmp

এমনকি সহজ হবে

git checkout master
git merge HEAD@{1}

তবে এতে সামান্য বিপদ রয়েছে যে আপনি যদি ভুল করেন তবে বিচ্ছিন্ন মাথায় করা কমিটগুলি পুনরুদ্ধার করা কিছুটা কঠিন হতে পারে।


4
আমি জানি এটি বহু বছর পরে, তবে এই উত্তরের জন্য ধন্যবাদ। আমি স্বীকৃত উত্তরটি এখানে অনুসন্ধানের জন্য নিজেকে বিবেচনা করি নি কারণ আমি কোনও অস্থায়ী শাখা ছেড়ে যেতে চাইনি এবং এই উত্তরটি মুছে ফেলার আদেশ রয়েছে।
জেরেমি প্রাইডমোর

8
আপনি যদি কমান্ডটি ব্যবহার করার সিদ্ধান্ত নেন তবে git merge HEAD@{1}সম্ভবত এটি নিশ্চিত হওয়া উচিত যে আপনি ব্যবহার করেই এটি ব্যবহার করতে চানgit reflog
মাইকেল স্ট্র্যামেল

3
হেড @ {1 merge একত্রীকরণে সক্ষম হয়ে আমার জীবন বাঁচিয়েছে যেহেতু আমি ইতিমধ্যে পূর্বনির্ধারিতভাবে মাস্টারটি পরীক্ষা করে দেখেছি।
juil

আজব, আমি "ইতিমধ্যে আপ টু ডেট" পেয়েছি। tmp মার্জ করার সময় (তবে ফাইলগুলি আলাদা)
রবার্ট সিনক্লেয়ার

18

এটি আমিই করেছি:

মূলত, detached HEADনাম ছাড়া একটি নতুন শাখা হিসাবে মনে করুন । আপনি অন্য শাখার মতো এই শাখায় প্রতিশ্রুতিবদ্ধ করতে পারেন। একবার আপনি প্রতিশ্রুতিবদ্ধ হয়ে গেলে, আপনি এটিকে রিমোটে চাপতে চান।

সুতরাং আপনাকে প্রথমে যা করতে হবে তা হল detached HEADএকটি নাম দিন। আপনি এটিকে সহজেই এটি করতে সক্ষম হন detached HEAD:

git checkout -b some-new-branch

এখন আপনি এটিকে অন্য কোনও শাখার মতো দূরবর্তী স্থানে ঠেলাতে পারেন।

আমার ক্ষেত্রে, আমি এই শাখাটি দ্রুত (ফরওয়ার্ড) করতে চেয়েছিলাম যাতে আমি detached HEAD(এখন some-new-branch) করা কমিটগুলি সহ দক্ষতা অর্জন করতে পারি । আমি যা করেছি সবই ছিল

git checkout master

git pull # To make sure my local copy of master is up to date

git checkout some-new-branch

git merge master // This added current state of master to my changes

অবশ্যই, আমি এটি পরে মিশ্রিত করেছি master

এটা সম্বন্ধে.


1
এই উত্তরটি আমার পক্ষে কাজ করেছিল যেখানে অন্যরা তা করেনি। git checkout -b new-branchআমার জন্য কাজ। অন্যান্য পরামর্শগুলির জন্য বলা হয়েছিল git branch new-branch, কিন্তু এটি আমাকে এখনও বিচ্ছিন্নভাবে রেখে গেছে এবং নতুন শাখাটি আমার পরিবর্তনগুলি গ্রহণ করে নি।
জেসি প্যাটেল

17

আপনি ঠিক করতে পারেন git merge <commit-number>বাgit cherry-pick <commit> <commit> ...

রায়ান স্টুয়ার্টের পরামর্শ অনুসারে আপনি বর্তমান হেড থেকেও একটি শাখা তৈরি করতে পারেন:

git branch brand-name

বা কেবল একটি ট্যাগ:

git tag tag-name

আপনি বিচ্ছিন্ন মাথায় আপনার প্রতিশ্রুতি নম্বরটি খুঁজে পেতে পারেনgit rev-parse HEAD
KOGI

6

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

git branch  temp
git checkout master
git merge temp

3

একটি সহজ ফিক্স শুধু এটা করার জন্য একটি নতুন শাখা যে কমিট এবং চেকআউট তৈরি করা: git checkout -b <branch-name> <commit-hash>

এইভাবে, আপনার করা সমস্ত পরিবর্তনগুলি সেই শাখায় সংরক্ষণ করা হবে। আপনি যদি আপনার মাস্টার শাখাটি খালি করা থেকে বাদ দিতে চান তা নিশ্চিত হয়ে চালাবেন git reset --hard master

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


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