Paano ko itulak ang isang nakapirming gumawa sa isang remote na Git repository?

Kapag gumawa ako ng i>

 > git commit --amend 

Sa kasamaang palad, hindi maaaring ibalik ang gumawa sa repository. Tinanggihan ito bi>

 > git push origin To //my.remote.repo.com/stuff.git/ ! [rejected] master -> master (non-fast forward) error: failed to push some refs to '//my.remote.repo.com/stuff.git/' 

Ano ang dapat kong gawin? (Maaari ko bang ma-access ang remote repository.)

475
31 окт. Itakda ang Spoike Oktubre 31 2008-10-31 13:23 '08 at 1:23 pm 2008-10-31 13:23
@ 13 sagot

Ako ay talagang isang beses na nag-click sa --force at. .git repository at nakuha ang isang sumpa mula sa Linus BIG TIME . Sa pangkalahatan, ito ay lilikha ng maraming problema para sa ibang tao. Ang simpleng sagot ay: "Huwag gawin ito."

Nakikita ko ang iba na nagbibigay ng isang recipe para sa mga ito, kaya hindi ko ulitin ang mga ito dito. Ngunit ito ay isang pahiwatig upang mabawi mula sa sitwasyon pagkatapos mong hunhon ang naitama pagkapirmi sa --force (o + master).

  • Hanapin ang lumang gumawa na iyong iniambag dito (tawagin itong old , at piliin namin ang bagong command na nilikha mo sa pamamagitan ng pagbabago ng new ).
  • Gumawa ng isang pagsasama sa pagitan ng old at new pamamagitan ng pagsulat ng isang new puno, halimbawa, git checkout new git merge -s ours old .
  • Pagsamahin ito sa iyong master gamit ang git merge master
  • I-update ang iyong wizard gamit ang git push . HEAD:master resulta git push . HEAD:master git push . HEAD:master
  • I-print ang resulta.

Pagkatapos ay ang mga taong hindi matagumpay na ma-base ang kani>ikaw ay isang masamang lalaki ), ay makikita ang resulta ng pagsama-sama at makita na gumagamit ka ng new paglipas ng old . Ang kani>old at new , na lumitaw bi>

371
11 янв. ang sagot ay ibinigay sa pamamagitan ng gitster 11 jan. 2009-01-11 10:36 '09 at 10:36 AM 2009-01-11 10:36

Nakikita mo ang tampok na seguridad ng Git. Ang Git ay tumangging i-update ang isang remote na sangay ng sangay dahil ang iyong sangay ng header ay hindi isang direktang inapo ng kasalukuyang pag-aayos ng header ng sangay na iyong na-click.

Kung hindi ito ang kaso, pagkatapos ay ang dalawang tao na nagtutulak sa parehong repository sa parehong oras ay hindi malaman na ang isang bagong pangako ay nangyari nang sabay-sabay, at ang nagtulak sa huling ay mawawala ang kanyang trabaho. naunang pusher nang wa>

Kung alam mo na ikaw lamang ang taong nag-click, at nais mong pindutin ang naayos na pag-aayos o pindutin ang pag-aayos na pagbeto ng sangay, maaari mong "pilitin" ang Git upang i-update ang remote branch gamit ang -f switch.

 git push -f origin master 

Kahit na ito ay hindi maaaring gumana, dahil ang Git ay nagbibigay-daan sa mga remote na repository upang bigyan up ng mabilis na pag-click sa dulo gamit ang receive.denynonfastforwards configuration. Kung ito ang kaso, ang dahilan para sa pagtanggi ay ganito ang hitsura (tandaan ang "remote failure" na bahagi):

border=0
  ! [remote rejected] master -> master (non-fast forward) 

Upang makaligtasan ito, kai>

 git push origin :master git push origin master 

Sa pangkalahatan, ang huling parameter ng git push gumagamit ng format na <local_ref>:<remote_ref> , kung saan local_ref ang pangalan ng sangay sa lokal na repository, at ang remote_ref ay ang pangalan ng sangay sa remote repository. Ang pares ng mga utos ay gumagamit ng dalawang mga pagdadaglat. :master ay null local_ref, na nangangahulugang ang pagpapataw ng isang zero branch sa remote na bahagi ng master , iyon ay, ang pagtanggal ng isang remote na sangay. Pangalan ng sangay nang wa>: nangangahulugan na ang lokal na sangay na may tinukoy na pangalan ay nai-redirect sa remote branch na may parehong pangalan. master sa sitwasyong ito ay maikli para sa master:master .

