Odstranit commitů z pobočky v Gitu

hlasů
2k

Chtěl bych vědět, jak odstranit commitu.

Tím deletemám na mysli to, jako by mi neudělal, že dopustí, a když jsem to push v budoucnu, budou provedeny změny netlačil ke vzdálené pobočky.

Čtu git pomoci, a myslím, že příkaz bych měl použít je git reset --hard HEAD. Je to správně?

Položena 27/08/2009 v 04:39
zdroj uživatelem
V jiných jazycích...                            


27 odpovědí

hlasů
3k

Pozor: git reset --hard smaže pracovního adresáře ZMĚNY . Ujistěte se, že skrýš veškeré lokální změny, které chcete zachovat před spuštěním tohoto příkazu.

Za předpokladu, že sedíte na to dopustit, pak tento příkaz pošuk to ...

git reset --hard HEAD~1

Tyto HEAD~1prostředky commit před hlavou.

Nebo byste mohli dívat na výstupu git log, najít commit ID zavázat, že chcete zálohovat, a potom to následujícím způsobem:

git reset --hard <sha1-commit-id>

Pokud již to tlačil, budete muset udělat silový Push to zbavit ...

git push origin HEAD --force

Nicméně , když ostatní mohou mít vytáhl ho, pak byste měli být lépe zakládá novou pobočku. Vzhledem k tomu, když se vytáhnout, bude to jen spojit ji do své práce, a dostanete ji tlačil zpátky nahoru.

Pokud již tlačil, to může být lepší použít git revertk vytvoření „zrcadlový obraz“ zavázat, že budou změny vrátit zpět. Nicméně, oba commitů bude v protokolu.


FYI - git reset --hard HEADje skvělé, pokud chcete zbavit nedokončené výroby. To vás vrátí na poslední commit, a vymazat všechny změny ve vaší pracovní strom a index.


A konečně, pokud budete potřebovat najít zavázat, že jste „maže“, je obvykle přítomen v git reflogpokud máte smetí shromáždilo svůj úložiště.

Odpovězeno 27/08/2009 v 04:44
zdroj uživatelem

hlasů
588

Pokud jste dosud tlačil commit kdekoliv, můžete použít git rebase -ik odstranění, které zavazují. Za prvé, zjistit, jak daleko do minulosti, že se zavazují je (přibližně). Proveďte:

git rebase -i HEAD~N

Tyto ~Nprostředky rebase poslední Ntransakce ( Nmusí být celá řada, například HEAD~10). Potom můžete upravit soubor, který Git prezentuje na vás, abyste odstranit problematický dopustit. O uložení souboru, bude Git poté přepsat všechny tyto commitů jako v případě, že ten, který vypouští neexistoval.

GIT Book má dobrý oddíl rebasing s obrázky a příklady.

Buďte opatrní s tímto i když, protože pokud něco, co změní jste tlačil na jiném místě, bude třeba jiný přístup, pokud máte v úmyslu dělat silový tlak.

Odpovězeno 27/08/2009 v 04:51
zdroj uživatelem

hlasů
406

Další možností je jedna z mých osobních oblíbené příkazy:

git rebase -i <commit>~1

Tím se spustí rebase v interaktivním režimu -iv okamžiku těsně před zavázat chcete aby rána. Editor se spustí seznam všech commitů od té doby. Odstranit řádek obsahující commitu chcete vymazat a uložte soubor. Rebase se postará o zbytek práce, odstranění jen to, že dopustí, a přehrávání všechny ostatní zpátky do protokolu.

Odpovězeno 27/08/2009 v 04:49
zdroj uživatelem

hlasů
276

Jsem připojí tuto odpověď, protože já nevidím důvod, proč by se někdo, kdo se právě pokusil spáchat práci chcete odstranit všechna ta práce, protože některé chyby pomocí Git!

Chcete-li udržet svou práci a jen ‚vrátit‘, které zavazují příkaz (je chycen, než tlačí repo):

git reset --soft HEAD~1

Nepoužívejte --hard příznak, pokud chtějí zničit vaši práci probíhající od posledního spáchat.

Odpovězeno 15/10/2012 v 19:17
zdroj uživatelem

hlasů
46

Pokud tomu tak není publikovat změny, aby se odstranily poslední commit, můžete tak učinit

$ git reset --hard HEAD^

(Všimněte si, že by to také odstranit všechny nepotvrzené změny, pouze s opatrností).

