Як выправіць фіксацыю няправільнай галінкі Git?

Я проста выдатна зрабіў фіксацыю няправільнай галінкі. Як мне адмяніць апошняе комм ў маёй галоўнай галінцы, а затым выканаць тыя ж самыя змены і атрымаць іх у маёй галінцы абнаўлення?

414
31 мая '10 в 8:30 2010-05-31 08:30 зададзены mikewilliamson 31 мая '10 а 8:30 2010-05-31 08:30
@ 8 адказаў

Калі вы яшчэ не націснулі свае змены, вы таксама можаце зрабіць мяккі reset:

 git reset --soft HEAD^ 

Гэта верне фіксацыю, але верне якія выпраўляюцца змены ў ваш індэкс. Мяркуючы, што галінкі адносна сучасныя адносна адзін аднаго, git дазволіць вам выканаць праверку ў іншай галінцы, пасля чаго вы можаце проста зафіксаваць:

 git checkout branch git commit 

Недахопам з'яўляецца тое, што вам трэба паўторна ўвесці паведамленне аб фіксацыі.

618
31 мая '10 в 8:53 2010-05-31 08:53 адказ дадзены Blair Holloway 31 мая '10 у 8:53 2010-05-31 08:53

Калі ў вас ёсць чыстая (немадыфікаваны) рабочая копія

Адкат аднаго фіксацыі (пераканайцеся, што вы адзначылі Хэш фіксацыі для наступнага кроку):

 git reset --hard HEAD^ 

Каб перанесці гэта фіксацыю ў іншую галінку:

border=0
 git checkout other-branch git cherry-pick COMMIT-HASH 

Калі вы змянілі ці не адсочвалі змены

Таксама зьвярніце ўвагу, што git reset --hard будзе забіваць любыя невоспроизводимые і змененыя змены, якія могуць быць у вас, таму, калі ў вас ёсць тыя, якія вы можаце аддаць перавагу:

 git reset HEAD^ git checkout . 
79
31 мая '10 в 8:33 2010-05-31 08:33 адказ дадзены Michael Mrozek 31 мая '10 у 08:33 2010-05-31 08:33

4 гады позна па тэме, але гэта можа быць карысна каму-то.

Калі вы забыліся стварыць новую галіну перад тым, як здзейсніць і перадаць усе на master, незалежна ад таго, колькі вы зрабілі, наступны падыход прасцей:

 git stash # skip if all changes are committed git branch my_feature git reset --hard origin/master git checkout my_feature git stash pop # skip if all changes were committed 

Зараз ваша галоўная галіна роўная origin/master , і ўсе новыя камітаў знаходзяцца на my_feature . Звярніце ўвагу, што my_feature з'яўляецца лакальнай галіной, а не выдаленай.

61
06 февр. адказ дадзены fotanus 06 февр. 2014-02-06 17:44 '14 у 17:44 2014/02/06 17:44

Калі вы ўжо ўнеслі свае змены, вам трэба будзе прымусова націснуць наступны пасля скіду HEAD.

 git reset --hard HEAD^ git merge COMMIT_SHA1 git push --force 

Папярэджанне: жорсткі reset адменіць любыя незавершаныя змены ў вашай рабочай копіі, у той час як прымусовае націск цалкам перазапіша стан выдаленай галінкі бягучым станам лакальнай галінкі.

На ўсялякі выпадак, у Windows (выкарыстоўваючы камандную радок Windows, а не Bash), на самой справе чатыры ^^^^ замест аднаго, таму

 git reset --hard HEAD^^^^ 
17
31 мая '10 в 9:11 2010-05-31 09:11 адказ дадзены Igor Zevaka 31 мая '10 у 9:11 2010-05-31 09:11

Нядаўна я зрабіў тое ж самае, калі я выпадкова здзейсніў пераход да майстра, калі я павінен быў прысвяціць сябе іншай галінцы. Але я нічога не штурхнуў.

Калі вы толькі што здзейснілі няправільную галінку і нічога не змянілі з той пары ён не націснулі на РЭПО, вы можаце зрабіць наступнае:

 // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." before your most recent commit // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." commit // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." that not attached to any branch using git stash // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." put into a stack of temporary commits // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." to // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." new branch // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." stack of temp commits // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." 

ЗАЎВАГА. У прыведзеным вышэй прыкладзе я перамотваць 1 фіксацыю з дапамогай git reset HEAD ~ 1. Але калі вы хочаце пераматаць n камітаў, тады вы можаце зрабіць git reset HEAD ~ n.