218
01 нояб. Sumagot na ibinigay ni Charles Bailey Nobyembre 01. 2008-11-01 00:58 '08 at 0:58 am 2008-11-01 00:58

Mabilis na pagsalubong: ang katunayan na wa>

Sa anumang kaso, ang "halata" na paraan upang gawin ito, sa pag-aakala na hindi mo sinubukan na pilitin ang isang push, ay upang kunin muna ito. Ito ay hahantong sa pagbabago na ginawa mo dito (at, samakatuwid, wala na ito) upang muling lumitaw ito.

Sa oras na malutas mo ang anumang mga kontrahan, maaari kang mag-click muli.

Kaya:

 git pull 

Kung nakakuha ka ng mga error sa pull, marahil ay may mali sa iyong lokal na pagsasaayos ng repository (nagkaroon ako ng di-wastong ref sa seksyong .git / config).

At pagkatapos

 git push 

Maaari kang makatanggap ng karagdagang pag-aayos sa paksa ng "Trivial merge".

184
22 сент. Tumugon na ibinigay ng Tim Band 22 Set 2009-09-22 13:46 '09 sa 13:46 2009-09-22 13:46

Ang maikling sagot ay: huwag pindutin ang naitama na mga pag-aayos sa pampublikong repo.

Mahabang sagot: maraming mga utos ng Git, gaya ng git commit --amend at git rebase , talagang muling isulat ang ba>

Gayunpaman, kung talagang nais mong pindutin ang isang naitama mensahe, magagawa mo ito tulad nito:

 $ git push origin +master:master 

Ang nangungunang + sign ay pipilitin sa iyo upang pindutin, kahit na ito ay hindi humantong sa isang pag-aayos ng "mabilis pasulong". (Ang mabilis na pag-forward ay nangyayari kapag ang mga pagbabago na iyong na-click ay isang direktang inapo ng mga pagbabago na nasa pampublikong repo.)

86
31 окт. ang sagot ay ibinigay sa nagpadi noong Oktubre 31 2008-10-31 17:35 '08 at 17:35 2008-10-31 17:35

Narito ang isang madaling at malinis na paraan upang gawin ang iyong mga pagbabago pagkatapos mong gumawa ng commit --amend :

 git reset --soft HEAD^ git stash git push -f origin master git stash pop git commit -a git push origin master 

Ano ang mga sumusunod:

  • I-reset ang mga sangay ng sangay sa mga magu>
  • I-click ang huling gumawa.
  • Sapilitang pagpindot sa remote control. Ngayon ang remote na computer ay wa>
  • Pumunta sa iyong wallet.
  • Basahin ang malinis.
  • Mag-click sa remote control.

Huwag kalimutan na baguhin ang "pinanggalingan" at "master", kung mailalapat mo ito sa isa pang branch o remote device.

20
21 июня '15 в 17:41 2015-06-21 17:41 ang sagot ay ibinigay Faiza Hunyo 21, '15 sa 17:41 2015-06-21 17:41

Nalutas ko ito sa pamamagitan ng pagtatapon ng lokal na pag-aayos at pagdaragdag ng mga bagong pagbabago mula sa tuktok:

 # Rewind to commit before conflicting git reset --soft HEAD~1 # Pull the remote version git pull # Add the new commit on top git add ... git commit git push 
16
24 сент. Ang sagot ay ibinigay bara Setyembre 24 2012-09-24 18:46 '12 sa 06:46 2012-09-24 18:46

Nagkaroon ako ng parehong problema.

  • Ang huling pag-aayos na pinindot ay random na nababagay.
  • Maraming mga pagbabago na ginawa sa isang lugar, na ginawa limang beses
  • Sinubukan na mag-click, makakuha ng isang error, takot, pagsamahin ang remote access, makakuha ng maraming di-aking mga file, na-click, nabigo, atbp

Bi>FUBAR .