Pokud již publikovány-be-vymazány zavázat, použijte git revert

$ git revert HEAD
Odpovězeno 27/08/2009 v 11:47
zdroj uživatelem

hlasů
40

Vyjmutí celý commit

git rebase -p --onto SHA^ SHA

Je zřejmé, nahradit „SHA“, s odkazem, který chcete zbavit. Dále jen „^“ v tomto příkazu je doslovný.

http://sethrobertson.github.io/GitFixUm/fixup.html

Odpovězeno 31/08/2015 v 19:36
zdroj uživatelem

hlasů
31
git reset --hard commitId

git push <origin> <branch> --force

PS: CommitId označuje ten, který chcete vrátit zpět

Odpovězeno 16/10/2014 v 10:51
zdroj uživatelem

hlasů
29

Chcete-li opravit váš poslední commit, můžete vrátit zpět dopustit, a unstage soubory v něm, tím, že dělá:

git reset HEAD~1

Tím se vrátit úložiště do stavu před tím, než git přidat příkazy, které představil soubory. Změny budou v pracovním adresáři. HEAD ~ 1 se vztahuje na zavázat pod aktuální špičce oboru.

Chcete-li uncommit N zavazuje, ale zachovat změny kódu ve svém pracovním adresáři:

git reset HEAD~N

Chcete-li se zbavit vaše poslední commit, a nechtějí, aby se změny kódu, můžete provést „tvrdý“ reset.

git reset --hard HEAD~1

Stejně tak, pokud chcete zrušit poslední N dopustí, a nechtějí, aby se změny kódu:

git reset --hard HEAD~N
Odpovězeno 31/05/2014 v 08:19
zdroj uživatelem

hlasů
19

Energicky historie změn

Za předpokladu, že to není jen chcete vymazat poslední commit, ale chcete odstranit určité commitů posledního n dopouští, jít s:

git rebase -i HEAD~<number of commits to go back>, Takže git rebase -i HEAD~5pokud chcete vidět posledních pět commitů.

Poté v textovém editoru slovo změnit pick, aby dropu každé zavázat si přejete odstranit. Uložit a ukončete editor. Voila!

Aditivně historie změn

Zkuste git revert <commit hash>. Vrátit se vytvořit nový zavazují, že zruší zadaný dopustit.

Odpovězeno 15/06/2017 v 23:01
zdroj uživatelem

hlasů
15

Řekněme, že chceme odstranit commitů 2 & 4 z repo.

commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>

Poznámka: Musíte mít práva správce nad repo protože používáte --harda -f.

  • git checkout b3d92c5 Pokladna poslední použitelný dopustit.
  • git checkout -b repair Vytvořte novou pobočku pracovat.
  • git cherry-pick 77b9b82 Projít spáchat 3.
  • git cherry-pick 2c6a45b Projít spáchat 1.
  • git checkout master Pokladna master.
  • git reset --hard b3d92c5 Obnovení nastavení telefonu trvat použitelné dopustit.
  • git merge repair Sloučení naši novou pobočku na mistra.
  • git push -f origin master Tlačit mistra ke vzdálenému repo.
Odpovězeno 05/09/2017 v 07:19
zdroj uživatelem

hlasů
14
git rebase -i HEAD~2

Zde ‚2‘ je počet commitů chcete rebase.

'git rebase -i HEAD`

Chcete-li rebase všechny commitů.

Pak budete moci vybrat jednu z těchto možností.

p, pick = use commit

r, reword = use commit, but edit the commit message

e, edit = use commit, but stop for amending

s, squash = use commit, but meld into previous commit

f, fixup = like "squash", but discard this commit's log message

x, exec = run command (the rest of the line) using shell

d, drop = remove commit

Tyto řádky mohou být re-objednal; jsou prováděny odshora až dolů. Máte-li odstranit zde řádek, které se zaváží budou ztraceny. Nicméně, pokud jste odstranit vše, co se rebase bude přerušena. Všimněte si, že prázdné commity jsou zakomentovány

Můžete jednoduše odstranit, že potvrzování pomocí volby „D“ nebo odebrání řádek, který má vaše potvrzení.

Odpovězeno 18/05/2016 v 23:39
zdroj uživatelem

hlasů
11

Chcete-li odstranit v místní pobočce, použijte

git reset --hard HEAD~1

Chcete-li odstranit ve vzdálené pobočce, použijte

git push origin HEAD --force
Odpovězeno 28/08/2014 v 17:06
zdroj uživatelem

