গিট কমিট শেষ হয়নি তবে সেই মেশিনে চালিয়ে যেতে পারে না


11

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

"সফট কমিট" বা অন্য মেশিনে অন্য কোথাও কাজ করার জন্য পরিবর্তনগুলি স্থানান্তর করার মতো কোনও উপায় যেমন এই সমস্যার সমাধান রয়েছে কি?

আমি যথাযথভাবে প্রয়োগ করা হয়নি এমন পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ হতে এবং চাপ দিতে বাধ্য না হওয়া পছন্দ করি।


2
এই পোস্টটি পড়ার চেয়ে শক্ত (পাঠ্যের প্রাচীর)। তুমি কিছু মনে করবে সম্পাদন করা একটি ভাল আকৃতি সেটিকে ing?
gnat

..তো তুমি কেমন আছো git stash...?
সাইমন হোয়াইটহেড

@ সিমন হোয়াইটহেড হ্যাঁ তবে আমি কি গিট স্ট্যাশ সহজেই অন্য কোনও মেশিনে নিয়ে যেতে পারি?
সিটিসিফেল

সমস্ত গিট কমিটস "সফট কমিট"।
ব্যবহারকারী 253751

সত্যই কোনও সদৃশ নয়, কারণ এটি সমস্যাটি প্রায় অন্য দিকেই পৌঁছে
চেষ্টা করুন-শেষ অবধি

উত্তর:


12

নিম্নলিখিতটি ধরে নেয় আপনার স্থানীয় রেপো অন্য সার্ভারে রেপোর ক্লোন, যেমন গিথুব; এবং আপনার প্রবাহের সার্ভারে পরিবর্তন করার অধিকার রয়েছে। আমার উদাহরণে, আমি এই উজানের রেপোটিকে "উত্স" বলেছি। git remote showঅন্যান্য ভাণ্ডারগুলির তালিকাতে চালান , এটি আপনাকে কী বলা হয় সে সম্পর্কে ইঙ্গিত দিতে পারে।

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

  • আপনার রেপো শাখা করতে: git checkout -b MyNewBranch
  • আপনার নতুন শাখার প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলি ঠেকাতে: git push origin MyNewBranch
  • অন্য মেশিনে একটি শাখা পরীক্ষা করার জন্য: git checkout MyNewBranch
  • অন্য শাখায় স্যুইচ করতে (যেমন "মাস্টার"): git checkout master
  • যখন মাস্টার থাকবেন তখন মাইনিউব্র্যাঞ্চকে আবার মার্জ করতে: git merge MyNewBranch
  • শাখা তালিকা করতে: git branch

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

এছাড়াও, এবং আমি এটি করার কারণ: আপনি যদি অর্ধেক পথ দিয়ে ভুল করেন তবে আপনি বর্তমান শাখায় পূর্ববর্তী কমিটিতে যেতে পারেন। অথবা, পিছনে ঝাঁপ দাও, এর একটি টুকরো ধরুন, এগিয়ে লাফ দিন এবং প্রয়োগ করুন।
আমাদানোন ইনক। 10:38

1
এই পদ্ধতিতে মার্জড মাস্টার শাখায় অসম্পূর্ণ কমিটগুলিও অন্তর্ভুক্ত করা হবে না?
ইমরেক

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

2
" অন্য একটি শাখায় চলে যেতেgit branch -d master " সম্পর্কে, আমি বিভ্রান্ত হয়ে পড়েছি, তা কি গিটকে মাস্টার শাখাটি মুছতে বলে না ?? (যাইহোক যাইহোক গিট শাখার ম্যানুয়াল পড়ার মাধ্যমে আমি এই ধারণাটি পেয়েছি)
তাসোস পাপাস্টাইলিয়ানু

2

আপনি git diffকোনও প্যাচ তৈরি করতে এবং তারপরে এটি অন্য মেশিনে প্রয়োগ করতে পারেন। অথবা আপনি একটি অস্থায়ী প্রতিশ্রুতি তৈরি করতে পারেন, তারপরে এটিকে অন্য মেশিন থেকে টানুন। এমনকি আপনি অন্য কোনও মেশিনে একটি অস্থায়ী শাখাও তৈরি করতে পারেন, সেখানে আপনার অস্থায়ী প্রতিশ্রুতিটি চাপুন, তারপরে শাখাটি মুছুন।

আমার প্রিয় পদ্ধতিটি দ্বিতীয়টি: একটি অস্থায়ী প্রতিশ্রুতি তৈরি করা, তারপর অন্য মেশিনে গিয়ে এমন কিছু করা:

$ git fetch ssh://first_machine/path/to/repo whatever_branch_i_was_working_on
$ git reset --hard FETCH_HEAD
$ git reset HEAD^

কেন এত জটিল এবং শুধু ব্যবহার করছেন না git format-patch?
চেষ্টা করুন-শেষ অবধি

এর থেকে আসলে আলাদা নয় git diff। আমি কি অনুপস্থিত কিছু আছে?
আরগায়ার