Ang desisyon. Ang isang maliit na naiiba, bi>

 # Rewind to commit just before the pushed-and-amended one. # Replace <hash> with the needed hash. # --soft means: leave all the changes there, so nothing is lost. git reset --soft <hash> # Create new branch, just for a backup, still having all changes in it. # The branch was feature/1234, new one - feature/1234-gone-bad git checkout -b feature/1234-gone-bad # Commit all the changes (all the mess) not to lose it  not to carry around git commit -a -m "feature/1234 backup" # Switch back to the original branch git checkout feature/1234 # Pull the from remote (named 'origin'), thus 'repairing' our main problem git pull origin/feature/1234 # Now you have a clean-and-non-diverged branch and a backup of the local changes. # Check the needed files from the backup branch git checkout feature/1234-gone-bad -- the/path/to/file.php 

Marahil ito ay hindi isang mabilis at malinis na desisyon, at nawala ang aking kuwento (1 gumawa sa halip ng 5), ngunit itinatago niya ang kanyang trabaho sa araw.

7
20 февр. Ang sagot ay ibinigay davisca Pebrero 20. 2014-02-20 13:24 '14 sa 01:24 2014-02-20 13:24

Narito ang isang madaling at malinis na paraan upang gumawa ng mga pagbabago pagkatapos mong taposin git add "your files" at git commit --amend :

 git push origin master -f 

o

 git push origin master --force 
2
18 янв. Ang sagot ay ibinigay ni Marwen Bkh 18 jan. 2016-01-18 11:29 '16 sa 11:29 2016-01-18 11:29

Kung hindi mo pinindot ang code sa remote branch (GitHub / Bitbucket), maaari mong baguhin ang mensahe ng gumawa sa command line, tulad ng ipinapakita sa ibaba.

  git commit --amend -m "Your new message" 

Kung nagtatrabaho ka sa isang partikular na branch, gawin ang mga sumusunod:

 git commit --amend -m "BRANCH-NAME: new message" 

Kung na-click mo na ang code sa maling mensahe, kai>

Mangyaring basahin ang buong sagot bago gawin ito.

 git commit --amend -m "BRANCH-NAME : your new message" git push -f origin BRANCH-NAME # Not a best practice. Read below why? 

Mahalagang tala:. Kapag pinindot mo ang push, maaari kang makatagpo ng mga problema sa code na gumagana sa ibang mga developer sa parehong branch. Samakatuwid, upang maiwasan ang mga salungat na ito, kai>puwersa :

  git commit --amend -m "BRANCH-NAME : your new message" git pull origin BRANCH-NAME git push -f origin BRANCH-NAME 

Ito ay pinakamahusay na kasanayan kapag binago ang isang gumawa ng mensahe, kung ito ay pinindot.

2
13 янв. Ang sagot ay ibinigay ng Packer Jan 13 2015-01-13 10:20 '15 sa 10:20 2015-01-13 10:20

Nakuha mo ang error na ito dahil ang Git remote ay mayroon ng mga file na ito ng paggawa. Kai>

 git push -f origin branch_name 

Tiyakin din na hinila mo ang code mula sa remote, habang ang isang tao mula sa iyong koponan ay maaaring lumipat sa isang branch.

 git pull origin branch_name 

Ito ay isa sa mga kaso kung kai>

1
21 янв. ang sagot ay ibinigay ni Praveen Dhawan Enero 21 2016-01-21 09:35 '16 sa 9:35 2016-01-21 09:35

Kinai>

1
31 окт. ang sagot ay ibinigay Spoike Oktubre 31. 2008-10-31 14:39 '08 at 2:39 pm 2008-10-31 14:39

Iningatan ko >

  • Hindi ma-click dahil sa isang pag-aayos.
  • Subukan ko ang aking inaasahan.
  • Pagsamahin ang error kaya ko ayusin ito nang mano-mano.
  • Lumikha ng isang bagong gumawa (na minarkahan ang "sumanib") at i-click ito.
  • Tila ito gumagana!

Tandaan Ang binagong pag-aayos ay ang huling isa.

1
02 дек. Ang sagot ay ibinigay Rolf 02 Disyembre. 2016-12-02 19:29 '16 sa 19:29 2016-12-02 19:29

Iba pang mga katanungan tungkol sa o magtanong