Акрамя таго, калі вы скончылі працу з няправільнай галіной, а таксама скончылі пісаць яшчэ адзін код, перш чым усвядоміць, што вы здзейснілі няправільную галіну, тады вы можаце выкарыстоўваць git stash, каб захаваць вам незавершанай працы:

 // save the not-ready-to-commit work you're in the middle of git stash // rewind n commits git reset HEAD~n // stash the committed changes as a single temp commit onto the stack. git stash // create other-branch (if it doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // apply all the committed changes to the new branch git stash pop // add the changes you want with git add... // re-commit your changes onto the new branch as a single commit. git commit -m "some message..." // pop the changes you were in the middle of and continue coding git stash pop commit onto the stack // save the not-ready-to-commit work you're in the middle of git stash // rewind n commits git reset HEAD~n // stash the committed changes as a single temp commit onto the stack. git stash // create other-branch (if it doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // apply all the committed changes to the new branch git stash pop // add the changes you want with git add... // re-commit your changes onto the new branch as a single commit. git commit -m "some message..." // pop the changes you were in the middle of and continue coding git stash pop to // save the not-ready-to-commit work you're in the middle of git stash // rewind n commits git reset HEAD~n // stash the committed changes as a single temp commit onto the stack. git stash // create other-branch (if it doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // apply all the committed changes to the new branch git stash pop // add the changes you want with git add... // re-commit your changes onto the new branch as a single commit. git commit -m "some message..." // pop the changes you were in the middle of and continue coding git stash pop branch // save the not-ready-to-commit work you're in the middle of git stash // rewind n commits git reset HEAD~n // stash the committed changes as a single temp commit onto the stack. git stash // create other-branch (if it doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // apply all the committed changes to the new branch git stash pop // add the changes you want with git add... // re-commit your changes onto the new branch as a single commit. git commit -m "some message..." // pop the changes you were in the middle of and continue coding git stash pop a single commit // save the not-ready-to-commit work you're in the middle of git stash // rewind n commits git reset HEAD~n // stash the committed changes as a single temp commit onto the stack. git stash // create other-branch (if it doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // apply all the committed changes to the new branch git stash pop // add the changes you want with git add... // re-commit your changes onto the new branch as a single commit. git commit -m "some message..." // pop the changes you were in the middle of and continue coding git stash pop of and continue coding // save the not-ready-to-commit work you're in the middle of git stash // rewind n commits git reset HEAD~n // stash the committed changes as a single temp commit onto the stack. git stash // create other-branch (if it doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // apply all the committed changes to the new branch git stash pop // add the changes you want with git add... // re-commit your changes onto the new branch as a single commit. git commit -m "some message..." // pop the changes you were in the middle of and continue coding git stash pop 

ЗАЎВАГА. Я выкарыстаў гэты сайт у якасці спасылкі https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/

4
31 мая '17 в 0:51 2017-05-31 00:51 адказ дадзены Ali Mizan 31 мая '17 у 0:51 2017/05/31 00:51

Такім чынам, калі ваш сцэнар заключаецца ў тым, што вы перадалі master , але прызначаліся для перадачы на another-branch (які можа ці не можа ўжо існаваць), але вы яшчэ не націснулі, гэта даволі лёгка выправіць.

 // if your branch doesn't exist, then add the -b argument git checkout -b another-branch git branch --force master origin/master 

Зараз усе вашыя фіксацыі на master будуць на another-branch .

Крыніцы: http://haacked.com/archive/2015/06/29/git-migrate/

2
08 апр. адказ дадзены Lorcan O'Neill 08 крас. 2016-04-08 16:19 '16 у 16:19 2016/04/08 16:19

Калі вы сутыкнуліся з гэтай праблемай, і ў вас ёсць Visual Studio, вы можаце зрабіць наступнае:

Пстрыкніце правай кнопкай мышы на сваёй галінцы і абярыце View History :

2019

05 апр. адказ дадзены Trevor 05 крас. 2017-04-05 02:39 '17 у 2:39 2017/04/05 02:39

Калі галінка, да якой вы хацелі ўжыць свае змены, ужо існуе (напрыклад, для распрацоўкі галін), выконвайце інструкцыі, прадстаўленым fotanus ніжэй, затым:

 git checkout develop git rebase develop my_feature # applies changes to correct branch git checkout develop # 'cuz rebasing will leave you on my_feature git merge develop my_feature # will be a fast-forward git branch -d my_feature 

І, відавочна, вы маглі б выкарыстоўваць tempbranch або любую іншую назву галінкі замест my_feature, калі хочаце.

Акрамя таго, калі прыдатнаю, затрымлівайце ўсплывальнае паведамленне (прымяніць) да таго часу, пакуль вы не аб'ядналіся ў сваёй мэтавай галінцы.

0
24 авг. адказ дадзены fbicknel 24 жнів. 2016-08-24 01:15 '16 у 01:15 2016/08/24 01:15

Іншыя пытанні па пазнаках або Задайце пытанне