hlasů
7

Chyba:

I git rebase -i --root‚ed svou pobočku, nevědomě myslel jsem mohl přeformulovat první zavázat se liší od mistra (dále jen GitHub pro Windows výchozí zobrazení je porovnání zvládnout, skrývá to celek).

Vyrůstal jsem si Silicon Valley vousy, zatímco 900 + commitů naloženo se do Sublime. Ukončení beze změn, nabité jsem, že moje baterie pak pokračoval se holit, protože všechny 900 + jedinec dopouští nonšalantně rebased - resetování páchání krát nyní.

Rozhodnut porazit Git a zachovat původní časy, Vymazal jsem tuto místní úložiště a re-klonován z dálkového ovládání.

Teď to byl znovu přidán poslední nepotřebné zavázat ke zvládnutí Přála jsem si, aby se odstranily, a tak postupoval takhle.

Vyčerpání možností:

I nechtěl git revert- to by způsobilo další zavázat, což Git navrch.

git reset --hard HEADneudělala nic, až po odpojení reflog, poslední a jediný HEADbyl klon - Git vyhrává.

Chcete-li získat nejnovější SHA, Ověřil jsem vzdáleného repozitáře na github.com - minor výhra.

Po přemýšlení git reset --hard <SHA>pracoval, jsem aktualizoval další pobočku, aby řídila a 1 ... 2 ... puf! commit byl zpátky - Git vyhrává.

Kontrolu zpátky k pánovi, čas vyzkoušet git rebase -i <SHA>, pak odstraňte řádek ... bezvýsledně, smutné. „ Máte-li odstranit zde řádek, které se zaváží BUDOU LOST “. Ah ... přehlížel nové funkce troll je n00b v poznámkách k vydání 2.8.3 .

Řešení:

git rebase -i <SHA>poté d, drop = remove commit.

Chcete-li ověřit, Ověřil jsem si na jinou větev, a voila - žádný úkryt zavázat k načtení / vytáhnout z masteru.

https://twitter.com/holman/status/706006896273063936

Dobrý den vám přeji.

Odpovězeno 25/05/2016 v 20:33
zdroj uživatelem

hlasů
7

Tady je další způsob, jak to udělat:

Pokladna větev, kterou chcete vrátit, a pak znovu na místní pracovní kopii zpět do zavazují, že chcete být poslední, kdo na vzdáleném serveru (vše poté, co půjde bye-bye). Chcete-li to provést, v SourceTree I klikli pravým tlačítkem myši na vybraný a „Reset BRANCHNAME to dopustit.“ Myslím, že příkazový řádek:

git reset --hard COMMIT_ID

Vzhledem k tomu, jste právě odhlásil svoji pobočku ze vzdálené, vy nebudete mít žádné lokální změny obávat ztráty. Ale to by o ně přijdete, pokud ano.

Přejděte do místního telefonního seznamu svého repozitáře a spusťte tento příkaz:

git -c diff.mnemonicprefix=false -c core.quotepath=false \
push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

Tato akce smaže veškerá commitů za aktuální v lokálním úložišti, ale pouze pro danou jedné větve.

Odpovězeno 13/05/2013 v 18:20
zdroj uživatelem

hlasů
7

Všechny výše uvedené příkazy obnovit stav vaší pracovní strom a index tak, jak byly před provedením commit, ale ne obnovit stav úložiště. Podíváte-li se na to je „odstranit“ spáchat není ve skutečnosti odstraněna, je to prostě není ten, na špičce aktuální větve.

Myslím si, že neexistují žádné prostředky k odstranění commitu s příkazy porcelánu . Jediný způsob, jak je odstranit z protokolu a reflog a pak spustit git prune --expire -now.

Odpovězeno 04/10/2012 v 08:19
zdroj uživatelem

hlasů
5

Chcete-li zachovat historii, ukazovat commit a Vrátit, měli byste použít:

git revert GIT_COMMIT_HASH

zadejte zprávu s vysvětlením, proč se vracet a potom následujícím způsobem:

git push  

Při vydávání git loguvidíte jak „špatné“ commit a vrátit zprávy protokolu.

Odpovězeno 07/01/2015 v 15:13
zdroj uživatelem

hlasů
5

Pokud jste právě pokazil svůj poslední commit (špatný signál, zapomněl přidat nějaké změny) a chcete ji opravit před zatlačením do veřejné repo proč nepoužívat:

git commit --amend -m "New message here"

