বর্তমান পরিবর্তনগুলির সাথে গিট শাখা তৈরি করুন


848

আমার কাজটি সহজ হবে এই ভেবে আমি আমার মাস্টার শাখায় কাজ শুরু করি । কিছুক্ষণ পরে বুঝলাম এটি আরও বেশি কাজ নেবে এবং আমি এই সমস্ত কাজ একটি নতুন শাখায় করতে চাই।

আমি একটি নতুন শাখা কীভাবে তৈরি এবং dirtying ছাড়া আমার সাথে এসব পরিবর্তন নিতে পারেন মাস্টার ?




4
হ্যাঁ এগুলি সদৃশ প্রশ্ন, তবে শব্দবন্ধটি এতটাই আলাদা যে আমি মনে করি এটি রাখা কার্যকর। এখানে কীওয়ার্ডগুলি নোট করুন: branch current changesবনাম existing uncommited branch। যে কেউ ইংরেজী বলতে পারেন তাৎক্ষণিকভাবে তারা দেখতে পাবেন যে তারা একই, তবে অনুসন্ধান ইঞ্জিনগুলি সম্ভবত তা করবে না। এই প্রশ্ন রাখুন।
স্কট বিগস

উত্তর:


690

আপনি যদি এখনও কোনও প্রতিশ্রুতি না করেন তবে কেবল (1: শাখা) এবং (3: চেকআউট) যথেষ্ট হবে।
অথবা, এক আদেশে:git checkout -b newBranch

git resetম্যান পেজে যেমন উল্লেখ করা হয়েছে :

$ git branch topic/wip     # (1)
$ git reset --hard HEAD~3  # (2)  NOTE: use $git reset --soft HEAD~3 (explanation below)
$ git checkout topic/wip   # (3)
  1. আপনি কিছু কমিট করেছেন, তবে বুঝতে পারেন যে এগুলি " master" শাখায় থাকার অকাল ছিল । আপনি তাদের একটি বিষয় শাখায় পোলিশ করা চালিয়ে যেতে চান, সুতরাং topic/wipবর্তমানের বাইরে শাখা তৈরি করুন HEAD
  2. masterএই তিনটি কমিট থেকে মুক্তি পাওয়ার জন্য শাখাটি রিওয়াইন্ড করুন ।
  3. " topic/wip" শাখায় স্যুইচ করুন এবং কাজ চালিয়ে যান।

দ্রষ্টব্য: একটি git reset --hardকমান্ডের "ধ্বংসাত্মক" প্রভাবের কারণে (এটি সূচক এবং কার্যনির্বাহী গাছটিকে পুনরায় সেট করে since কার্যকরী গাছের ট্র্যাক করা ফাইলগুলিতে যে কোনও পরিবর্তন <commit>বাতিল করা হয়েছে), আমি বরং এর সাথে যাব:

$ git reset --soft HEAD~3  # (2)

এটি নিশ্চিত করবে যে আমি কোনও ব্যক্তিগত ফাইল হারাচ্ছি না (সূচীতে যোগ করা হয়নি)। বিকল্প সূচক ফাইল কিংবা সব কাজ গাছ স্পর্শ করবে না (তবে মাথা রিসেট শুধু মত সব মোড না)।
--soft<commit>


সঙ্গে গীত 2.23+ , নতুন কমান্ডgit switch (একই ধরনের সঙ্গে এক লাইনে শাখা তৈরি করবে reset --hard, তাই তার প্রভাব হুঁশিয়ার):

git switch -f -c topic/wip HEAD~3

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

38
ভবিষ্যতের পাঠকদের জন্য নোট: নীচ থেকে উপরে পর্যন্ত পড়ুন (বা পুরোটি পড়তে ভুলবেন না)। git reset --hardআপনার পরিবর্তনগুলি কমাতে হবে, এবং যদি তারা প্রতিশ্রুতিবদ্ধ না হয় তবে তারা অপ্রাপ্যযোগ্য! আপনার কেবল প্রয়োজন হতে পারেgit checkout -b …
কনরাড মেয়ার

3
পছন্দ করুন আমি উত্তরটি সম্পাদনা করেছি এবং git checkout -bপ্রথমটি রেখেছি ।
ভোনসি

5
বিষয় / শাখা কেন ?? কেন কেবল শাখার নাম নয়, এই নামকরণের কোনও বিশেষ কারণ আছে? ভাবছি.
স্যাম স্টোলেঙ্গা

1
@It শুধু একটি নামস্থান নামকরণ কনভেনশন (সহজে শ্রেণীভুক্ত শাখা একটি উপায়, ব্যবহার করছে হায়ারারকিকাল : শাখা নাম নামব্যবধান সংজ্ঞায়িত করতে) stackoverflow.com/a/2527436/6309 । উদাহরণস্বরূপ, সমস্যার জন্য: randyfay.com/content/... । আপনার শাখাগুলির নামকরণ করার সময় আপনাকে একটি শ্রেণিবিন্যাস ব্যবহার করতে হবে না। topic_wipখুব কাজ করবে;)
ভনসি

269

এই প্রশ্নে বর্ণিত মত: গিট: মাস্টারটিতে অবিচলিত / আপত্তিজনক পরিবর্তন থেকে একটি শাখা তৈরি করুন : স্ট্যাশ প্রয়োজন হয় না।

শুধু ব্যবহার করুন:

git checkout -b topic/newbranch

