আমি কি গিট দিয়ে ইতিমধ্যে বিভক্ত কান্ডকে বিভক্ত করতে পারি?


204

আমি কমান্ডটিতে গিটের patchবিকল্পটি সম্প্রতি আবিষ্কার করেছি addএবং আমার অবশ্যই বলতে হবে এটি সত্যই একটি দুর্দান্ত বৈশিষ্ট্য। আমি এটিও আবিষ্কার করেছিলাম যে sচাবিটি আঘাত করে একটি বড় কুনি ছোট কুকুরের মধ্যে বিভক্ত হতে পারে যা প্রতিশ্রুতিটির নির্ভুলতা যুক্ত করে। তবে আমি যদি আরও স্পষ্টতা পেতে চাই তবে বিভক্ত হুঙ্কুটি যদি যথেষ্ট ছোট না হয়?

উদাহরণস্বরূপ, এই ইতিমধ্যে বিভক্ত হুন বিবেচনা করুন:

@@ -34,12 +34,7 @@
   width: 440px;
 }

-/*#field_teacher_id {
-  display: block;
-} */
-
-form.table-form #field_teacher + label,
-form.table-form #field_producer_distributor + label {
+#user-register form.table-form .field-type-checkbox label {
   width: 300px;
 }

আমি কীভাবে কেবল পরবর্তী প্রতিশ্রুতিতে সিএসএস মন্তব্য অপসারণ যুক্ত করতে পারি? sবিকল্প আর পাওয়া যায় না!

উত্তর:


253

আপনি যদি ব্যবহার করছেন git add -pএবং এর সাথে বিভক্ত হয়ে যাওয়ার পরেও sআপনার খুব কম পরিবর্তন নেই, আপনি eসরাসরি প্যাচটি সম্পাদনা করতে পারেন ।

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

-
-form.table-form #field_teacher + label,
-form.table-form #field_producer_distributor + label {

... এবং নীচের লাইনটি মুছে ফেলুন, যার সাথে শুরু হয় +। তারপরে আপনি যদি আপনার সম্পাদককে সংরক্ষণ এবং প্রস্থান করেন, কেবলমাত্র সিএসএস মন্তব্য সরানোর কাজ শুরু হবে।


9
কুল সমাধান! আমি এটি দেখেছি কিন্তু ভুল বোঝাবুঝি করেছি ... যদিও পরিবর্তনগুলি কার্যকারী গাছ থেকেও সরানো হবে।
গ্রেগ টায়ার

7
প্রকৃতপক্ষে, সাহায্যের পাঠ্য থেকে এটি খুব স্পষ্ট নয়। আমি নিজেকে এটি অনেকটা ব্যবহার করে দেখতে পাচ্ছি, যেহেতু আমি মনে করি গিট সত্যই আপনাকে প্রতিটি প্রতিশ্রুতি যথাসম্ভব যথাযথ এবং সুন্দর করে তুলতে উত্সাহ দেয় :)
মার্ক লংগায়ার

27
মনে রাখবেন যে আপনাকে সত্যিকার অর্থে এটি একটি স্থান দিয়ে প্রতিস্থাপন করতে হবে । আমি কেবল -অক্ষরগুলি মুছতে পারার জন্য এটি চেষ্টা করার চেষ্টা করেছি এবং গিট অভিযোগ করেছিলেন যে আমার প্যাচটি প্রযোজ্য নয়।
রায়ান লুন্ডি

3
আপনি '-' দিয়ে লাইনগুলি মুছে ফেলার কারণটি অনুমান করে চলেছেন এবং '+' এর সাথে একটি স্থানের পরিবর্তে এটি হ'ল আপনি প্যাচ তৈরি করছেন যেখানে '-' এর সাথে থাকা রেখাগুলি ইতিমধ্যে সরানো হয়েছে এবং ' এর ইতিমধ্যে যোগ করা হয়েছে (প্যাচ এর চোখের মধ্যে)। বা এটি দেখার অন্য একটি উপায়, আপনি কি আসলে সেই ক্রিয়াটি করেন যা সেই চরিত্রগুলি (-, +) প্রতিনিধিত্ব করে (একটি লাইন যুক্ত করে বা এটি সরিয়ে দেয়)। কেবলমাত্র '-এর এবং' + 'এর সাথে অবশিষ্ট রেখাগুলি পরিবর্তন হিসাবে রেকর্ড করা হয় এবং বাকীটি "ফাইলটি ঠিক কীভাবে হয়"।
atomictom

