আমি একটি নির্দিষ্ট প্রতিশ্রুতি দ্বারা প্রদত্ত পরিবর্তনগুলি কেবলমাত্র একটি প্রদত্ত ফাইলেই ফিরিয়ে দিতে চাই।
আমি কি তার জন্য গিট রিভার্ট কমান্ড ব্যবহার করতে পারি?
এটি করার অন্য কোনও সহজ উপায়?
আমি একটি নির্দিষ্ট প্রতিশ্রুতি দ্বারা প্রদত্ত পরিবর্তনগুলি কেবলমাত্র একটি প্রদত্ত ফাইলেই ফিরিয়ে দিতে চাই।
আমি কি তার জন্য গিট রিভার্ট কমান্ড ব্যবহার করতে পারি?
এটি করার অন্য কোনও সহজ উপায়?
উত্তর:
এটি করার মধ্যে সবচেয়ে পরিষ্কার উপায় আমি এখানে বর্ণনা করেছি
git show some_commit_sha1 -- some_file.c | git apply -R
ভনির প্রতিক্রিয়া অনুরূপ তবে ব্যবহার git show
এবং git apply
।
fatal: unrecognized input
-3
প্যাচ ব্যর্থ হলে আমি প্রায় সবসময় ত্রি-মুখী সংযোজনের জন্য গিটকে গিটের সাথে যুক্ত করতে হয়, যেহেতু আমি সাধারণত সময়ে কিছুটা পিছনে পরিবর্তন সংশোধন করি।
some_file.c
দায়বদ্ধতার ইতিহাস পরিবর্তন করা ঠিক আছে বলে ধরে নেওয়া, পূর্বের প্রতিশ্রুতিতে একটি ফাইলে পরিবর্তনগুলি ফিরিয়ে আনার জন্য এখানে একটি কর্মপ্রবাহ রয়েছে:
উদাহরণস্বরূপ, আপনি প্রতিশ্রুতিবদ্ধভাবে 1 টি ফাইল ( badfile.txt
) এর পরিবর্তনগুলি ফিরিয়ে আনতে চান aaa222
:
aaa333 Good commit
aaa222 Problem commit containing badfile.txt
aaa111 Base commit
বেস কমিটকে রিবেস করুন, সমস্যা প্রতিশ্রুতি সংশোধন করুন এবং চালিয়ে যান।
1) ইন্টারেক্টিভ রিবেস শুরু করুন:
git rebase -i aaa111
2) সমস্যা চিহ্নিত করুন পরিবর্তন করে সম্পাদকে সম্পাদনার জন্য কমিট pick
করতে e
(সম্পাদনা জন্য):
e aaa222
pick aaa333
3) খারাপ ফাইলে পরিবর্তনগুলি ফিরিয়ে দিন:
git show -- badfile.txt | git apply -R
4) পরিবর্তনগুলি যুক্ত করুন এবং প্রতিশ্রুতি সংশোধন করুন:
git add badfile.txt
git commit --amend
5) রিবেস শেষ:
git rebase --continue
edit
পরিবর্তনগুলি প্রদর্শিত হচ্ছে না। তবে git show -- badfile.txt | git apply -R
উত্তরটি আমার প্রয়োজনীয় উত্তরটি দিয়েছে <3
git revert
কমিটের মধ্যে থাকা সমস্ত ফাইল সামগ্রীর জন্য।
একটি একক ফাইলের জন্য, আপনি এটি স্ক্রিপ্ট করতে পারেন :
#!/bin/bash
function output_help {
echo "usage: git-revert-single-file <sha1> <file>"
}
sha1=$1
file=$2
if [[ $sha1 ]]; then
git diff $sha1..$sha1^ -- $file | patch -p1
else
output_help
fi
( স্মট্লেইজফায়ার থেকে গিট-শেল-স্ক্রিপ্ট ইউটিলিটিগুলি থেকে )
বিঃদ্রঃ:
যদি আপনার বর্তমান পরিবর্তনটি এখনও করা না হয় তবে এখানে অন্য একটি উপায় বর্ণনা করা হয়েছে ।
git checkout -- filename
git checkout
একটি ফাইলের জন্য কিছু অপশন রয়েছে, HEAD থেকে ফাইলটি পরিবর্তন করে, আপনার পরিবর্তনটি ওভাররাইট করে।
ড্রপড.অন.প্রক্রিয়া মন্তব্যগুলিতে উল্লেখ করেছেন :
আপনি গিটে একটি উপনাম যুক্ত করতে পারেন যাতে আপনি এটি করতে পারেন
git revert-file <hash> <file-loc>
এবং সেই নির্দিষ্ট ফাইলটি আবার ফিরিয়ে দেওয়া যেতে পারে। এই টুকরোটি
দেখুন ।
[alias]
revert-file = !sh /home/some-user/git-file-revert.sh
git revert-file <hash> <file-loc>
এবং সেই নির্দিষ্ট ফাইলটি উল্টানো যেতে পারে। আমি এই উত্তরটি থেকে উত্তোলন করেছি (যদিও সঠিকভাবে কাজ করার জন্য আমাকে কয়েকটি সম্পাদনা করতে হয়েছিল)। আপনি আমার .gitconfig
এবং সম্পাদিত স্ক্রিপ্টের একটি অনুলিপিটি এখানে পেতে পারেন: gist.github.com/DPpedoncaprica/5b67ec0021371a0ad438
আমি কেবল --no-commit
বিকল্পটি ব্যবহার করব git-revert
এবং তারপরে অবশেষে এটি সম্পাদন করার আগে সূচি থেকে উল্টানো ফাইলগুলি চাই না। দ্বিতীয় সাম্প্রতিক প্রতিশ্রুতিতে কীভাবে সহজেই foo.c এ পরিবর্তনগুলি সহজেই ফিরিয়ে আনা যায় তা এখানে একটি উদাহরণ রয়েছে:
$ git revert --no-commit HEAD~1
$ git reset HEAD
$ git add foo.c
$ git commit -m "Reverting recent change to foo.c"
$ git reset --hard HEAD
প্রথম git-reset
সমস্ত ফাইল "আনস্টেজ" করে, যাতে আমরা কেবল যে ফাইলটি ফিরে যেতে চাই তা কেবল আবার যুক্ত করতে পারি। ফাইনালটি আমাদের git-reset --hard
কাছে রাখতে চাইছে না এমন ফাইলের উল্টাপাল্টা থেকে মুক্তি পেয়ে যায়।
অনেক সহজ:
git reset HEAD^ path/to/file/to/revert
তারপর
git commit --amend
এবং তারপর
git push -f
ফাইলটি চলে গেছে এবং হ্যাশ, বার্তা ইত্যাদি কমিট করে দেয়।
git checkout -- path/to/file/to/revert
পদক্ষেপ দরকার ? এছাড়াও, এটি ঠিক নয় যে হ্যাশ একই পরে আছে, তাই না? সর্বশেষ বাক্যটি এর মতো আরও কিছু ভাল হতে পারে: "ফলাফলটি হ'ল শেষ প্রতিশ্রুতি এমন একটি নতুন দ্বারা প্রতিস্থাপন করা হয়েছিল যা কেবলমাত্র তার মধ্যে পৃথক হয় যা এতে ফেরানো ফাইলের পরিবর্তনগুলি অন্তর্ভুক্ত থাকে না।"
git reset HEAD^ path/to/file/to/revert/in/commit
উপরের কমান্ডটি প্রতিশ্রুতিবদ্ধতার বাইরে ফাইল নেবে, তবে এটি প্রতিফলিত হবে git status
।
git checkout path/to/file/to/revert/in/commit
উপরের কমান্ডটি পরিবর্তনগুলি ফিরিয়ে দেবে (ফলস্বরূপ আপনি ফাইলটি হেডের সমান পাবেন)।
git commit
( --amend
অঙ্গীকার সংশোধন পাস ।)
git push
এটির সাহায্যে, যে ফাইলটি ইতিমধ্যে প্রতিশ্রুতিতে রয়েছে তা সরিয়ে ফেলা হবে।
উপরোক্ত পদক্ষেপগুলি সেই শাখা থেকে অনুসরণ করা উচিত যেখানে প্রতিশ্রুতিবদ্ধ হয়।
আপনি এই পদ্ধতিটি অনুসরণ করতে পারেন:
git revert -n <*commit*>
( -n
সমস্ত পরিবর্তনগুলি ফিরিয়ে দিন তবে সেগুলি প্রতিশ্রুতি দেয় না)git add <*filename*>
(আপনি যে ফাইল / গুলি পুনরায় ফিরিয়ে আনতে চান সেটির নাম)git commit -m 'reverted message'
(ফিরে যাওয়ার জন্য একটি বার্তা যুক্ত করুন)