سؤال

أنا "بطريق الخطأ" دفعت إلى ارتكاب جيثب.

هل من الممكن إزالة هذا الالتزام ؟

أريد أن تعود حياتي GitHub كما كان من قبل هذا الالتزام.

هل كانت مفيدة؟

المحلول

<اقتباس فقرة>   

<قوية> ملاحظة: الرجاء نرى بديلا لgit rebase -i في التعليقات أدناه -

     

وgit reset --soft HEAD^

أولا، إزالة ارتكاب على مستودع المحلي الخاص بك. يمكنك القيام بذلك باستخدام git rebase -i. على سبيل المثال، إذا كان لديك آخر يلتزم، يمكنك أن تفعل git rebase -i HEAD~2 وحذف السطر الثاني ضمن إطار محرر التي دفعها.

وبعد ذلك، وقوة دفع لجيثب باستخدام git push origin +branchName --force

بوابة ماجيك الفصل 5: دروس من التاريخ - و ثم بعض للحصول على مزيد من المعلومات (أي إذا كنت ترغب في إزالة يرتكب فوق).

وأوه، وإذا شجرة العمل الخاص بك هو قذر، عليك أن تفعل git stash أولا، وبعد ذلك git stash apply بعد.

نصائح أخرى

git push -f origin HEAD^:master

وهذا يجب أن "التراجع" دفع.

لوتعود السهل اذا كان مجرد خطأ (ربما كنت متشعب الريبو، ثم انتهى بها المطاف دفع لالأصلي بدلا من واحد جديد) وهنا احتمال آخر:

git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

ومبادلة من الواضح في هذا العدد لعدد من ارتكاب تريد العودة إلى.

وسيتم حذف كل شيء منذ ذلك الحين بمجرد دفع مرة أخرى. للقيام بذلك، فإن الخطوة التالية هي:

git push --force
  1. git log لمعرفة ارتكاب تريد أن تعود

  2. git push origin +7f6d03:master في حين 7f6d03 هو ارتكاب قبل خطأ دفعت لارتكاب.+ كان force push

و هذا الأمر.

هنا هو جيد جدا دليل على أن يحل مشكلتك سهلة وبسيطة!

في حال كنت ترغب في الحفاظ على ارتكاب التغييرات بعد الحذف:

علما بأن هذا الحل يعمل إذا كان الالتزام إزالتها آخر ارتكب واحدة.


1 - نسخ ارتكاب المرجعية تريد العودة من السجل:

git log

2 - إعادة تعيين بوابة إلى ارتكاب المرجعية:

 git reset <commit_ref>

3 - خبأ/تخزين التغييرات المحلية من الخطأ ارتكاب لاستخدامها لاحقا بعد دفع إلى البعيد:

 git stash

4 - دفع التغييرات إلى مستودع بعيد, (-f أو القوة):

git push -f

5 - نعود تخزين التغييرات في المخزون المحلي:

git stash apply

7 - في حال كنت قد untracked/ملفات جديدة في التغييرات تحتاج إلى إضافتها إلى بوابة قبل الالتزام:

git add .

