গিট রিসেটের ব্যবহারিক ব্যবহার - সফট?


136

আমি প্রায় এক মাস ধরে গিট নিয়ে কাজ করছি। প্রকৃতপক্ষে আমি গতকালই প্রথমবারের জন্য রিসেট ব্যবহার করেছি, তবে নরম রিসেটটি এখনও আমার কাছে খুব একটা বোঝায় না।

আমি বুঝতে পারি আমি সূচি বা কার্যনির্বাহী ডিরেক্টরি পরিবর্তন না করে প্রতিশ্রুতি সম্পাদনা করতে সফট রিসেটটি ব্যবহার করতে পারি, যেমনটি আমি চাই git commit --amend

এই দুটি কমান্ড কি আসলেই একই ( reset --softবনাম commit --amend)? ব্যবহারিক দিক থেকে এক বা অন্যটি ব্যবহার করার কোনও কারণ? এবং আরও গুরুত্বপূর্ণ, reset --softপ্রতিশ্রুতি সংশোধন করা ছাড়াও কি অন্য কোনও ব্যবহার রয়েছে ?

উত্তর:


110

git resetসমস্ত চলন্ত সম্পর্কে HEAD, এবং সাধারণত শাখা রেফ
প্রশ্ন: কাজের গাছ এবং সূচক সম্পর্কে কী?
যখন নিয়োগ করা হয় --soft, সরানো হয় HEAD, প্রায়শই শাখা রেফ আপডেট করে এবং কেবলমাত্রHEAD
এটি থেকে পৃথক commit --amend:

  • এটি একটি নতুন প্রতিশ্রুতি তৈরি করে না।
  • এটা আসলে (যেমন কোন কমিট মাথা স্থানান্তর করতে পারেন commit --amendশুধুমাত্র সম্পর্কে না , মাথা চলন্ত যখন বর্তমান পুনরায় কমিট যার ফলে)

সংযুক্তির এই উদাহরণটি সবেমাত্র পাওয়া গেছে:

  • একটি ক্লাসিক মার্জ
  • একটি সাবট্রি মার্জ

সবগুলি একটিতে (অক্টোপাস, যেহেতু দুটিরও অধিক শাখা একত্রীকরণ করা হয়েছে) সংযুক্ত হওয়ার প্রতিশ্রুতিবদ্ধ।

টমাস "ওয়্যারহ্যামস্টার" কার্নেক্কি তার "সাবট্রি অক্টোপাস মার্জ" নিবন্ধে ব্যাখ্যা করেছেন :

  • আপনি যদি একটি প্রকল্পকে অন্য প্রকল্পের উপ-ডিরেক্টরিতে রূপান্তর করতে চান এবং পরবর্তীকালে সাবপ্রজেক্টটি আপ টু ডেট রাখতে চান তবে সাবট্রি মার্জ কৌশলটি ব্যবহার করা যেতে পারে। এটি গিট সাবমডিউলগুলির বিকল্প is
  • অক্টোপাস মার্জ কৌশলটি তিন বা ততোধিক শাখাগুলি মার্জ করার জন্য ব্যবহার করা যেতে পারে। সাধারণ কৌশলটি কেবল দুটি শাখা মার্জ করতে পারে এবং আপনি যদি এর চেয়ে আরও বেশি সংশ্লেষ করার চেষ্টা করেন, গিটটি স্বয়ংক্রিয়ভাবে অক্টোপাস কৌশলটিতে ফিরে আসে back

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

আমার একটি সুপারপ্রজেক্ট রয়েছে, এটি কল করুন projectAএবং একটি সাবপ্রজেক্ট projectB, যা আমি একটি উপ-ডিরেক্টরিতে রূপান্তরিত করেছি projectA

(এটি সাবট্রি মার্জ অংশ)

আমি কয়েকটি স্থানীয় কমিট পরিচালনাও করছি।
ProjectAনিয়মিত আপডেট হয়, projectBপ্রতি কয়েক দিন বা সপ্তাহে একটি নতুন সংস্করণ থাকে এবং এটি সাধারণত কোনও নির্দিষ্ট সংস্করণের উপর নির্ভর করে projectA

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

# Merge projectA with the default strategy:
git merge projectA/master

