ত্রুটি: পুনর্বাসনের সাহায্যে টানতে পারে না: আপনার স্টেস্টেড পরিবর্তন নেই have


138

আমি একটি প্রকল্পে কয়েকজন বন্ধুর সাথে সহযোগিতা শুরু করেছি এবং তারা হিরকু গিট সংগ্রহশালা ব্যবহার করে।

কিছু দিন আগে আমি সংগ্রহস্থলটিকে ক্লোন করেছি এবং সেগুলি পরে কিছু পরিবর্তন করেছে তাই আমি সর্বশেষ আপডেটগুলি পাওয়ার চেষ্টা করছি

আমি git pull --rebaseএখানে বর্ণিত কমান্ডটি চালিয়েছি (এটি করার জন্য এটি কি সঠিক উপায়?): Https://devcenter.heroku.com/articles/sharing#merging-code-changes

আমি নিম্নলিখিত ত্রুটি পেয়েছি:

$ git pull --rebase
Cannot pull with rebase: You have unstaged changes.
Please commit or stash them.

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

আমি কি করতে পারি কোন ধারণা?

উত্তর:


173

কর git status, এটি আপনাকে দেখাবে যে ফাইলগুলি কী পরিবর্তন হয়েছে changed যেহেতু আপনি বলেছেন যে আপনি যে পরিবর্তনগুলি করতে পারেন তা রাখতে চান না git checkout -- <file name>বা পরিবর্তনগুলি git reset --hardথেকে মুক্তি পেতে চান।

বেশিরভাগ ক্ষেত্রে, গিট পরিবর্তনগুলি সম্পর্কে কী করা উচিত তা আপনাকে জানিয়ে দেবে। উদাহরণস্বরূপ, আপনার ত্রুটি বার্তাটি git stashআপনার পরিবর্তনগুলিকে বলেছে । আপনি তাদের রাখতে চাইলে এটি হবে। টান দেওয়ার পরে, আপনি তখন করবেন git stash popএবং আপনার পরিবর্তনগুলি আবার প্রয়োগ করা হবে।

git status ফাইলটি কমিট করার জন্য মঞ্চস্থ করা হয়েছে কি না তার উপর নির্ভর করে পরিবর্তনগুলি থেকে কীভাবে মুক্তি পাবেন তাও রয়েছে has


1
এই কাজ করলো কিন্তু এখন আমি অন্য ত্রুটি সম্মুখীন হচ্ছি (না দ্বিধায় পরে ভবিষ্যতে দর্শকবৃন্দ করার জন্য একটি নতুন প্রশ্ন শুরু): stackoverflow.com/questions/23518247/...
user3597950

আমি আক্ষরিকভাবে প্রতি একক সময় এই করছি, সম্প্রতি। আগে, আপনার বর্তমান পরিবর্তনগুলিকে প্রভাবিত করে না এমন ফাইলগুলি টানতে ভাল তবে এখন, এটির জন্য আপনি বদলে যাওয়া সমস্ত কিছুর প্রয়োজন। আমি এমনকি ধাক্কাও দিতে পারি না, আমি বাধ্য হতে বাধ্য হয়েছিgit push -f
কর্মা ব্ল্যাকশো

@ কারমাব্ল্যাকশঃ আপনার কাছে জোর করে চাপ দেওয়ার দরকার হবে না। যদি আপনাকে একটি জোর ধাক্কা দিতে হয়, তার অর্থ হল আপনার স্থানীয় ইতিহাস এবং দূরবর্তী ইতিহাস আলাদা এবং এই উত্তরটি কী coversেকে দেয় তার চেয়ে আলাদা প্রশ্ন।
শ্লেইস

এই প্রশ্নের সুযোগটি কী সরবরাহ করে তা আসলেই আলাদা। তবে আমি বর্তমান শাখাটি মোছা এবং বিকাশ থেকে একটি নতুন শাখা তৈরি করে একটি উপায় খুঁজে পেয়েছি। আমার ধারণা এটি আমার শাখা যা কিছু জিনিসকে ভুলভাবে কনফিগার করেছিল।
কর্মফল ব্ল্যাকশো

91

যদি আপনি পুনরায় কাজ করার সময় আপনার কাজের পরিবর্তনগুলি রাখতে চান তবে আপনি এটি ব্যবহার করতে পারেন --autostashডকুমেন্টেশন থেকে :

রিবেস শুরু করার আগে স্থানীয় স্থানীয় সংশোধনগুলি দূরে রাখুন (প্রয়োজনে গিট-স্ট্যাশ [1] দেখুন ) এবং স্ট্যাশ লাগানোর পরে প্রয়োগ করুন।

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

git pull --rebase --autostash

7
এটি আধুনিক উত্তর।
এডল

13
আপনি যদি অটোস্ট্যাশকে ডিফল্ট আচরণ হিসাবে সেট করতে পারেন তবে git config --global rebase.autoStash true আপনি সুইচটি পাস করার দরকার নেই।
জোরডাচি

1
এই, আমি যা খুঁজছিলাম! (দ্রষ্টব্য যে কমান্ড লাইন সুইচটি গিট ২.৯ থেকে পাওয়া যায়, তবে বিকল্পটি rebase.autostash২.6 থেকে পাওয়া যায়)।
jjmontes