যে কোনও অনির্দিষ্ট কাজ নতুন শাখায় নিয়ে যাওয়া হবে।

আপনি যদি ধাক্কা দেওয়ার চেষ্টা করেন তবে নীচের বার্তাটি পাবেন

মারাত্মক: বর্তমান শাখা বৈশিষ্ট্য / নিউব্র্যাঞ্চের কোন উজানের শাখা নেই। বর্তমান শাখাটি পুশ করতে এবং রিমোটটি আপ স্ট্রিম হিসাবে সেট করতে, ব্যবহার করুন

git push --set-upstream origin feature/feature/NEWBRANCH

দূরবর্তীভাবে শাখা তৈরি করার পরামর্শ হিসাবে কেবল করুন:

git push --set-upstream origin feature/feature/NEWBRANCH


3
আপনি নতুন শাখাটি চাপ দিলেই আপনি 'কোনও উজানের শাখা' ত্রুটি পাবেন না, যখন আপনি নতুন কাজটি প্রতিশ্রুত করবেন তখন নয়।
সোম

2
@ সাম আমি সেই অনুযায়ী উত্তরটি সংশোধন করেছি
নিক কেনেডি

73

এই পদক্ষেপগুলি অনুসরণ করুন:

  1. একটি নতুন শাখা তৈরি করুন:

    git branch newfeature
    
  2. নতুন শাখা চেকআউট করুন: (এটি আপনার কাজটি পুনরায় সেট করবে না))

    git checkout newfeature
    
  3. এখন এই নতুন শাখায় আপনার কাজটি কমিট করুন:

    git commit -s
    

উপরের পদক্ষেপগুলি ব্যবহার করা আপনার আসল শাখাটি পরিষ্কার রাখবে এবং আপনাকে কোনও 'গিট রিসেট --হার্ড' করতে হবে না।


3
'-S' পদক্ষেপ 3-এ কী করবে?
স্কট বিগস

12
@ স্কটবিগগুলি এটি অপ্রয়োজনীয়, তবে কিছু লোক অনুসরণ করে practice এটি "--signoff" এর জন্য সংক্ষিপ্ত এবং লগগুলি সন্ধানকারী ভবিষ্যতের লোকদের জন্য এই প্রতিশ্রুতিটি ক্ষমা করে দেওয়ার জন্য আপনার ব্যবহারকারীর নামটি প্রতিশ্রুতিবদ্ধ করে।
ফ্রাঙ্ক ব্রাইস

5
উত্তম উত্তর, তবে -s৩ য় ধাপের প্রয়োজন নেই
মোহাম্মদ আলী

আমি মন্তব্যটি থেকে নতুন কিছু শিখলাম, ধন্যবাদ @ ফ্র্যাঙ্কব্রাইস
কাস্পারভ

29

যেহেতু আপনি এখনও কোনও প্রতিশ্রুতি করেননি, আপনি আপনার সমস্ত পরিবর্তনগুলি স্ট্যাশে সংরক্ষণ করতে পারেন, তৈরি করতে এবং একটি নতুন শাখায় স্যুইচ করতে পারেন, তারপরে সেই পরিবর্তনগুলি আপনার কার্যনির্বাহী গাছটিতে ফিরিয়ে আনুন:

git stash  # save local modifications to new stash
git checkout -b topic/newbranch
git stash pop  # apply stash and remove it from the stash list

9
অথবা ভনসি যেমন 'গিট চেকআউট-বি নিউব্র্যাঞ্চ' দেখিয়েছে এবং স্ট্যাশ এড়িয়ে গেল
উইলকোডেজাভফফুড

@ উইল: আমি ভেবেছিলাম যে একটি নতুন শাখা তৈরি করা আপনার যে কোনও আপত্তিহীন পরিবর্তনগুলিকে মুছে ফেলবে, তবে যদি এটি না হয় তবে হ্যাঁ আপনি স্ট্যাশ এড়িয়ে যেতে পারেন।
ইথার

1
আমি এটি চেষ্টা করেছিলাম এবং এটি ভাল কাজ করেছে,
গিটটি

2
আমি ধরে নিলাম এটি একটি টাইপো ছিল তবে কেবল একটি মাথা আপ যা git stash pushকোনও কমান্ড নয়। আপনি সম্ভবত ব্যবহার করতে চান git stashবা git stash save। যদি আপনি স্ট্যাশগুলিতে অচিহ্নযুক্ত ফাইলগুলি অন্তর্ভুক্ত করতে চান তবে --include-untrackedবিকল্পটি ব্যবহার করুন । তেমনিভাবে, আপনি যদি স্ট্রেশে অপ্রকাশিত এবং অবহেলিত উভয় ফাইলই অন্তর্ভুক্ত করতে চান তবে --addপরিবর্তে বিকল্পটি ব্যবহার করুন।
ছয়

আপনি যদি ইতিমধ্যে শাখাটি তৈরি করেছেন তবে এটি সহায়ক।
অবশ্যই

13

একটি নতুন শাখায় নতুন পরিবর্তন যুক্ত করতে এবং রিমোটে চাপ দিন:

git branch branch/name
git checkout branch/name
git push origin branch/name

প্রায়শই আমি নতুন অংশটি ধাক্কা দিতে এবং বিভ্রান্ত হওয়ার জন্য মূল অংশটি যুক্ত করতে ভুলে যাই কেন আমি নতুন শাখা দেখি না / বিটবাকেটে কমিট করি না

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