# Merge projectB with the subtree strategy:
git merge -s subtree projectB/master

এখানে লেখক একটি ব্যবহার করেছিলেন reset --hard, এবং তারপরে read-treeপ্রথম দুটি সংশ্লেষ কার্যকারী গাছ এবং সূচকে কী করেছিল তা পুনরুদ্ধার করার জন্য, তবে এটিই reset --softসহায়তা করতে পারে:
আমি এই দুটি সংহতগুলি কীভাবে পুনরায় করব , যা কাজ করেছে, অর্থাৎ আমার কার্যকারী গাছ এবং সূচকগুলি ঠিক আছে, কিন্তু এই দুটি কমিট রেকর্ড না করে?

# Move the HEAD, and just the HEAD, two commits back!
git reset --soft HEAD@{2}

এখন, আমরা টমসের সমাধানটি আবার শুরু করতে পারি:

# Pretend that we just did an octopus merge with three heads:
echo $(git rev-parse projectA/master) > .git/MERGE_HEAD
echo $(git rev-parse projectB/master) >> .git/MERGE_HEAD

# And finally do the commit:
git commit

সুতরাং, প্রতিটি সময়:

  • আপনি যা শেষ করেছেন তার সাথে আপনি সন্তুষ্ট (কার্যকর গাছ এবং সূচকের মেয়াদে)
  • আপনি যে সমস্ত প্রতিশ্রুতি সেখানে পৌঁছেছেন তাতে আপনি সন্তুষ্ট নন :

git reset --soft উত্তর।


8
নিজের জন্য নোট: সঙ্গে স্কোয়াশ করা সহজ উদাহরণ git reset --soft: stackoverflow.com/questions/6869705/...
VonC

3
এটিও কার্যকর যদি আপনি ভুল শাখায় প্রতিশ্রুতিবদ্ধ হন। সমস্ত পরিবর্তন মঞ্চ অঞ্চলে ফিরে যায় এবং ডান শাখাটি চেকআউট করার সময় আপনার সাথে চলে আসে।
স্মুডবডি

44

কেস ব্যবহার করুন - স্থানীয় কমিটগুলির একটি সিরিজ একত্রিত করুন

"ওফ! এই তিনটি কমিট কেবল একটি হতে পারে" "

সুতরাং, সর্বশেষ 3 টি (বা যাই হোক না কেন) কমান্ডটি পূর্বাবস্থায় ফিরিয়ে আনুন (সূচক এবং কার্যনির্বাহী ডিরেক্টরিকে প্রভাবিত না করে)। তারপরে এক হিসাবে সমস্ত পরিবর্তন করুন।

যেমন

> git add -A; git commit -m "Start here."
> git add -A; git commit -m "One"
> git add -A; git commit -m "Two"
> git add -A' git commit -m "Three"
> git log --oneline --graph -4 --decorate

> * da883dc (HEAD, master) Three
> * 92d3eb7 Two
> * c6e82d3 One
> * e1e8042 Start here.

> git reset --soft HEAD~3
> git log --oneline --graph -1 --decorate

> * e1e8042 Start here.

এখন আপনার সমস্ত পরিবর্তন সংরক্ষিত এবং এক হিসাবে প্রতিশ্রুতিবদ্ধ প্রস্তুত।

আপনার প্রশ্নের সংক্ষিপ্ত উত্তর

এই দুটি কমান্ড কি আসলেই একই ( reset --softবনাম commit --amend)?

  • না।

ব্যবহারিক দিক থেকে এক বা অন্যটি ব্যবহার করার কোনও কারণ?

  • commit --amend একেবারে শেষ কমিট থেকে ফাইল যুক্ত / rm করতে বা এর বার্তা পরিবর্তন করতে।
  • reset --soft <commit> বেশ কয়েকটি ক্রমিক ক্রিয়াকলাপকে একত্রে একত্রিত করতে।

এবং আরও গুরুত্বপূর্ণ, reset --softপ্রতিশ্রুতি সংশোধন করা ছাড়াও কি অন্য কোনও ব্যবহার রয়েছে ?

  • অন্যান্য উত্তর দেখুন :)

2
"কোন reset --softপ্রতিশ্রুতি সংশোধন করা ছাড়াও অন্য কোনও ব্যবহার রয়েছে - এর জন্য অন্যান্য উত্তরগুলি দেখুন
অ্যান্টনি হ্যাচকিনস

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

