চেকআউট ছাড়াই অন্যান্য শাখাকে কারেন্টে রিসেট করুন


110

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

আমার অন্য (বিদ্যমান) শাখাটি চেকআউট ছাড়াই বর্তমানেরটিতে পুনরায় সেট করতে হবে।

আগে:

 CurrentBranch: commit A
 OtherBranch: commit B

পরে:

 CurrentBranch: commit A
 OtherBranch: commit A

এর সমতুল্য

 $ git checkout otherbranch 
 $ git reset --soft currentbranch
 $ git checkout currentbranch

(দ্রষ্টব্য --soft: আমি কার্যকারী গাছকে প্রভাবিত করতে চাই না))

এটা কি সম্ভব?


কেউ যদি জানেন যে এটি এডিটেও সম্ভব?
জেডু

উত্তর:


84

আপনি যে ওয়ার্কফ্লোগুলি বর্ণনা করেছেন তা সমতুল্য নয়: আপনি যখন সঞ্চালন করেন reset --hardআপনি কার্যকারী গাছের সমস্ত পরিবর্তন হারাবেন (আপনি এটি তৈরি করতে চাইতে পারেন reset --soft)।

আপনার যা দরকার তা হ'ল

git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch

3
মানুষ, আমি চাই অতিরিক্ত কাজ ছাড়াই এই কাজ করত refs/heads/...
এলিওটিটিসিবিএল

41
এটি করার একটি দুর্দান্ত উপায় git push . current:other। এটি refs/heads(/ সিসি @ ইলিয়টটকেবল) ব্যতীত কাজ করে এবং এটি আপনাকে চেক-আউট শাখা আপডেট করা থেকেও বাধা দেয়। নোট করুন যে +current:otherআপডেটটি যদি দ্রুত অগ্রসর না হয় তবে আপনাকে পাস -f (বা ব্যবহার ) করতে হবে।
লিলি ব্যালার্ড

4
আপনি কমান্ড -m 'some text'দ্বারা রেফ আপডেট আপডেট হওয়ার কারণ রেকর্ড করতে যুক্তিও ব্যবহার করতে পারেন git reflog OtherBranch, যেমন "কারেন্ট ব্র্যাঙ্কে সিঙ্ক করা"। আপনি কেন পরে এটি করেছিলেন তা মনে রাখতে দরকারী হতে পারে।
লেভি হাস্কেল

18
আপনি কেন ব্যবহার করবেন git update-ref refs/heads/OtherBranch refs/heads/CurrentBranchবা git push . CurrentBranch OtherBranchযখন আপনি এর git branch -f OtherBranch CurrentBranchপরিবর্তে অনেক ক্লিনার (আইএমও) ব্যবহার করতে পারেন ? ( নীচে গিট শাখায় আমার উত্তর দেখুন )
কলিন ডি বেনেট

1
@ বেনহায়মারস সুতরাং "গিট পুশ" এর ম্যান পেজটি একটি জঘন্য মিথ্যা। এটি কমান্ডটিকে "রিমোট রিফেস আপডেট করুন ..." হিসাবে বর্ণনা করে। যখন এটি স্থানীয় রেফগুলি ঠিক সূক্ষ্ম আপডেট করতে পারে।
কাজ

228

সেট otherbranchএকই সময়ে বিন্দু হিসেবে কমিট currentbranchচালিয়ে

git branch -f otherbranch currentbranch

-f(বল) বিকল্প বলে git branch হ্যাঁ, আমি কোনো বিদ্যমান ওভাররাইট সত্যিই গড় otherbranchনতুন পাসওয়ার্ড দিয়ে রেফারেন্স

ডকুমেন্টেশন থেকে :

-ফ -
ফোর্স

ইতিমধ্যে উপস্থিত থাকলে পুনরায় সেট করুন। -F গিট শাখা ছাড়াই একটি বিদ্যমান শাখা পরিবর্তন করতে অস্বীকার করে।


6
এটি সবচেয়ে সহজ উত্তর। ধন্যবাদ!
রবার্ট কার্ল

এটি fatal: Cannot force update the current branch.করার চেষ্টা করার সময় আমি পাই ।
ফুয়াদ সৌদ

4
@ ফুয়াদসৌড এর কারণ আপনি ইতিমধ্যে otherbranchচেক আউট করেছেন। এই এসও প্রশ্নটি বিশেষত অন্য শাখাটিকে একটি পৃথক প্রতিশ্রুতিতে পুনরায় সেট করার বিষয়ে (যেমন চেক আউট শাখাটি পুনরায় সেট না করা)। আপনি যা করতে চান তা হ'ল বর্তমান শাখাটি পুনরায় সেট করা হ'ল বর্তমান শাখাকে নির্দেশ git reset targetbranchকরতে বাধ্য করা targetbranch--hardকাজের সামগ্রীটিকে সেই সামগ্রীতে বাধ্য করতেও যুক্ত করুন । অথবা --softসূচকটি একা ছেড়ে কেবল শাখাটি পরিবর্তন করতে হবে।
কলিন ডি বেনেট

ঠিক আছে, তাই আমি রিসেট সম্পর্কে জানি। যা আমি সন্ধান করছিলাম সেটি ছিল একটি রুটিনের অভ্যন্তরে, সর্বদা স্থানীয় মাস্টারকে আপস্ট্রিম / মাস্টারটির দিকে নির্দেশ করা, যা যা চেক করা হয়েছিল তা স্বাধীনভাবে। আমি ভেবেছিলাম branch -fএটা করতে পারে।
ফুয়াদ সৌদ

9
তবে, এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি আমার কর্মপ্রবাহকে এত উন্নত করেছে!
মারাত্মক-গিটার

23

আপনি যে কোনও সময় আপনার শাখাগুলি এই আদেশের সাথে সিঙ্ক করতে পারেন

$ git push . CurrentBranch:OtherBranch -f

এছাড়াও -f ছাড়া এটি কমান্ডের এই সেটটি প্রতিস্থাপন করে

$ git checkout OtherBranch
$ git merge CurrentBranch
$ git checkout CurrentBranch

কারেন্টব্র্যাঞ্চে আপনার সমস্ত ফাইল প্রতিশ্রুতিবদ্ধ করার প্রয়োজন নেই এবং এটির ফলে আপনি অন্য কোনও শাখায় স্যুইচ করতে পারবেন না এটি কার্যকর হতে পারে।


"দূরবর্তী: ত্রুটি: অ-ফাস্ট-ফরোয়ার্ডকে অস্বীকার করা" এর কারণ হতে পারে
বাসিলিভস

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