3
@Filype: আমি জানি না যে কেন কী হতো, আমি ভীত - আপনি চলমান ছিল git add -pএবং সম্পাদিত সঙ্গে একটি বড় দলা eযে শুধুমাত্র প্রভাবিত করা উচিত কী মঞ্চস্থ না আপনার কাজের গাছ।
লংগায়ার

60

আপনার example.cssচেহারাটি এর মতো বলে দিন :

.classname {
  width: 440px;
}

/*#field_teacher_id {
  display: block;
} */

form.table-form #field_teacher + label,
form.table-form #field_producer_distributor + label {
  width: 300px;
}

.another {
  width: 420px;
}

এখন মিডল ব্লকের স্টাইল সিলেক্টরগুলি পরিবর্তন করা যাক এবং এটির সময়ে আমরা কিছু পুরানো মন্তব্য-আউট শৈলী মুছুন যা আমাদের আর প্রয়োজন নেই।

.classname {
  width: 440px;
}

#user-register form.table-form .field-type-checkbox label {
  width: 300px;
}

.another {
  width: 420px;
}

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

পুরানো কোড মুছে ফেলা যুক্তিসঙ্গতভাবে অন্যান্য শৈল নির্বাচক পরিবর্তনের থেকে পৃথক। আমাদের দুটি স্বতন্ত্র কমিটের প্রয়োজন হবে, তাই আসুন প্যাচটির জন্য কুকুর যুক্ত করুন।

git add --patch
diff --git a/example.css b/example.css
index 426449d..50ecff9 100644
--- a/example.css
+++ b/example.css
@@ -2,12 +2,7 @@
   width: 440px;
 }

-/*#field_teacher_id {
-  display: block;
-} */
-
-form.table-form #field_teacher + label,
-form.table-form #field_producer_distributor + label {
+#user-register form.table-form .field-type-checkbox label {
   width: 300px;
 }

Stage this hunk [y,n,q,a,d,/,e,?]?

উফফ, দেখে মনে হচ্ছে পরিবর্তনগুলি খুব কাছাকাছি, তাই গিট তাদের একসাথে শিকার করেছে।

এমনকি টিপে টি ভাগ করার চেষ্টা করার sএকই ফলাফল রয়েছে কারণ স্পষ্টতাটি আমাদের নির্ভুল পরিবর্তনের জন্য দানাদার নয় gran প্যাচটি স্বয়ংক্রিয়ভাবে বিভক্ত করতে গিটের জন্য পরিবর্তিত লাইনের মধ্যে অপরিবর্তিত রেখাগুলি প্রয়োজন

সুতরাং, আসুন টিপুন ম্যানুয়ালি এটি সম্পাদনা করুনe

Stage this hunk [y,n,q,a,d,/,e,?]? e

গিটটি আমাদের পছন্দের সম্পাদকটিতে প্যাচটি খুলবে।

# Manual hunk edit mode -- see bottom for a quick guide
@@ -2,12 +2,7 @@
   width: 440px;
 }

-/*#field_teacher_id {
-  display: block;
-} */
-
-form.table-form #field_teacher + label,
-form.table-form #field_producer_distributor + label {
+#user-register form.table-form .field-type-checkbox label {
   width: 300px;
 }

# ---
# To remove '-' lines, make them ' ' lines (context).
# To remove '+' lines, delete them.
# Lines starting with # will be removed.
#
# If the patch applies cleanly, the edited hunk will immediately be
# marked for staging. If it does not apply cleanly, you will be given
# an opportunity to edit again. If all lines of the hunk are removed,
# then the edit is aborted and the hunk is left unchanged.