18

আমি এটি কেবলমাত্র শেষ প্রতিশ্রুতির চেয়ে আরও বেশি সংশোধন করতে ব্যবহার করি ।

ধরা যাক আমি A কমান্ডে ভুল করেছি এবং তারপরে কমিট বি তৈরি করেছি এখন আমি কেবল বি সংশোধন করতে পারি তাই আমি করি git reset --soft HEAD^^, আমি সংশোধন করি এবং এ-কে পুনরায় প্রতিশ্রুতিবদ্ধ করব এবং তারপরে বি-কমিট করব re

অবশ্যই, এটি বড় কমিটের পক্ষে খুব সুবিধাজনক নয় ... তবে আপনার যেকোনভাবে বড় কমিট করা উচিত নয় ;-)


3
git commit --fixup HEAD^^ git rebase --autosquash HEAD~Xখুব ভাল কাজ করে।
নিক্লাস

3
git rebase --interactive HEAD^^যেখানে আপনি A এবং B উভয় প্রতিশ্রুতি সম্পাদনা করতে পছন্দ করেন এইভাবে A এবং B এর প্রতিশ্রুতিবদ্ধ বার্তাগুলি রাখে, প্রয়োজন হলে আপনি সেগুলিও সংশোধন করতে পারেন।
পল প্লেডিজ

2
আমি এ-তে পুনরায় সেট করার পরে কীভাবে আমি বি-কে প্রতিশ্রুতিবদ্ধ করব?
উত্তরবঙ্গ

1
সম্ভবত কম কাজ করার অন্য একটি উপায়: আপনার গিট লগটি পরীক্ষা করুন, বি এর কমিট হ্যাশ পান, তারপরে git reset A, পরিবর্তন করুন এবং যুক্ত করুন git commit --amend,, git cherry-pick <B-commit-hash>
nnot101

15

আর একটি সম্ভাব্য ব্যবহার স্ট্যাশিংয়ের বিকল্প হিসাবে রয়েছে (যা কিছু লোক পছন্দ করে না, যেমন দেখুন https://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/ )।

উদাহরণস্বরূপ, যদি আমি একটি শাখায় কাজ করি এবং মাস্টারকে জরুরিভাবে কিছু ঠিক করার দরকার হয় তবে আমি কেবল এটি করতে পারি:

git commit -am "In progress."

তারপরে মাস্টার চেকআউট করুন এবং ঠিক করুন। আমি হয়ে গেলে, আমি আমার শাখায় ফিরে এসে করি

git reset --soft HEAD~1

আমি যেখানেই ছেড়েছি সেখানে কাজ চালিয়ে যেতে।


3
আপডেট (এখন যে আমি গিটটি আরও ভালভাবে বুঝতে পেরেছি): --softএখানে আসলেই অপ্রয়োজনীয়, যদি না আপনি পরিবর্তনগুলি অবিলম্বে মঞ্চস্থ হওয়ার বিষয়ে যত্নবান হন। এটি করার git reset HEAD~সময় আমি এখন ব্যবহার করি । যদি আমি আছে কিছু পরিবর্তন মঞ্চস্থ যখন আমি শাখা স্যুইচ করতে হবে, এবং এটি যে ভাবে রাখতে চান, তাহলে আমি কি git commit -m "staged changes", তারপর git commit -am "unstaged changes", তারপর পরে git reset HEAD~অনুসরণ git reset --soft HEAD~সম্পূর্ণভাবে পরিশ্রমী রাষ্ট্র ফিরিয়ে আনুন। যদিও, সত্যি কথা বলতে আমি এই দুটি জিনিসই এখন অনেক কম করি যে সম্পর্কে আমি জানি git-worktree:)
ডেল্টাক্রাক্স

7