1
git format-patch deadbee..badcab1e- এটি .patchপ্রতিটি কমিটের জন্য আলাদা আলাদা ফাইল তৈরি করে সুন্দর নাম এবং প্রতিশ্রুতিবদ্ধ বার্তা সংরক্ষণ করে।
শেষের

এটি কি এখনও প্রতিশ্রুতিবদ্ধ না যে পরিবর্তনগুলির জন্য একটি প্যাচ তৈরি করে? এটি কি বর্তমান সূচি এবং এমন জিনিসগুলি পৃথক করে যা এখনও মঞ্চস্থ হয় না? দেখে মনে হচ্ছে এটি হয় না।
আরগায়ার

না, অনিবন্ধিত / স্টেস্টেড পরিবর্তনের জন্য নয়। তবে যেহেতু কোনও প্রতিশ্রুতি অন্য কারও ক্ষতি করে না যতক্ষণ না আপনি চাপ দিবেন না ততক্ষণ প্রতিশ্রুতি দেওয়া ঠিক হবে (একটি স্পষ্ট বার্তা যা "ডাব্লুআইপি" বলে - প্রগতিতে কাজ করা)।
শেষ মুহূর্তে

2

আমি কমিট করুন। আমি এটিকে ব্যক্তিগত শাখায় ঠেলাঠেলি করি , অন্যদিকে পরীক্ষা করে সংশোধন করি। এবং হয়ে গেলে ব্যক্তিগত শাখাটি মুছুন।

অবশ্যই আপনি সরাসরি repos এর মধ্যে ধাক্কা দিতে পারেন, আপনি বান্ডিল বা format-patch/ ব্যবহার করতে পারেন am, তবে একটি ব্যক্তিগত শাখা এতদূর সহজ সমাধান। এবং ইতিহাসের পুনর্লিখন কোনও বড় অংশ নয় যতক্ষণ না এটি কোনও ভাগ করা শাখায় ঠেলে দেওয়া হয় না। অনেক প্রকল্পে লোকেরা পর্যালোচনাটির জন্য তাদের বুঝতে সহজতর করার জন্য বৈশিষ্ট্য শাখাগুলি রিওয়াইন্ড করার কথা রয়েছে


0

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

.gitচিহ্নিত ডিরেক্টরির মধ্যে আপনার Git ইতিহাস রাখা হয়, তাই প্রকৃত ফাইল সাথে এই সংরক্ষণের আপনার সমগ্র প্রকল্প ইতিহাস অক্ষত রাখে হয়।

আপনি যদি স্থায়ীভাবে আসল মেশিনটি ব্যবহার করে শেষ করেন তবে আমি সম্ভবত এই পদ্ধতির প্রস্তাব দিই।


0

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

নামের একটি সাধারণ সরঞ্জাম রয়েছে git bundleযা আপনাকে কোনও কেন্দ্রীয় সংগ্রহশালা ছাড়াই সহজেই পরিবর্তনগুলি পাস করতে সহায়তা করতে পারে। প্রথমে রেপো ক্লোন করুন:

git clone https://github.com/octocat/Spoon-Knife.git working_copy_1
cd working_copy_1

কিছু পরিবর্তন করুন এবং একটি অস্থায়ী শাখায় তাদের প্রতিশ্রুতিবদ্ধ:

git checkout -b tmp_branch
git commit -a -m "temporary changes"

এখন, তাদের পরিবর্তনগুলি বান্ডিল করুন:

git bundle create ../tmp.bundle tmp_branch

এখন আপনার কাছে একটি বান্ডিল ফাইল রয়েছে আপনি নিজের নতুন মেশিনে মেল করতে পারবেন। আপনি কিভাবে এটি সেখানে ব্যবহার করবেন? আসুন একটি নতুন ওয়ার্কিং কপি তৈরি করুন:

cd ..
git clone https://github.com/octocat/Spoon-Knife.git working_copy_2
cd working_copy_2

আমাদের বান্ডিলটিকে অন্য দূরবর্তী হিসাবে বিবেচনা করা দরকার, যাতে আমরা এগুলি থেকে পরিবর্তন আনতে পারি

git remote add tmp ../tmp.bundle
git fetch tmp

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

git merge tmp/tmp_branch --squash

এবং যা অবশিষ্ট রয়েছে তা হ'ল অস্থায়ী দূরবর্তীটি সরিয়ে ফেলা:

git remote remove tmp

Viola! পরিবর্তনগুলি কোনও শাখা বা প্রতিশ্রুতির কোনও চিহ্ন ছাড়াই নতুন কার্যকরী অনুলিপিতে স্থানান্তরিত হয়েছিল!

তবে সত্যই - এই প্রক্রিয়াটি বেশ দীর্ঘ এবং জটিল। এটি গিট, এসভিএন নয় - আপনার ব্যক্তিগত শাখাটিকে কেন্দ্রীয় রেপোতে না ঠেলার কোনও কারণই উচিত নয়।

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