Pokud jste nedávno představil změny, které bude kombinovat s poslední commit (které se snažíte zbavit) a nahradí že dopustí.

Samozřejmě, pokud je změna commit poté, co jste tlačil to, že jste přepisování historie, takže pokud nechcete, aby být jisti, pochopit důsledky.

Můžete také předat ‚--no-edit‘ možnost namísto ‚-m‘, pokud byste raději použít předchozí commit poselství.

Dokumenty: http://git-scm.com/docs/git-commit.html

Odpovězeno 27/05/2014 v 00:24
zdroj uživatelem

hlasů
3

Zdroj: https://gist.github.com/sagarjethi/c07723b2f4fa74ad8bdf229166cf79d8

Odstranit poslední commit

Například vaše poslední commit

git tlačit původ + aa61ab32 ^: master

Teď Chcete-li odstranit tuto spáchání pak snadný způsob, jak to udělat následující

kroky

  1. První obnovit větev na rodiče aktuální commit

  2. Force-tlačit jej do dálkového ovladače.

git reset HEAD^ --hard

git push origin -f

Pro zvláštní zavázat, že chcete obnovit sleduje

git reset bb676878^ --hard

git push origin -f
Odpovězeno 22/06/2018 v 13:40
zdroj uživatelem

hlasů
2

To, co dělám obvykle, když jsem dopustit a push (pokud někdo tlačil jeho spáchání tento problém vyřešit):

git reset --hard HEAD~1

git push -f origin

doufat, že to pomůže

Odpovězeno 14/06/2017 v 09:22
zdroj uživatelem

hlasů
1

Pokud jste již tlačil, nejprve najít zavázat, že chcete být na HEAD ($ GIT_COMMIT_HASH_HERE) , spusťte následující:

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

Pak každé místo repo byl klonován, spusťte:

git reset --hard origin/master
Odpovězeno 30/01/2017 v 00:25
zdroj uživatelem

hlasů
0

rušit lokální spáchání

Jak můžete vidět na obrázku výše chci smazat Vrátit „testovací změnu 2“ commit (SHA1 ID: 015b5220c50e3dfbb1063f23789d92ae1d3481a2 (můžete získat SHA1 ID pomocí gitkpříkazu git bash)).

K tomu mohu použít (. Vše pod příkazové práci na místní stačí pouze stisknout po odstranění):

  1. git reset --hard 515b5220c50e3dfbb1063f23789d92ae1d3481a2// to back-up vás k tomuto páchání (SHA1 ID testovacího změny 4 spáchání je 515b5220c50e3dfbb1063f23789d92ae1d3481a2 )
  2. git reset --hard HEAD~1 // to back-up vás dříve, než jeden dopustit.
  3. git reset --hard HEAD^ // Chcete-li odstranit poslední commit z GIT

Po smazání:

Po odstranění spáchání

Odpovězeno 03/07/2018 v 06:51
zdroj uživatelem

hlasů
0

Resetovat na místní pobočky

git reset --hard HEAD~<Number of commit> So git reset --hard HEAD~3

Force Push to původu

git push -f origin
Odpovězeno 29/05/2018 v 07:38
zdroj uživatelem

hlasů
0

použijte git vrátit https://git-scm.com/docs/git-revert .To vrátí celý kód pak si můžete udělat další commit.Then hlavu bude ukazovat, že poslední dopustit. vrátilo dopouští nikdy smazat, ale nebude to mít vliv na ty poslední dopustit.

Odpovězeno 01/03/2017 v 15:15
zdroj uživatelem

hlasů
0

git obnovit --hard

git tlačit původ HEAD --force

Pokud je označen jeden nebo více commitů, odstraňte značku (y) první. V opačném případě značený zavazují není odstraněna.

Odpovězeno 24/07/2015 v 14:45
zdroj uživatelem

hlasů
0

Za předpokladu, že jste se tlačil do vzdáleného úložiště, můžete znovu naklonovat úložiště. To byl můj způsob volby několikrát.

Odpovězeno 31/12/2014 v 06:54
zdroj uživatelem

Odpovězeno 18/07/2018 v 06:27
zdroj uživatelem

hlasů
-1

Vezměte zálohu kódu do dočasné složky. Následující příkaz obnoví stejné jako server.

git reset --hard HEAD
git clean -f
git pull

Zkopírujte sám potřebné soubory ze složky temp, a pak spáchat

Odpovězeno 14/07/2016 v 11:25
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more