বিদ্যমান, অনির্দিষ্ট কাজ গিটের একটি নতুন শাখায় সরান


3125

আমি একটি নতুন বৈশিষ্ট্য নিয়ে কিছু কাজ শুরু করেছি এবং কিছুটা কোডিংয়ের পরে, আমি সিদ্ধান্ত নিয়েছি যে এই বৈশিষ্ট্যটি তার নিজস্ব শাখায় থাকা উচিত।

আমি কীভাবে বিদ্যমান অননুমোদিত পরিবর্তনগুলিকে একটি নতুন শাখায় স্থানান্তর করব এবং আমার বর্তমানটি পুনরায় সেট করব?

নতুন বৈশিষ্ট্যে বিদ্যমান কাজগুলি সংরক্ষণ করার সময় আমি আমার বর্তমান শাখাটি পুনরায় সেট করতে চাই।


একই আকর্ষণীয় বিষয় স্ট্যাকওভারফ্লো . com/q/556923/269514 ?
গিলবার্তো

উত্তর:


3639

নিম্নলিখিত ব্যবহার:

git checkout -b <new-branch>

এটি আপনার বর্তমান শাখাটিকে যেমন আছে তেমন ছেড়ে দেবে, একটি নতুন শাখা তৈরি এবং চেকআউট করবে এবং আপনার সমস্ত পরিবর্তন রাখবে। তারপরে আপনি ফাইলগুলি পরিবর্তন করার জন্য প্রতিশ্রুতিবদ্ধ করতে পারেন:

git add <files>

এবং এর সাথে আপনার নতুন শাখায় প্রতিশ্রুতিবদ্ধ :

git commit -m "<Brief description of this commit>"

কার্যকরী ডিরেক্টরিতে পরিবর্তনগুলি এবং সূচকে মঞ্চস্থ হওয়া পরিবর্তনগুলি এখনও কোনও শাখার অন্তর্ভুক্ত নয় । এটি সেই শাখায় পরিবর্তন করে যেখানে সেই পরিবর্তনগুলি শেষ হবে।

আপনি আপনার মূল শাখাটি পুনরায় সেট করবেন না , এটি যেমন রয়েছে তেমন থাকে। শেষ প্রতিশ্রুতি <old-branch>এখনও একই থাকবে। অতএব আপনি checkout -bএবং তারপর প্রতিশ্রুতিবদ্ধ।


2020 / গিট 2.23 আপডেট করুন

গিট ২.২৩ switchঅতিরিক্ত ওভারলোড ব্যবহার checkout(শাখা স্যুইচিং, ফাইলগুলি পুনরুদ্ধার করা, হেডকে পৃথক করা ইত্যাদি) থেকে কিছুটা বিভ্রান্তি দূর করার প্রয়াসে নতুন সাবকম্যান্ড যুক্ত করেছে

গীটের এই সংস্করণটি দিয়ে শুরু করে উপরের কমান্ডটি এর সাথে প্রতিস্থাপন করুন:

git switch -c <new-branch>

আচরণটি অভিন্ন এবং অপরিবর্তিত রয়েছে।


15
কেবল নিশ্চিত করার জন্য, আমি আমার মূল শাখাটি পুনরায় সেট করার আগে আমি অসম্পূর্ণ বৈশিষ্ট্যটি প্রতিশ্রুতিবদ্ধ করব? বা দায়বদ্ধ না করেই কি এই অনামী ফাইল সংরক্ষণ করা হবে?
ডেন ও'কনোর

192
এফওয়াইআই: ওয়ার্কিং ডিরেক্টরিতে পরিবর্তন এবং সূচকে মঞ্চস্থ হওয়া পরিবর্তনগুলি কোনও শাখার অন্তর্ভুক্ত নয়। git checkout -b <new branch>পরিবর্তন যেখানে ঐ পরিবর্তন শেষ হয়ে যাবে।
Jakub Narębski

152
আপনার যদি ইতিমধ্যে একটি শাখা থাকে এবং আপনার পরিবর্তনগুলি বিদ্যমান শাখায় সরিয়ে নিতে চান, চেকআউট স্ট্যাকওভারফ্লো.com
প্রশ্নস /

14
আপনি যদি আপনার নতুন শাখাটি দূরবর্তী সংগ্রহস্থলে ঠেলাঠেলি করতে চান: স্ট্যাকওভারফ্লো.com
দেওয়েন