এটি git rebase --interactiveখুব দুর্দান্ত কাজ করে!
ড্যান ড্যাসক্লেস্কু

6
কেন এটি ডিফল্ট নয়?
নিক

49

রিবেসের সাথে টান দেওয়া সাধারণভাবে একটি ভাল অনুশীলন।

তবে আপনি এটি করতে পারবেন না যদি আপনার সূচকটি পরিষ্কার না হয়, যেমন আপনি এমন পরিবর্তন করেছেন যা প্রতিশ্রুতিবদ্ধ হয় নি।

আপনি নিজের পরিবর্তনগুলি রাখতে চান তা ধরে নিয়ে আপনি এটি কাজ করতে পারেন:

  1. আপনার পরিবর্তনগুলি এর সাথে স্থির করুন: git stash
  2. রিবেস দিয়ে মাস্টার থেকে টানুন
  3. আপনি (1) এর সাথে পরিবর্তনগুলি পুনরায় প্রয়োগ করুন: git stash apply stash@{0}বা সরল withgit stash pop

1
এই কাজ করলো কিন্তু এখন আমি অন্য ত্রুটি সম্মুখীন হচ্ছি (না দ্বিধায় পরে ভবিষ্যতে দর্শকবৃন্দ করার জন্য একটি নতুন প্রশ্ন শুরু): stackoverflow.com/questions/23518247/...
user3597950

6
@nehemiahjacob আপনি খুব git stash popসাম্প্রতিক স্ট্যাশেড পরিবর্তনগুলি প্রয়োগ করতে এবং দীর্ঘস্থায়ী মুখস্থ করা এড়াতেও পারেন apply stash@{0}
Kostas Rousis

আমাকে এই সব সময় করতে হবে। কোন সহজ উপায়?
অ্যালপার

@ আল্পার সাধারণত আপনি অন্য একটি (বৈশিষ্ট্য) শাখায় কাজ করেন। আমার অভিজ্ঞতায়, আমি আমার কাজ প্রতিশ্রুতিবদ্ধ হওয়ার পরে কেবলমাত্র মাস্টারকেই ফিরিয়ে আনব এবং পুনরায় প্রত্যাবর্তন করব, সুতরাং স্ট্যাশ / পপ করার দরকার নেই। আপনার বিকাশের ওয়ার্কফ্লো চলাকালীন আপনি যদি খুব কিছু করে নিজেকে খুঁজে পেয়ে থাকেন তবে আপনি সর্বদা আপনার .bashrc(বা আপনি যা কিছু ব্যবহার করুন) একটি এলিয়াস তৈরি করতে পারেন:alias stashpull='git stash; git pull; git stash pop'
Kostas Rousis

@ কোস্টাসরোসিস আমার কাছে হুবহু সঠিক নাম আছে, লোল ol আমি এটিকে 'এসপিজিট' বলি
লুইজফ্লস

30

প্রথমে ক দিয়ে শুরু করুন git status

আপনার কোনও মুলতুবি পরিবর্তন আছে কিনা তা দেখুন। এগুলি বাতিল করতে, চালান

git reset --hard

এই কাজ করলো কিন্তু এখন আমি অন্য ত্রুটি সম্মুখীন হচ্ছি (না দ্বিধায় পরে ভবিষ্যতে দর্শকবৃন্দ করার জন্য একটি নতুন প্রশ্ন শুরু): stackoverflow.com/questions/23518247/...
user3597950

16

এটি আমার পক্ষে কাজ করে:

git fetch
git rebase --autostash FETCH_HEAD

1
আহ অটোস্ট্যাশ, এটি আমাকে অতিরিক্ত দুটি কমান্ড সংরক্ষণ করে। এটি সঠিক উত্তর আইএমও হওয়া উচিত।
এরিক বার্কুন-ড্রেভনিগ

10

আপনি সর্বদা করতে পারেন

git fetch && git merge --ff-only origin/master

এবং আপনি (ক) কোন পরিবর্তন পাবেন যদি আপস্রিম পরিবর্তনগুলির সাথে দ্বন্দ্ব না করে বা (খ) স্ট্যাশ / টান / প্রয়োগের মতো একই প্রভাব থাকে: আপনাকে হেড থেকে সর্বশেষ পরিবর্তনগুলি এবং আপনার অনির্ধারিত পরিবর্তনগুলি বামে রাখার জন্য একটি রিবেস যেমনটি


6

যখন অচিহ্নবদ্ধ পরিবর্তন হয়েছে কারণ গিটটি কোনও ফাইলের (যেমন সর্বদা আমার ক্ষেত্রে) ইওল কনভেনশনগুলি ঠিক করার চেষ্টা করছে তখন কোনও পরিমাণ স্ট্যাশিং বা চেক আউট বা পুনরায় সেট করা এটিকে দূরে সরিয়ে দেবে না।

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

git checkout -f anyotherbranchthanthisone
git branch -D thebranchineedtorebase
git checkout thebranchineedtorebase

ভাল খবর! এটি এখনও আমাকে ব্যর্থ করেনি।


2

আপনি যদি নিজের পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে স্ট্যাশ করতে চান এবং প্রতিটি পুনর্বাসনের জন্য এগুলি স্ট্যাশ করতে চান তবে আপনি এটি করতে পারেন:

git config --global rebase.autoStash true

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