6 - إضافة مهما إضافية التغييرات التي تحتاج إليها ، ثم ارتكاب اللازمة الملفات (أو استخدام نقطة '.' بدلا من ذكر اسم كل ملف ، لارتكاب جميع الملفات في مستودع محلي:

git commit -m "<new_commit_message>" <file1> <file2> ...

أو

git commit -m "<new_commit_message>" .

وستحتاج إلى مسح خارج ذاكرة التخزين المؤقت لأنها قد تزول تماما. هذه الصفحة مساعدة من بوابة سوف تساعدك على الخروج. (ساعدني) http://help.github.com/remove-sensitive-data/

استخدم git revert إلى العودة دفعك.

<اقتباس فقرة>   

وبوابة-تعود - الرجوع بعض يرتكب القائمة

git revert [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>...
git revert --continue
git revert --quit
git revert --abort

والرجوع التغييرات التي تطرح بقع ذات الصلة، وتسجيل بعض يرتكب الجديدة التي تسجل لهم. وهذا يتطلب شجرة العمل الخاص بك أن تكون نظيفة (أي تعديلات من رأس يلتزم).

1. git reset HEAD^ --hard
2. git push origin -f

وهذا العمل بالنسبة لي.

لحذف يرتكب من مستودع بعيد:

 git push -f origin last_known_good_commit:branch_name

في ترتيب حذف يرتكب من مستودع المحلي الخاص بك:

git reset --hard HEAD~1

صلة

وحذف آخرها ارتكابها، والحفاظ على عمل قمت به:

git reset --soft HEAD~1

وحذف آخرها ارتكابها، وتدمير عمل قمت به:

git reset --hard HEAD~1

والبحث المواصفات المرجع من ارتكاب كنت تريد أن تكون رئيس فرع الخاصة بك على جيثب واستخدم الأمر التالي:

وgit push origin +[ref]:[branchName]

في الحالة الخاصة بك، إذا كنت ترغب فقط في الذهاب واحدة الى الوراء ارتكابها، والعثور على بداية المرجع لهذا الالتزام، ويقول على سبيل المثال فمن 7f6d03، واسم الفرع الذي تريد تغييره، ويقول على سبيل المثال هو الرئيسي، والقيام بما يلي:

وgit push origin +7f6d03:master

ويتم تفسير حرف زائد كما --force، والتي سوف تكون ضرورية منذ كنت إعادة كتابة التاريخ.

لاحظ أن في أي وقت كنت --force على ارتكاب هل يمكن أن يحتمل أن تكون إعادة كتابة التاريخ الشعوب الأخرى الذين دمج فرع بك. ومع ذلك، إذا قبض على المشكلة بسرعة (قبل أي شخص آخر يدمج فرع لديك)، لن يكون لديك أي مشاكل.

وتحتاج إلى معرفة ارتكاب التجزئة من ارتكاب كنت تريد العودة إلى. يمكنك الحصول عليه من URL جيثب مثل: https://github.com/your -organization / بك المشروع / يرتكب / سيد

ودعونا نقول التجزئة من ارتكاب (حيث تريد أن تذهب إلى) هو "99fb454" (نسخة طويلة "99fb45413eb9ca4b3063e07b40402b136a8cf264")، ثم كل ما عليك القيام به هو:

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force

إذا كنت تفعل هذا لأن لديك بيانات حساسة في ارتكاب باستخدام إجابات أخرى هنا ليست آمنة (باستثناء subutux التي سوف توسيع).

على جيثب دليل على هذا يوصي باستخدام أداة خارجية ، ولكن يفضل استخدام المدمج في واحدة.

أولا ، إجراء نسخة احتياطية من المستودع الخاص بك.ثم:

git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \
--prune-empty --tag-name-filter cat -- --all

بعد هذا ، تأكد من مستودع في الدولة تريد.قد ترغب في مهرجان دبي السينمائي الدولي ضد النسخ الاحتياطي.

إذا كنت متأكد انها صحيحة ، ثم:

#get rid of old unreferenced commits (including the data you want to remove)
git gc --prune=now
git push origin --force --all

قد ترغب في الحفاظ على النسخ الاحتياطي المحلي لفترة من الوقت ، فقط في حالة.

وتشغيل هذا الأمر على المحطة الطرفية.

git reset HEAD~n

ويمكنك إزالة ن الماضي يرتكب من مثل الريبو المحلية رأس ~ 2. المضي قدما في دفع قوة بوابة على المخزون الخاص بك.

git push -f origin <branch>

وآمل أن يساعد هذا!

لحفاظ على تشعب ودمج بنية المهم استخدام الخيار --preserve-merges عند القيام rebase:

git rebase --preserve-merges -i HEAD^^

وحفظ التغييرات المحلية لأول مرة في مكان ما على الجانب (النسخ الاحتياطي)

ويمكنك تصفح يرتكب الأخيرة التي قمت بها، ثم حدد ارتكاب التجزئة من خلال النقر على "نسخ كاملة SHA" الزر لإرساله إلى الحافظة.

إذا الماضية ارتكاب التجزئة الخاصة بك، دعنا نقول g0834hg304gh3084gh (على سبيل المثال)

لديك لتشغيل:

وgit push origin +g0834hg304gh3084gh:master

وباستخدام التجزئة التي قمت بنسخها في وقت سابق لجعله "الرأس" المراجعة.

واضافة التغيرات المحلية المطلوبة. فعله؛)

على جيثب

  • إعادة تعيين الخاص بك يرتكب (الثابت) في مستودع
  • إنشاء فرع جديد
  • دفع الفرع الجديد
  • حذف الفرع القديم (جعل واحدة جديدة الافتراضي فرع إذا كنت تقوم بحذف الفرع الرئيسي)

إذا كنت ترغب في إزالة تفعل التفاعلية rebase ،

git rebase -i HEAD~4

4 represents total number of commits to display count your commit andتغيير وفقا لذلك

وحذف ارتكاب تريد من القائمة...

حفظ التغييرات Ctrl+X(أوبونتو) أو :wq(centos)

الطريقة 2 هل تعود ،

git revert 29f4a2 #your commit ID

هذا وستعود محددة ارتكاب

وانها ليست جيدة جدا لإعادة كتابة التاريخ. وإذا استخدمنا git revert <commit_id>، فإنه يخلق نظيفة عكس الالتزام من ارتكاب معرف قال.

وبهذه الطريقة، والتاريخ لا إعادة كتابتها، بدلا من ذلك، والجميع يعرف أن كان هناك تعود.

وإضافة / إزالة الملفات للحصول على الأشياء بالطريقة التي تريدها:

git rm classdir
git add sourcedir

وبعد ذلك تعديل ارتكاب:

git commit --amend

والسابقة، سيتم تحرير لتعكس حالة مؤشر جديدة ارتكاب خاطئة - وبعبارة أخرى، فإنه سيكون وكأنك لم ارتكب خطأ في المقام الأول

لاحظ أنه يجب القيام بذلك فقط إذا لم تكن قد دفعت حتى الان. إذا كنت قد دفعت، ثم سيكون لديك فقط لارتكاب الإصلاح بشكل طبيعي.

في جيثب سطح المكتب يمكنك فقط انقر على الحق في ارتكاب والعودة إليها، الأمر الذي سيخلق ارتكاب جديدة أن يبطل التغييرات.

ووعرضي ارتكاب ستبقى في التاريخ الخاص بك (والتي قد تكون مسألة إذا، على سبيل المثال، كنت قد ارتكبت عن طريق الخطأ مفتاح API أو كلمة المرور) ولكن سيتم عادت التعليمات البرمجية.

وهذا هو الخيار الأبسط والأسهل، والجواب المقبول هو أكثر شمولا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top