আসুন লক্ষ্য পর্যালোচনা করুন:

আমি কীভাবে কেবল পরবর্তী প্রতিশ্রুতিতে সিএসএস মন্তব্য অপসারণ যুক্ত করতে পারি?

আমরা এটিকে দুটি কমিটে বিভক্ত করতে চাই:

  1. প্রথম প্রতিশ্রুতিতে কিছু লাইন মুছে ফেলা (মন্তব্য অপসারণ) জড়িত।

    মন্তব্য করা রেখাগুলি অপসারণ করতে, কেবল তাদের একা রাখুন, তারা ইতিমধ্যে সংস্করণ নিয়ন্ত্রণে মুছে ফেলার ট্র্যাক করে চিহ্নিত করতে পেরেছে যেমনটি আমরা চাই।

    -/*#field_teacher_id {
    - display: block;
    -} */

  2. দ্বিতীয় প্রতিশ্রুতিবদ্ধতা হ'ল একটি পরিবর্তন, যা মুছে ফেলা এবং সংযোজন উভয়ই রেকর্ড করে ট্র্যাক করা হয়:

    • মোছা (পুরানো নির্বাচক লাইনগুলি সরানো হয়েছে)

      পুরানো নির্বাচক লাইনগুলি রাখতে (এই প্রতিশ্রুতি দেওয়ার সময় সেগুলি মুছবেন না), আমরা চাই ...

      '-' লাইনগুলি সরাতে, তাদের তৈরি করুন ''

      ... যার আক্ষরিক অর্থ বিয়োগ -চিহ্নগুলি একটি স্থান অক্ষরের সাথে প্রতিস্থাপন করা

      সুতরাং এই তিন লাইন ...

      -
      -form.table-form #field_teacher + label,
      -form.table-form #field_producer_distributor + label {

      ... হয়ে যাবে ( সমস্ত 3 লাইনের প্রথমটিতে একক স্থান লক্ষ্য করুন):


      form.table-form #field_teacher + label,
      form.table-form #field_producer_distributor + label {

    • সংযোজন (নতুন নির্বাচক লাইন যুক্ত)

      এই প্রতিশ্রুতি চলাকালীন নতুন নির্বাচক লাইনে যুক্ত হওয়াতে মনোযোগ না দেওয়ার জন্য আমরা চাই ...

      '+' লাইনগুলি সরাতে, তাদের মুছুন।

      ... যার আক্ষরিক অর্থ পুরো লাইনটি মুছে ফেলা:

      +#user-register form.table-form .field-type-checkbox label {

      (বোনাস: আপনি যদি নিজের সম্পাদক হিসাবে ভিএম ব্যবহার করছেন বলে মনে হয় তবে ddএকটি লাইন মুছতে টিপুন Nan ন্যানো ব্যবহারকারীরা Ctrl+ টিপুন K)

আপনি যখন সংরক্ষণ করেন তখন আপনার সম্পাদককে দেখতে দেখতে এটির মতো হওয়া উচিত:

# Manual hunk edit mode -- see bottom for a quick guide
@@ -2,12 +2,7 @@
   width: 440px;
 }

-/*#field_teacher_id {
-  display: block;
-} */

 form.table-form #field_teacher + label,
 form.table-form #field_producer_distributor + label {
   width: 300px;
 }

# ---
# To remove '-' lines, make them ' ' lines (context).
# To remove '+' lines, delete them.
# Lines starting with # will be removed.
#
# If the patch applies cleanly, the edited hunk will immediately be
# marked for staging. If it does not apply cleanly, you will be given
# an opportunity to edit again. If all lines of the hunk are removed,
# then the edit is aborted and the hunk is left unchanged.

এখন প্রতিশ্রুতিবদ্ধ যাক।

git commit -m "remove old code"

এবং কেবল তা নিশ্চিত করার জন্য, আসুন শেষ প্রতিশ্রুতি থেকে পরিবর্তনগুলি দেখুন।

