আমি কীভাবে স্থানীয়ভাবে এবং `গিট পুশের পরে একটি রিমোটে একটি it গিট কমিট und পূর্বাবস্থাপন করতে পারি`


242

আমি git commitএকটি দ্বারা অনুসরণ করা হয়েছে git push। আমি কীভাবে স্থানীয় এবং দূরবর্তী উভয় সংগ্রহস্থলগুলিতে এই পরিবর্তনটি ফিরিয়ে আনতে পারি?

$ git log
commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8
Author: Michael Silver <Michael Silver@gmail.com>
Date:   Tue Jun 11 12:24:23 2011 -0700

উত্তর:


400
git reset --hard HEAD~1
git push -f <remote> <branch>

(উদাহরণ পুশ git push -f origin bugfix/bug123:)

এটি শেষ প্রতিশ্রুতি পূর্বাবস্থায় ফিরে আসবে এবং আপডেট করা ইতিহাসকে রিমোটে ঠেলে দেবে। আপনাকে পাস করতে হবে -fকারণ আপনি রিমোটে প্রবাহের ইতিহাস প্রতিস্থাপন করছেন।


24
বিকল্পভাবে, ব্যবহার করুন git reset --hard <the-sha-you-want-to-return-to>
আলেকজান্ডার গ্রো

2
রেফারেন্সকে বলা হয় হেড (কেস সেনসিটিভ)
ডুনি

26
এছাড়াও, সাবধানতা অবলম্বন করুন - অন্যান্য লোকেরা রেপো থেকে টানলে এএফআইকে আপনার করা উচিত নয়।
আমদান

1
@ বিপিনভায়ালু এটি বর্তমানে আপনার যে শাখায় আছেন তা প্রভাবিত করে। আরও স্পষ্টভাবে, হেড। HEAD বেশিরভাগ ক্ষেত্রে একটি শাখায় "সংযুক্ত" থাকে (কোনও অঙ্গীকারের দিকে সরাসরি নির্দেশ করার পরিবর্তে একটি শাখার নামকে নির্দেশ করে)। সুতরাং, সাধারণভাবে বলতে গেলে এটি শাখা হেড পয়েন্টকে প্রভাবিত করবে। git log --decorate --onelineআপনার হেড কোথায় নির্দেশ করে তা খুঁজে পেতে ব্যবহার করুন ।
আলেকজান্ডার গ্রো

4
git reset HEAD~1আপনি যদি না চান তবে আপনার পরিবর্তনগুলি সর্বস্বান্ত হয়ে যাবে (অযাচিত পরিবর্তনগুলি)। পরিবর্তন করুন, প্রতিশ্রুতি দিন এবং আবার চাপ দিনgit push -f [origin] [branch]
সফটওয়ার

161

সাধারণত, ব্যবহার করে একটি "বিপরীত" প্রতিশ্রুতিবদ্ধ করুন:

git revert 364705c

তারপরে এটি যথারীতি রিমোটে প্রেরণ করুন:

git push

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


9
এটি আলেকজান্ডার গ্রোজের (নির্বাচিত উত্তর) চেয়ে নিরাপদ (সম্ভবত সম্ভবত আরও ভাল) উত্তর।
গ্রেইক

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

5
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, ইতিহাসের ওভাররাইট না করা সর্বোত্তম অনুশীলন, এমনকি যদি কোনও দলের সাথে সহযোগিতা করে। git resetআপনি যদি এখনও সার্ভারে পরিবর্তনগুলি না ঠেকেন তবেই তা গ্রহণযোগ্য।
জোসে আলেকজান্ডার ইবাররা

17
@ জোসেয়েবার আমি সব ক্ষেত্রেই একমত নই। বেশিরভাগ ক্ষেত্রে হ্যাঁ, আপনার ইতিহাসটি ওভাররাইট করা উচিত নয়। তবে আমি বিশ্বাস করি যে এখানে বৈধ মামলা রয়েছে যেখানে আপনার একেবারে উচিত। উদাহরণস্বরূপ, আপনি দুর্ঘটনাক্রমে প্রতিশ্রুতিবদ্ধ এবং আপনার গোপনীয়তা ফাইল ধাক্কা। গিট রেপোতে থাকা উচিত নয়। সুতরাং আপনি এখানে গৃহীত উত্তর ব্যবহার করে তা দ্রুত সরিয়ে ফেলতে পারেন।
বিএফকোডার 19

11
@ বিএফকোডার যদি আপনি কোনও "গোপনীয়তা" দূরবর্তী রেপোতে চালিত করেন তবে এটি আর কোনও গোপন বিষয় নয়। এবং সঠিক সমাধানটি হ'ল একটি নতুন গোপনীয়তা তৈরি করা, নিজের ভুলটি আড়াল করার চেষ্টা না করা।
এরজম্যান

41

সবার আগে, রিলাক্স।