git reset --softআপনার সূচক এবং কার্যনির্বাহী বৃক্ষে আপনার যে পরিবর্তনগুলি হয়েছে তার জন্য আপনি পিতামাতার হিসাবে যে সংস্করণটি রাখতে চান তা পরিবর্তন করতে আপনি ব্যবহার করতে পারেন । যেগুলি ক্ষেত্রে এটি দরকারী সেগুলি বিরল। কখনও কখনও আপনি সিদ্ধান্ত নিতে পারেন যে আপনার কার্যনির্বাহী গাছের পরিবর্তনগুলি কোনও অন্য শাখার মধ্যে থাকা উচিত। অথবা আপনি এটিকে একাধিক কমিটি (স্কোয়াশ / ভাঁজের সমান) হিসাবে ভেঙে ফেলার সহজ উপায় হিসাবে ব্যবহার করতে পারেন।

ব্যবহারিক উদাহরণের জন্য ভনকের এই উত্তরটি দেখুন: গিটে স্কোয়াশ প্রথম দুটি কমিট?


এটি একটি ভাল প্রশ্ন যা আমি এর আগে খুঁজে পাইনি। তবে আমি নিশ্চিত নই যে আমি রিসেট নরম ব্যবহার করে কীভাবে অন্য একটি শাখায় পরিবর্তন আনতে পারি তা দেখতে পাচ্ছি। সুতরাং আমার চেকআউট শাখা আছে, তারপরে আমি ব্যবহার করব git reset --soft anotherBranchএবং তারপরে সেখানে প্রতিশ্রুতিবদ্ধ করব? তবে আপনি প্রকৃতপক্ষে ckeckout শাখা পরিবর্তন করেন না, তাই আপনি কি শাখায় বা অন্য ব্রাঞ্চে প্রতিশ্রুতিবদ্ধ হবেন ?
এজেজে

এটি করার সময় আপনি গিট চেকআউট ব্যবহার করবেন না এটি গুরুত্বপূর্ণ কারণ এটি আপনার গাছকে পরিবর্তন করবে। গিট পুনরায় সেট করার কথা ভাবেন - সন্ধানটি কেবলমাত্র হেড পয়েন্টগুলিতে সংশোধন করার কৌশল হিসাবে সাফ করে।
জোহানেস রুডল্ফ

7

একটি সম্ভাব্য ব্যবহার হ'ল আপনি যখন অন্য কোনও মেশিনে কাজ চালিয়ে যেতে চান। এটি এর মতো কাজ করবে:

  1. স্ট্যাশ-জাতীয় নাম সহ একটি নতুন শাখা চেকআউট করুন,

    git checkout -b <branchname>_stash
    
  2. আপনার স্ট্যাশ শাখা উপরে ঠেলা,

    git push -u origin <branchname>_stash
    
  3. আপনার অন্যান্য মেশিনে স্যুইচ করুন।

  4. আপনার স্ট্যাশ এবং বিদ্যমান উভয় শাখা নীচে টানুন,

    git checkout <branchname>_stash; git checkout <branchname>
    
  5. আপনার এখনই আপনার বিদ্যমান শাখায় থাকা উচিত। স্ট্যাশ শাখা থেকে পরিবর্তনগুলিতে মার্জ করুন,

    git merge <branchname>_stash
    
  6. আপনার মার্জ হওয়ার আগে আপনার বিদ্যমান শাখাটিকে নরম পুনরায় সেট করুন,

    git reset --soft HEAD^
    
  7. আপনার স্ট্যাশ শাখা সরান,

    git branch -d <branchname>_stash
    
  8. আপনার স্ট্যাশ শাখাটিও উত্স থেকে সরান,

    git push origin :<branchname>_stash
    
  9. আপনার পরিবর্তনগুলি নিয়ে কাজ চালিয়ে যান যেন আপনি এগুলিকে সাধারণভাবে স্ট্যাশ করেছেন।

আমি ভাবি, ভবিষ্যতে গিটহাব ও কো। কম পদক্ষেপে এই "রিমোট স্ট্যাশ" কার্যকারিতাটি দেওয়া উচিত।


2
আমি এটি উল্লেখ করতে চাই যে আপনার প্রথম মেশিনে থাকা প্রথম স্ট্যাশ এবং পপ সম্পূর্ণ অপ্রয়োজনীয়, আপনি কেবল একটি নোংরা ওয়ার্কিং কপি থেকে সরাসরি একটি নতুন শাখা তৈরি করতে পারেন, প্রতিশ্রুতিবদ্ধ করতে পারেন এবং তারপরে পরিবর্তনগুলি রিমোট পর্যন্ত চাপতে পারেন।