10
@JDSmith: uncommit পরিবর্তন না কোন শাখা অন্তর্গত। তারা শুধুমাত্র পরিশ্রমী ডিরেক্টরির মধ্যে রক্ষিত git checkout ./ git reset --hardunrecoverably হবে অপসারণ তাদের
knittl

329

বিকল্পভাবে:

  1. একটি সাময়িক স্ট্যাশে বর্তমান পরিবর্তনগুলি সংরক্ষণ করুন:

    $ git stash

  2. এই স্ট্যাশের উপর ভিত্তি করে একটি নতুন শাখা তৈরি করুন এবং নতুন শাখায় স্যুইচ করুন:

    $ git stash branch <new-branch> stash@{0}

টিপ: স্ট্যাশ নাম টাইপ করতে হ্রাস করতে ট্যাব কী ব্যবহার করুন।


51
যদি অন্য শাখাটি ইতিমধ্যে বিদ্যমান থাকে তবে আপনি কেবলমাত্র চেকআউট দিয়ে এটিতে স্যুইচ করতে পারেন git stash apply
আর্কোনিক

6
"টিপ: স্ট্যাশ নাম টাইপ করতে হ্রাস করতে ট্যাব কী ব্যবহার করুন" টিপটি আমি বুঝতে পারি না। "স্ট্যাশ @ {0}" নাম না? আমি এটি সফলভাবে চালাতে পারি না।
হারবার্ট

7
এটি কেন গৃহীত উত্তর স্ট্যাকওভারফ্লো . com/a/1394804/754997 এর চেয়ে ভাল ?
ক্রিস পেজ

10
আমি কেন বুঝতে পারছি না কেন এটি আরও ভাল তবে এর স্বীকৃত উত্তরgit checkout -b <new branch name>
Noitidart

6
git add -Aস্ট্যাশ করার আগে আপনার দরকার নেই ।
ভিসলে

48

আপনি কোডিংয়ের সময় যদি আপনি আপনার মূল শাখায় কমিট করে থাকেন তবে আপনি এখন এই কমিটিগুলি একটি অন্য শাখায় সরিয়ে নিতে চান, এটি দ্রুত উপায়:

  1. আপনার বর্তমান ইতিহাসকে কোনও নতুন শাখায় অনুলিপি করুন, যেকোন অনির্দিষ্ট পরিবর্তনও আনতে হবে:

    git checkout -b <new-feature-branch>
    
  2. এখন মূল "অগোছালো" শাখাটি ফিরে ঘোরতে বাধ্য করুন: (এটিতে স্যুইচ না করে)

    git branch -f <previous-branch> <earlier-commit-id>
    

    উদাহরণ স্বরূপ:

    git branch -f master origin/master
    

    অথবা আপনি যদি 4 টি কমিট করে থাকেন:

    git branch -f master HEAD~4
    

সতর্কতা: সেই শাখার জন্য ট্র্যাকিংয়ের তথ্য পুনরায় সেটgit branch -f master origin/master করবে। সুতরাং আপনি যদি নিজেরশাখাটি অন্য কোথাও ঠেকাতেকনফিগার করেছেন তবে সে কনফিগারেশনটি হারিয়ে যাবে।masterorigin/master

সতর্কতা: আপনি শাখা প্রশাখার পরে পুনর্বাসনা করলে একটি বিপদও রয়েছে, যা এখানে বর্ণিত আছে । এটি এড়ানোর একমাত্র উপায় হ'ল চেরি-পিক ব্যবহার করে একটি নতুন ইতিহাস তৈরি করা। এই লিঙ্কটি সবচেয়ে নিরাপদ বোকা-প্রমাণ পদ্ধতি বর্ণনা করে । আপনার যদি আপত্তিহীন পরিবর্তনগুলি হয়, আপনিgit stashশুরুতে এবংgit stash popশেষেকরতে চাইতে পারেন।


6
এটি একটি প্রশ্নের উত্তর দেয় যা অপটি যা বলেছে তার থেকে কিছুটা আলাদা। আমি এই উত্তরটি এখানে রাখার সিদ্ধান্ত নিয়েছি কারণ আমি যখন উত্তরটির সন্ধান করছিলাম তখন গুগল আমাকে এখানে এনেছিল। এই পরিস্থিতিটি নিয়ে আসল প্রশ্নটি এখানে
জোয়েটউইডেল

26