"কিছুই আমাদের নিয়ন্ত্রণে নেই। আমাদের নিয়ন্ত্রণ নিছক মায়া।", "ভুল করা মানুষের পক্ষে"

আমি পেয়েছি যে আপনি অনিচ্ছাকৃতভাবে আপনার কোডটিতে চাপ দিয়েছেন remote-master। এই ঠিক হতে চলেছে।

১. প্রথমে, SHA-1আপনি যে প্রতিশ্রুতি ফেরানোর চেষ্টা করছেন তার মানটি ধরুন, যেমন মাস্টার শাখায় প্রতিশ্রুতিবদ্ধ। এটি চালান:

git log

আপনি প্রতিটি কমিটের সাথে স্ট্রিংয়ের মতো 'f650a9e398ad9ca606b25513bd4af9fe ...' এর গুচ্ছ দেখতে পাবেন। আপনি যে ফিরিয়ে দিতে চান সেই প্রতিশ্রুতি থেকে সেই নম্বরটি অনুলিপি করুন ।

2. এখন, নীচের কমান্ডটি টাইপ করুন:

git reset --hard your_that_copied_string_but_without_quote_mark

আপনার "বার্তা এখন এখন" এ বার্তাটি দেখতে পাওয়া উচিত। আপনি পরিষ্কার। এটি স্রেফ যা করেছে তা হ'ল স্থানীয়ভাবে সেই পরিবর্তনটি প্রতিফলিত করা।

3. এখন, নীচের কমান্ডটি টাইপ করুন:

git push -f

আপনার মত দেখতে হবে

"সতর্কবাণী: পুশ.ডিফল্টটি আনসেট করা আছে; এর অন্তর্নিহিত মান ..... এ পরিবর্তিত হয়েছে ... মোট 0 (ডেল্টা 0), 0 টি ব্যবহার করা হয়েছে (বেল্টা 0) ... ... আপনার_বাংচি_নাম -> মাস্টার (জোর করে আপডেট) । "

এখন, আপনি সব পরিষ্কার। আবার "গিট লগ" দিয়ে মাস্টারটি পরীক্ষা করে দেখুন, আপনার স্থির_পরিচয়_কমিট তালিকার শীর্ষে থাকা উচিত।

আপনাকে স্বাগতম (আগাম;))

হালনাগাদ:

এখন, এই সমস্ত শুরুর আগে আপনি যে পরিবর্তনগুলি করেছিলেন, এখন তা চলে গেছে। আপনি যদি সেই কঠোর পরিশ্রমগুলি আবার ফিরিয়ে আনতে চান তবে এটি সম্ভব। ধন্যবাদ Git reflog , এবং Git চেরি-বাছাই কমান্ড।

তার জন্য, আমি দয়া করে এই ব্লগ বা এই পোস্টটি অনুসরণ করার পরামর্শ দেব ।


"গিট পুশ-এফ" করার সময়ও রিমোট এবং শাখাটি নির্দিষ্ট করে দেওয়া ভাল ব্যবস্থা, তবে "গিট পুশ-এফ" বেশিরভাগ সময় যেভাবেই চলবে
রবসন

8

git reset HEAD~1আপনি যদি না চান তবে আপনার পরিবর্তনগুলি সর্বস্বান্ত হয়ে যাবে (অযাচিত পরিবর্তনগুলি)। পরিবর্তন করুন, প্রতিশ্রুতি দিন এবং আবার চাপ দিনgit push -f [origin] [branch]


3

আপনি একটি ইন্টারেক্টিভ রিবেস করতে পারেন:

git rebase -i <commit>

এটি আপনার ডিফল্ট সম্পাদক আনবে। সেই প্রতিশ্রুতি মুছে ফেলতে আপনি যে প্রতিশ্রুতিটি সরিয়ে দিতে চান তা কেবল মুছে ফেলুন।

অবশ্যই, সেখানেও এই পরিবর্তনটি প্রয়োগ করতে আপনার অবশ্যই দূরবর্তী সংগ্রহস্থলের অ্যাক্সেসের প্রয়োজন হবে।

এই প্রশ্নটি দেখুন: গিট: সংগ্রহস্থল থেকে নির্বাচিত প্রতিশ্রুতিগুলি সরানো


3

ব্যবহার করার চেষ্টা করুন

git reset --hard <commit id> 

দয়া করে দ্রষ্টব্য: এখানে প্রতিশ্রুতিবদ্ধ আইডি আপনি যে প্রতিশ্রুতিতে যেতে চান তার আইডি কিন্তু আপনি যে আইডিটি পুনরায় সেট করতে চান তা নয়। এটিই ছিল একমাত্র পয়েন্ট যেখানে আমিও আটকে গেলাম।

তারপর ধাক্কা

git push -f <remote> <branch>

2

বিকল্পভাবে:

git push origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master

শেষ প্রতিশ্রুতির পিতামাতার কাছে মূল রিমোট রিপোজিটরির মাস্টার শাখাটিকে বাধ্য করুন

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