আপনি কি জিপিজি পুরানো কমিট সাইন করতে পারেন?


93

গিটের সাথে চুক্তিতে স্বাক্ষর করার ক্ষমতা রয়েছে git commit -Sযা দুর্দান্ত but তবে কখনও কখনও আমি পতাকাটি ভুলে যাই commitএবং কখনও কখনও আমি যে প্যাচগুলি প্রয়োগ করি তা নিজেই মেইল ​​করি amএবং সেই আদেশে স্বাক্ষরের জন্য পতাকা নেই।

ইতিমধ্যে রেকর্ড করা প্রতিশ্রুতিতে স্বাক্ষর যুক্ত করার কোনও উপায় আছে কি?


2
রেকর্ডের জন্য, আপনি সবসময় কনফিগারেশন মাধ্যমে করে সাইন ইন করতে Git বলতে পারেন: git config commit.gpgsign true
নিকুগা

@nicooga আমি আশা করি আপনার মন্তব্যে আরও বেশি উত্স দেওয়া হয়েছে তাই আমি এটি আগে লক্ষ্য করেছি। আমাকে এই প্রশ্নটি কমপক্ষে আধা ডজন বার বার করতে হয়েছিল এবং পতাকাটি সেট করা আমার বেশ কয়েকটা সময় বাঁচাতে পারত।
মাইকেল জিলাক

উত্তর:


78
  1. ইন্টারেক্টিভ রিবেস মোডে যান।
  2. আপনি স্বাক্ষর করতে চান প্রতিটি প্রতিশ্রুতি পরে নিম্নলিখিত লাইন যুক্ত করুন

    exec git commit --amend --no-edit -S

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

হালনাগাদ:

এটি করার সহজ উপায়:

git rebase --exec 'git commit --amend --no-edit -n -S' -i development

এটি বিকাশের (বা কোনও হ্যাশ) অবধি সমস্ত কিছুকে প্রত্যাখ্যান করে এবং আপনাকে প্রতি প্রতিশ্রুতি দেওয়ার পরে কপি পেস্ট করতে হবে না।


সত্যিই ক্লান্তিকর পরিস্থিতি এমনটি হওয়ার দরকার ছিল যা আমি কেবল প্রয়োজন, ধন্যবাদ!
মিসৌথ

2
ওহ, আমি খুব শীঘ্রই এটি পেয়েছি। আমি গিতহাব থেকে নিজেও অনেক কিছু পড়েছি বলেছি যে আপনি পুরানো প্রতিশ্রুতিগুলি পদত্যাগ করতে পারবেন না। এটি সম্পূর্ণ মিথ্যা প্রমাণিত! আমি এখন কয়েকটা কমিটকে বাঁচাতে পারতাম, যা আমি এখন স্কোয়াশ করেছি। ওহ ভাল ... ভাগ করে নেওয়ার জন্য ধন্যবাদ! আমি এটির বাইরে একটি উপাধি তৈরি করেছি। resign = "!re() { git rebase --exec 'git commit --amend --no-edit -n -S' -i $1; }; re"হয়ে যায়git resign HASH
ব্যারিমোড 21

2
এটি সাধারণ জ্ঞান হওয়া উচিত! আপনি মানবতার জন্য একটি দুর্দান্ত পরিষেবা করেছেন (কোনও শট!)!
আশাবাদী

3
মোটেও রিবেস করার কোনও কারণ নেই। শুধু চালান git commit --amend --no-edit -n -S
কোলোনেল প্রশ্ন 6:56

9
এটি কি ইতিহাসের পরিবর্তন করে না git push --force?
স্টিভ

33

প্রতিশ্রুতিতে সাইন ইন করার বিষয়বস্তুগুলি পরিবর্তিত হয়, সুতরাং এর উপর নির্ভর করে আরও সাম্প্রতিক কমিটগুলি তাদের হ্যাশ পরিবর্তন করবে।

আপনি যদি সর্বাধিক সাম্প্রতিক প্রতিশ্রুতিতে সাইন করতে চান git commit -S --amendতবে কাজ করবে।


13

আমি ব্যবহার করি git rebase -i --root( পুনর্লিখনের ইতিহাস দেখুন ) এবং এতে পরিবর্তন pickকরি edit

তারপরে আমি প্রতিটি কমিটের জন্য git commit -S --amend --no-edit && git rebase --continue (উইন্ডোজে) ব্যবহার করি।

এটি প্রতিটি কমিটের জন্য ম্যানুয়ালি সাইন ইন। আমি আশা করি আমরা এর থেকে ভাল সমাধান পাব।


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

2

আমিও একই সমস্যায় হোঁচট খেয়েছি এবং আমার সমাধানটি এখানে:

git rebase -i --root --exec 'git commit --amend --no-edit --no-verify -S'

এটি আমার প্রথম কমিটকে প্রথম প্রাথমিক কমিট থেকে স্বাক্ষর করবে এবং আমি হস্কি ব্যবহার করে সেট আপ করা কমিট হুককেও বাইপাস করব । পরিবর্তন করার দরকার নেইpickedit


1

আপনি যদি কেবলমাত্র নির্দিষ্ট কমিটগুলিই ফিল্টার করতে চান এবং কেবলমাত্র সেগুলিতে সাইন করতে চান তবে আপনি ব্যবহার করতে পারেন filter-branch:

git filter-branch --commit-filter 'if [ "$GIT_COMMITTER_EMAIL" = "user@domain.com" ];
  then git commit-tree -S "$@";
  else git commit-tree "$@";
  fi' HEAD

এটি কার্যকর যদি কোনও কারণে, আপনি কেবল নিজের কমাতে স্বাক্ষর করতে চান।


0

আপনার যদি জিপিজির সাইন ইন করার প্রয়োজন হয় তবে বর্তমান শাখায় একটি নির্দিষ্ট প্রতিশ্রুতি SINCE করার জন্য সমস্ত সই করুন, আপনি পরিবর্তে নিম্নলিখিতটি ব্যবহার করতে পারেন:

git filter-branch --commit-filter 'git commit-tree -S "$@";' <COMMIT>..HEAD

<COMMIT>কমিট আইডি কোথায় (উদাঃ abc123e5)।

এটির অতিরিক্ত সুবিধা রয়েছে যা এটি কমিট মেটাডেটা (কমিটের তারিখ সহ) ব্যাহত করে না।

আপনি যদি প্রতিটি প্রতিশ্রুতিতে আপনার জিপিজি পাসফ্রেজের জন্য অনুরোধ করা বন্ধ করতে চান তবে এই উত্তরটিও দেখুন: https://askubuntu.com/a/805550

দ্রষ্টব্য: জিআইটি সাইন ইন gpgকরার gpg2জন্য স্যুইচ করাতে আপনাকে জিপিজি 2 এ আপনার ব্যক্তিগত কী পুনরায় আমদানি করতে হবে।

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