7

একটি ব্যবহারিক ব্যবহার হ'ল যদি আপনি ইতিমধ্যে আপনার স্থানীয় রেপোতে প্রতিশ্রুতিবদ্ধ থাকেন (যেমন। গিট কমিট-এম) তবে আপনি গিট রিসেট করে শেষ প্রতিশ্রুতিটি বিপরীত করতে পারেন - স্বাচ্ছন্দ্য ~ 1

এছাড়াও আপনার জ্ঞানের জন্য, যদি আপনি ইতিমধ্যে আপনার পরিবর্তনগুলি মঞ্চায়িত করেছেন (যেমন গিট অ্যাড সহ।) তবে আপনি গিট রিসেট - মিক্সড হেড করে স্টেজিংকে বিপরীত করতে পারেন বা আমি সাধারণত ব্যবহার করেছি মাত্রgit reset

শেষ অবধি, গিট রিসেট - আপনার স্থানীয় পরিবর্তনগুলি সহ সবকিছু মুছবে । শীর্ষস্থানীয় আপনাকে জানায় যে শীর্ষ থেকে কতগুলি প্রতিশ্রুতিবদ্ধ।


1
git reset --soft HEAD ~1আমাকে দেয় fatal: Cannot do soft reset with paths.আমি মনে করি আমাদের মাথা দেওয়ার পরে স্থানটি সরিয়ে ফেলতে হবে যাতে এটি হবেgit reset --soft HEAD~1
অ্যান্ড্রু লোহার

6

' git reset --soft <sha1>' ব্যবহারের দুর্দান্ত কারণ হ'ল সরানোHEAD একটি খালি রেপোতে ।

যদি আপনি ব্যবহার করার চেষ্টা করেন --mixedবা--hard বিকল্প বিকল্পটি একটি ত্রুটি পাবেন যেহেতু আপনি গাছ এবং / অথবা সূচকটি ব্যবহার করছেন না যা সংশোধন এবং কাজ করার চেষ্টা করছেন।

দ্রষ্টব্য: খালি রেপো থেকে আপনার সরাসরি এটি করতে হবে।

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


1
আপনার পূর্ববর্তী উত্তরে ( স্ট্যাকওভারফ্লো.com/ প্রশ্নগুলি / 4624881/… ) উল্লিখিত হিসাবে , এটি সত্য যখন আপনার খালি রেপোতে সরাসরি অ্যাক্সেস থাকে (যা আপনি এখানে উল্লেখ করেছেন)। যদিও +1
ভোনসি

@ ভনসি হ্যাঁ, একেবারে সঠিক এবং নোটটি যুক্ত করার জন্য ধন্যবাদ! আমি যুক্ত করতে ভুলে যেতে থাকি যেহেতু আমি ধরে নিচ্ছি যে রিসেটগুলি সরাসরি রেপো থেকে করা হয়েছে। এছাড়াও, আমি ধরে নিচ্ছি যে ব্যক্তিটি বেয়ার রেপোতে যে শাখাটি পুনরায় সেট করতে চায় সেগুলি তাদের সক্রিয় শাখা। যদি শাখাটি তাদের সক্রিয় শাখা না হয় তবে খালি রেপোগুলির জন্য কীভাবে সক্রিয় শাখাটি আপডেট করবেন সে সম্পর্কে আপনার উত্তর অনুসারে ( স্ট্যাকওভারফ্লো.com / উকশনস / ৩৩০১৫৫6/২ ) আপডেট করা দরকার । আমি সক্রিয় শাখার তথ্য সহ উত্তরটি আপডেট করব। আবার ধন্যবাদ!!!
হাজোক 17'11

2

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

তাই git reset --soft HEAD~1তুলনায় অনেক বেশি দরকারীcommit --amend এই দৃশ্যের । আমি প্রতিশ্রুতিটি পূর্বাবস্থায় ফিরিয়ে আনতে পারি, সমস্ত পরিবর্তনগুলি আবার মঞ্চে ফিরে আসতে পারি এবং সোর্সট্রি ব্যবহার করে স্টেজযুক্ত বিটগুলি পুনরায় শুরু করতে পারি।