git show
commit 572ecbc7beecca495c8965ce54fbccabdd085112
Author: Jeff Puckett <jeff@jeffpuckett.com>
Date:   Sat Jun 11 17:06:48 2016 -0500

    remove old code

diff --git a/example.css b/example.css
index 426449d..d04c832 100644
--- a/example.css
+++ b/example.css
@@ -2,9 +2,6 @@
   width: 440px;
 }

-/*#field_teacher_id {
-  display: block;
-} */

 form.table-form #field_teacher + label,
 form.table-form #field_producer_distributor + label {

পারফেক্ট - আপনি দেখতে পাচ্ছেন যে কেবল অপসারণগুলি পারমাণবিক অঙ্গীকারের অন্তর্ভুক্ত ছিল। এবার আসুন কাজটি শেষ করে বাকী প্রতিশ্রুতি দিন।

git add .
git commit -m "change selectors"
git show
commit 83ec3c16b73bca799e4ed525148cf303e0bd39f9
Author: Jeff Puckett <jeff@jeffpuckett.com>
Date:   Sat Jun 11 17:09:12 2016 -0500

    change selectors

diff --git a/example.css b/example.css
index d04c832..50ecff9 100644
--- a/example.css
+++ b/example.css
@@ -2,9 +2,7 @@
   width: 440px;
 }

-
-form.table-form #field_teacher + label,
-form.table-form #field_producer_distributor + label {
+#user-register form.table-form .field-type-checkbox label {
   width: 300px;
 }

শেষ অবধি আপনি দেখতে পারেন শেষ প্রতিশ্রুতিতে কেবল নির্বাচক পরিবর্তনগুলি অন্তর্ভুক্ত থাকে।


1
বোনাস # 2: আপনি যদি ভিআইএমটিকে আপনার সম্পাদক হিসাবে ব্যবহার করছেন বলে মনে হয় তবে একটি লাইন মুছতে আপনার কীবোর্ডে দুবার "ডি" টিপতে হবে: ডি
অ্যালেক্সসাস

3
এছাড়াও, আপনি যুক্ত করতে চান না এমন যুক্ত লাইনগুলি সরিয়ে না +দিয়ে আপনি এর সাথে প্রতিস্থাপন করতে পারেন #। ফলাফলটি একই, তবে আপনি মুছে ফেলা (এবং প্রত্যাবর্তন করতে অক্ষম) হতে অস্বস্তি বোধ করছেন বা সংরক্ষণের আগে আপনি পরীক্ষা করতে চান।
ওব-আইভান

এবং এটি, ভিমের জন্য r #প্লাস এক্সডি শেষ হয়েছে
aksh1618

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

9

আপনি যদি গিট গুই ব্যবহার করতে পারেন তবে এটি আপনাকে লাইনে পরিবর্তিত রেখার মঞ্জুরি দেয়। দুর্ভাগ্যক্রমে, কমান্ড লাইন থেকে এটি কীভাবে করা যায় তা আমি জানি না - অথবা এটি সম্ভব হলেও।

আমি অন্য একটি অপশন যা অতীতে ব্যবহার করেছি তা হ'ল পরিবর্তনের অংশটি ফিরিয়ে আনছে (সম্পাদকটি উন্মুক্ত রাখুন), আমার যে বিটগুলি চান তা প্রতিশ্রুতিবদ্ধ করুন, সম্পাদকের কাছ থেকে পূর্বাবস্থায় ফিরে আসুন এবং সংরক্ষণ করুন। খুব মার্জিত না, তবে কাজটি সম্পন্ন করে। :)


সম্পাদনা (গিট-গুই ব্যবহার):