সাধারণ পরিস্থিতিটি হ'ল: আমি নতুন বৈশিষ্ট্যটির জন্য নতুন শাখা তৈরি করতে ভুলে গিয়েছিলাম এবং পুরানো বৈশিষ্ট্য শাখায় সমস্ত কাজ করছিলাম। আমি সমস্ত "পুরানো" কাজকে মাস্টার শাখায় কমিট করে দিয়েছি এবং আমি চাই যে আমার নতুন শাখাটি "মাস্টার" থেকে বাড়ুক। আমি আমার নতুন কাজের একটিও প্রতিশ্রুতি করি নি। শাখার কাঠামোটি এখানে: "মাস্টার" -> "ওল্ড ফিচার"

git stash 
git checkout master
git checkout -b "New_branch"
git stash apply

18

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

git cherry-pick <commitID>

নেই দর্শন আপনি, হিসাবে বর্ণনা চেরি-বাছুন করতে পারেন এখানে , কিন্তু এই আপনার জন্য একটি ব্যবহার-কেস হতে পারে।


2
একটি নতুন শাখায় আংশিক পরিবর্তনগুলি সরিয়ে নেওয়ার নিখুঁত সমাধান ... যেহেতু আপনি এখন যা চান তা প্রতিশ্রুতিবদ্ধ করতে পারেন, অন্য সমস্ত পরিবর্তনগুলি স্থির রাখতে পারেন, আপনি যে শাখাটি থেকে শাখা করতে চান তা পরীক্ষা করে দেখুন, নতুন শাখায় প্রতিশ্রুতিবদ্ধ চেরি-পিক করুন, ফিরে যান আসল শাখায়, কঠিন প্রতিশ্রুতি পুনরায় সেট করুন, তারপরে একটি স্ট্যাশ পপ করুন, যুক্ত করুন, প্রতিশ্রুতি দিন এবং হাল্লুজা গাইবেন।
মেরিডেথ

1
@ মেরেডিথ, হাহাহা, হ্যাঁ এরকম কিছু। এটি দুর্দান্ত, যদি না আপনি আগেই নিজের পরিবর্তনগুলি পরিকল্পনা করেন ... এবং কে তা করে;)
পাসওয়ার্ড

1

এটি জিআইটি-র জন্য সমস্ত সরঞ্জাম ব্যবহারের জন্য সহায়ক হতে পারে

হুকুম

শাখা স্যুইচ করুন - এটি আপনার পরিবর্তনগুলি নতুন শাখায় স্থানান্তরিত করবে। তারপরে আপনি পরিবর্তন করতে পারেন।

 $ git checkout -b <new-branch>

TortoiseGIT

আপনার সংগ্রহস্থলটিতে ডান ক্লিক করুন এবং তারপরে টরটোইজিট-> স্যুইচ / চেকআউট ব্যবহার করুন

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

SourceTree

শাখাটি স্যুইচ করতে "চেকআউট" বোতামটি ব্যবহার করুন। আপনি একটি শাখায় ক্লিক করার পরে শীর্ষে "চেকআউট" বোতামটি দেখতে পাবেন। বর্তমান শাখা থেকে পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে প্রয়োগ করা হবে। তাহলে আপনি তাদের প্রতিশ্রুতিবদ্ধ করতে পারেন।

এখানে চিত্র বর্ণনা লিখুন


0

আমি @ রবিন উত্তর এবং আমি যা কিছু করেছি তার তালিকাবদ্ধকরণ ব্যবহার করেছি,

git status                               <-- review/list uncommitted changes
git stash                                <-- stash uncommitted changes
git stash branch <new-branch> stash@{1}  <-- create a branch from stash
git add .                                <-- add local changes
git status                               <-- review the status; ready to commit
git commit -m "local changes ..."        <-- commit the changes
git branch --list                        <-- see list of branches incl the one created above
git status                               <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch>                <-- switch back

! রেপোর যদি একাধিক স্ট্যাশ থাকে তবে নতুন-শাখায় কোনটি প্রয়োগ করতে হবে তা দেখুন:

git stash list  
  stash@{0}: WIP on ...  
  stash@{1}: WIP on ...

এবং পৃথক স্ট্যাশ দ্বারা পরিদর্শন করুন,

git stash show stash@{1}

বা একবারে সমস্ত স্ট্যাশগুলি পরিদর্শন করুন:

git stash list -p

0

গিটিহাব ডেস্কটপ দিয়ে এখন এটি করার একটি খুব সহজ উপায় আছে যা আমি বিশ্বাস করি না যে এটি আগে কোনও বৈশিষ্ট্য ছিল।

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

গিটহাব ডেস্কটপ

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