সত্যিই, আমার কাছে মনে হয় commit --amendএটি দুটির চেয়ে বেশি রিন্ডানড কমান্ড, তবে গিটটি হ'ল গিট এবং একইরকম আদেশ থেকে কিছুটা লজ্জা পায় না যা কিছুটা আলাদা কাজ করে।


1

যদিও আমি এই থ্রেডের উত্তরগুলি সত্যিই পছন্দ করি তবে আমি এটি ব্যবহার করি git reset --soft কিছুটা আলাদা, তবে তবুও একটি বাস্তব ব্যবহারিক দৃশ্যের জন্য ।

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

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

সুতরাং আমি git reset --soft HEAD~44 টি কমিট ফিরে যেতে ব্যবহার করি । এটি আমাকে সমস্ত পরিবর্তন একসাথে দেখতে দেয়। আমি যখন আমার পরিবর্তনের বিষয়ে আত্মবিশ্বাসী, তখন আমি git reset HEAD@{1}এটি করতে পারি এবং আত্মবিশ্বাসের সাথে এটিকে দূরবর্তী স্থানে ঠেলে দিতে পারি।


1
... তারপরে git add --patchএবং git commitবারবার আপনি যে প্রতিশ্রুতিবদ্ধ সিরিজটি তৈরি করেছিলেন তা তৈরি করতে যদি আপনি যদি জানতেন যে আপনি কী করছেন পাশাপাশি। আপনার প্রথম কমিটগুলি আপনার ডেস্কের নোটগুলির মতো বা মেমোর প্রথম খসড়ার মতো, তারা প্রকাশের জন্য নয়, আপনার চিন্তাভাবনাটি সংগঠিত করার জন্য রয়েছে।
jthill

আরে, আপনি যা পরামর্শ দিচ্ছেন তা আমি পুরোপুরি পাইনি।
সোয়াঙ্কি কোডার

1
শুধু পরিবর্তে করছেন যে git reset @{1}আপনার প্রথম খসড়া সিরিজ পুনরুদ্ধার করতে, আপনি যদি এর পরিবর্তে থেকে একটি জন্য-প্রকাশন সিরিজ নির্মাণ করতে পারেন git add -pএবং git commit
jthill

হ্যাঁ সঠিক. অপর একটি উপায় হ'ল (আমি সাধারণত এটি অনুসরণ করি) আপস্ট्रीम / মাস্টার পুনর্বাসনা করা এবং একক একটিতে কমিটসকে স্কোয়াশ করা।
সোয়াঙ্কি কোডার

1

আরেকটি ব্যবহারের ক্ষেত্রে হ'ল আপনি যখন অন্য ব্রাঞ্চটিকে একটি টানার অনুরোধে আপনার সাথে প্রতিস্থাপন করতে চান, উদাহরণস্বরূপ, আপনাকে বলতে পারি যে আপনার কাছে এ, বি, সি বৈশিষ্ট্যযুক্ত একটি সফ্টওয়্যার রয়েছে software

আপনি পরবর্তী সংস্করণটি নিয়ে বিকাশ করছেন এবং আপনি:

  • সরানো বৈশিষ্ট্য বি

  • যোগ করা বৈশিষ্ট্য ডি

প্রক্রিয়াতে, বৈশিষ্ট্য বি জন্য সবেমাত্র যুক্ত হটফিক্সগুলি বিকাশ করুন B.

আপনি পরের দিকে বিকাশ করতে পারেন, তবে এটি কখনও কখনও অগোছালো হতে পারে তবে আপনি git reset --soft origin/developনিজের পরিবর্তনগুলি নিয়ে একটি প্রতিশ্রুতিও ব্যবহার করতে পারেন এবং তৈরি করতে পারেন এবং শাখাটি কোনও দ্বন্দ্ব ছাড়াই মার্জ হয় এবং আপনার পরিবর্তনগুলি বজায় রাখে।

দেখা যাচ্ছে এটি git reset --softএকটি সহজ আদেশ command আমি ব্যক্তিগতভাবে এটি "ডাব্লুআইপি" এর মতো "সম্পন্ন কাজ" না করার জন্য স্কোয়াশ করার জন্য প্রচুর ব্যবহার করি তাই যখন আমি টানার অনুরোধটি খুলি, তখন আমার সমস্ত অঙ্গীকারগুলি বোধগম্য।

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