আমি নিশ্চিত নই যে গিট-গুই এমএসএসজিট এবং লিনাক্স সংস্করণে সমান কিনা, আমি কেবল এমএসএসজিট ব্যবহার করেছি। তবে ধরে নিলে এটি একই, আপনি যখন এটি চালান, সেখানে চারটি পেন থাকে: উপরের-বাম দিকের ফলকটি হল আপনার কার্যকরী ডিরেক্টরি পরিবর্তন হয়, নীচের বামে আপনার স্তরগুলি পরিবর্তন হয়, নির্বাচিত ফাইলটির জন্য উপরের-ডানদিকে ভিন্ন বা মঞ্চস্থ) এবং নীচের ডানটি কমিটের বর্ণনার জন্য (আমার সন্দেহ হয় আপনার এটির প্রয়োজন হবে না)। আপনি ডানদিকের ডানদিকের একটি ফাইল ক্লিক করুন, আপনি পৃথক দেখতে পাবেন। আপনি যদি কোনও ভিন্ন লাইনে ডান ক্লিক করেন তবে আপনি একটি প্রসঙ্গ মেনু দেখতে পাবেন। দুটি লক্ষণীয় বিকল্পগুলি হ'ল "প্রতিশ্রুতিবদ্ধ হওয়ার জন্য পর্যায় হুন" এবং "প্রতিশ্রুতির জন্য মঞ্চ লাইন"। আপনি যে লাইনে প্রতিশ্রুতিবদ্ধ হতে চান তাতে "প্রতিশ্রুতির জন্য স্টেজ লাইন" নির্বাচন করা চালিয়ে যান এবং আপনার কাজ শেষ হয়ে যায়। আপনি চাইলে বেশ কয়েকটি লাইনও নির্বাচন করতে পারেন এবং সেগুলি মঞ্চ করতে পারেন।

প্রতিশ্রুতিবদ্ধ হিসাবে, আপনি হয় গি সরঞ্জাম বা কমান্ড লাইন ব্যবহার করতে পারেন।


আপনার দ্বিতীয় প্রস্তাবটি বেশ স্পষ্ট, তবে প্রথমটি আকর্ষণীয়, আপনি আরও কিছু বিশদ বিবরণ করতে পারেন? আমি ইনস্টল করেছি git-guiতবে আপনি কী বর্ণনা করছেন তা কীভাবে অর্জন করবেন তা সম্পর্কে আমার কোনও ধারণা নেই।
গ্রেগ টায়ার

অনেক ধন্যবাদ! এইটা কাজ করে! এমনকি আমি যে লাইনগুলি মঞ্চ করতে চাইছিলাম তা নির্বাচন করতে সক্ষম হয়েছি এবং তাদের একটি ক্লিকের সাথে সূচী করে তুলতে পারি।
গ্রেগ টায়ার

0

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

যদি আপনি কমিটের ক্রম সম্পর্কে উদ্বিগ্ন হন তবে কেবল ব্যবহার করুন git rebase -i


এটিই আমি চেষ্টা করেছিলাম, এবং আমার প্রশ্নের হুঙ্কটি কেবল তখনই যখন আমি git add -pআবার দৌড়ান , তবে আমি এটি ভাগ করতে পারি না। আমি এটি পেয়েছি: Stage this hunk [y,n,q,a,d,/,e,?]?এবং তারপরে হিট করা সাহায্য মুদ্রণ করে। BTW, আপনি বোঝানো add patchনা patch add? অথবা git patchআমার ইনস্টল করা উচিত এমন একটি প্লাগইন আছে ?
গ্রেগ টায়ার

আপনি আবার এই দৌড়ানোর আগে কি আপনি মঞ্চস্থ শিকারীদের প্রতিশ্রুতি দিয়েছিলেন? এবং না, মার্চুরিয়ালের প্লাগইন রয়েছে, গিট নেই।
আবিজার্ন

না, আমি চাইনি, আমি তাদের একই প্রতিশ্রুতিতে থাকতে চাই (তবে আমার ধারণা আপনার সমাধানটি যদি কাজ করে তবে আমি এটি অর্জনের জন্য --amend ব্যবহার করতে পারি)। আমি এটা চেষ্টা করে দেখব.
গ্রেগ টায়ার

আমার উত্তর হিসাবে বলেছেন → git rebase -i। যা এর চেয়ে আরও নমনীয়commit --amend
অ্যাবিজার্ন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.