Paano gumawa ng git pull patungan ang mga lokal na file?

Papaano papuwersa patungan ang mga lokal na file sa git pull ?

Ang script ay ang mga sumusunod:

  • Binabago ng miyembro ng kopya ang mga template para sa site na aming ginagawa
  • Nagdagdag sila ng i>
  • Nagpadala sila ng mga larawan sa pamamagitan ng koreo, mamaya, sa akin
  • Nagdagdag ako ng mga larawan sa ilalim ng kontrol ng source code at inilagay ito sa GitHub kasama ang iba pang mga pagbabago.
  • Hindi nila matatanggap ang mga update mula sa GitHub dahil hindi nais ng Git na i-overwrite ang kani>

Ito ang error na nakukuha ko:

error: ang pampublikong / mga imahe / icon.gif 'ay hindi mapapatungan sa pamamagitan ng pagsasama

Paano mapapatungan ng Git ang mga ito? Ang taong ito ay isang taga-disenyo. Karaniwan kong lutasin ang lahat ng mga salungatan nang manu-mano, kaya ang pinakabagong bersyon ay naka-install sa server, na kai>

5705
14 июля '09 в 17:58 2009-07-14 17:58 na tinanong ng Jakub Troszok sa Hulyo 14, 2009 sa 17:58 2009-07-14 17:58
@ 39 sagot
  • 1
  • 2

Mahalaga: kung mayroon kang anumang mga lokal na pagbabago, mawawala ito. Gamit ang opsyon na - o wa>--hard lahat ng mga lokal na --hard na hindi naipadala ay mawawala. [*]

Kung mayroon kang mga file na hindi sinusubaybayan ng Git (halimbawa, nai-download na nilalaman ng user), ang mga file na ito ay hindi maaapektuhan.


Sa tingin ko ito ang tamang paraan:

 git fetch --all 

Pagkatapos ay mayroon kang dalawang pagpipilian:

 git reset --hard origin/master 

O Kung ikaw ay nasa ibang sangay:

 git reset --hard origin/<branch_name> 

Paliwanag:

git fetch ng mga pinakabagong data mula sa isang remote na computer, nang hindi sinusubukang i-merge o ilipat ang anumang bagay.

Pagkatapos ay i- git reset ang pangunahing sangay sa iyong natanggap. Ang pagpipiliang --hard nagbabago sa lahat ng mga file sa iyong gumaganang puno ayon sa mga file sa origin/master


Panatilihin ang mga kasalukuyang lokal na gawain

[*] : Ito ay nagkakahalaga ng noting na maaari mong i-save ang kasalukuyang lokal na gumawa sa pamamagitan ng paglikha ng isang sangay mula sa master upang i-reset ang:

 git checkout master git branch new-branch-to-save-current-commits git fetch --all git reset --hard origin/master 

Pagkatapos nito, ang lahat ng mga dating gawain ay itatabi sa new-branch-to-save-current-commits .

Nakabinbin ang mga pagbabago

Gayunpaman, mawawala ang mga hindi nabagong pagbabago (kahit phased). Tiyaking itago mo at ipasa ang lahat ng kai>

 git stash 

At pagkatapos ay mag-aplay muli ang mga hindi pinapahintulutang pagbabago:

 git stash pop 
7980
17 янв. ang sagot ay binibigyan ng RNA 17 jan. 2012-01-17 03:02 '12 sa 3:02 2012-01-17 03:02

Subukan ang mga sumusunod:

 git reset --hard HEAD git pull 
border=0

Dapat niyang gawin kung ano ang gusto mo.

798
09 мая '10 в 22:45 2010-05-09 22:45 sumagot kay Travis Reeder Mayo 09, '10 at 10:45 PM 2010-05-09 22:45

Pansin: git clean lahat ng iyong mga untraceable na mga file / direktoryo at hindi maaaring bawiin.


Minsan >clean -f ay hindi makakatulong. Kung wala kang anumang mga sinusubaybayang direktoryo, kai>

 # WARNING: this can't be undone! git reset --hard HEAD git clean -f -d git pull 

Pansin: git clean lahat ng iyong mga untraceable na mga file / direktoryo at hindi maaaring bawiin.

Subukan -n gamitin -n (- --dry-run ). Ipapakita nito sa iyo kung ano ang aalisin nang hindi talaga tinatanggal ang anumang bagay:

 git clean -n -f -d 

Halimbawa ng output:

 Would remove untracked-file-1.txt Would remove untracked-file-2.txt Would remove untracked/folder ... 
406
19 марта '11 в 12:10 2011-03-19 12:10 ang sagot ay ibinigay ni David Avsajanishvili Marso 19 '11 sa 12:10 2011-03-19 12:10

Tulad ng parkupino, sa tingin ko ang mga sagot ay kahila-hilakbot. Ngunit kahit na mas mabuti ang sagot ng Hedgehog, sa palagay ko ay hindi ito ganoon kagandahan. Ang paraan ko nahanap na ito ay ang paggamit ng "sampling" at "pagsasama" gamit ang isang partikular na diskarte. Dapat itong tiyakin na ang iyong lokal na mga pagbabago ay nai-save hanggang sa ito ay isa sa mga file na sinusubukan mong i-overwrite.

Unang gawin ang mga pagbabago.

  git add * git commit -a -m "local file server commit message" 

Pagkatapos ay kunin ang mga pagbabago at muling isulat kung may conflict.

  git fetch origin master git merge -s recursive -X theirs origin/master 

"- X" ay ang pangalan ng opsyon, at "kanila" ang halaga para sa pagpipiliang ito. Mas gusto mong gamitin ang "iyong" mga pagbabago sa halip ng "iyong" mga pagbabago kung may conflict.

347
11 апр. Sagot na ibinigay ni Richard Kersey Abril 11 2012-04-11 23:13 '12 sa 11:13 2012-04-11 23:13

Sa halip:

 git fetch --all git reset --hard origin/master 

Gusto ko ipaalam na gawin ang mga sumusunod:

 git fetch origin master git reset --hard origin/master 

Hindi mo kai>

248
26 апр. Si Johanneke ay nai-post noong Abril 26 2013-04-26 16:48 '13 sa 16:48 2013-04-26 16:48

Mukhang ang pinakamagandang gawin ay ito:

 git clean 

Upang alisin ang lahat ng hindi nagamit na mga file at pagkatapos ay magpatuloy sa normal na git pull ...

125
14 июля '09 в 18:16 2009-07-14 18:16 ang sagot ay ibinigay sa pamamagitan ng Jakub Troszok sa Hulyo 14, 2009 sa 16:16 2009-07-14 18:16

Atensyon, ito ay permanenteng tanggalin ang iyong mga file kung mayroon kang anumang / * na mga entry sa direktoryo sa iyong gitignore file.

Ang i>

Sa halip (git> v1.7.6):

 git stash --include-untracked git pull 

Maaari mong wakasan ang cache ng kasaysayan sa ibang pagkakataon.

Mano-manong, isa-isa:

 $ git stash list stash@{0}: WIP on <branch>: ... stash@{1}: WIP on <branch>: ... $ git stash drop stash@{0} $ git stash drop stash@{1} 

Malupit, lahat nang sabay-sabay:

 $ git stash clear 

Siyempre, kung gusto mong bumalik sa iyong itinago:

 $ git stash list ... $ git stash apply stash@{5} 
102
12 февр. Ang sagot ay ibinigay ng Hedgehog noong Pebrero 12. 2012-02-12 02:00 '12 sa 2:00 2012-02-12 02:00

Maaari mong mahanap ang command na ito na kapaki-pakinabang para sa pagtanggal ng mga lokal na pagbabago:

 git checkout <your-branch> -f 

At pagkatapos ay gawin ang paglilinis (tinatanggal ang mga raw na file mula sa gumaganang puno):

 git clean -f 

Kung nais mong tanggalin ang mga hindi kinakai>

 git clean -fd 
88
05 авг. ang sagot ay ibinigay ng Vishal 05 aug. 2010-08-05 21:06 '10 sa 21:06 2010-08-05 21:06

Sa halip na pagsama sa git pull subukan ito:

git fetch --all

sinusundan ng:

git reset --hard origin/master .

81
22 нояб. Ang sagot ay ibinigay ni Lloyd Moore sa 22 Nobyembre. 2012-11-22 13:56 '12 sa 1:56 ng hapon 2012-11-22 13:56

Ang tanging bagay na nagtrabaho para sa akin ay:

 git reset --hard HEAD~5 

Bibigyan ka nito ng limang gumawa, at pagkatapos

 git pull 

Natagpuan ko na sa pamamagitan ng pagtingin sa kung paano i-cancel git pagsali .

54
06 мая '11 в 0:53 2011-05-06 00:53 ang sagot ay ibinigay ni Chris BIllante noong Mayo 06 '11 sa 0:53 2011-05-06 00:53

Ang problema sa lahat ng mga solusyon na ito ay ang mga ito ay masyadong kumplikado, o isang mas seryosong problema ay na tinatanggal nila ang lahat ng mga raw na file mula sa web server, na hindi namin gusto, dahil ang mga configuration file na laging nasa server ay laging kinakai>

Narito ang pinakamalinis na solusyon na ginagamit namin:

51
06 нояб. sagot na ibinigay ng Strahinja Kustudic Nobyembre 06 2012-11-06 02:32 '12 sa 2:32 2012-11-06 02:32

Mayroon akong parehong problema. Wa>

Napagpasyahan ko ito:

  1. Tanggalin ang lahat ng mga file. Iwan lamang ang .git direktoryo.
  2. git reset --hard HEAD
  3. git pull
  4. git push

Ngayon gumagana ito.

38
13 янв. Ang sagot ay ibinigay ni John John Pichler noong Enero 13 2011-01-13 02:58 '11 sa 2:58 2011-01-13 02:58

Una sa lahat, subukan ang standard na paraan:

 git reset HEAD --hard # To remove all not committed changes! git clean -fd # To remove all untracked (non-git) files and folders! 

Babala : ang mga command sa itaas ay maaaring humantong sa pagkawala ng data / mga file, kung hindi sila ay naayos! Kung hindi ka sigurado, munang backup ang iyong buong folder ng repository.

Pagkatapos ay hilahin muli.

Kung ang nasa itaas ay hindi makakatulong at hindi mo kai>

 cd your_git_repo # where 'your_git_repo' is your git repository folder rm -rfv * # WARNING: only run inside your git repository! git pull # pull the sources again 

Aalisin nito ang lahat ng mga git file (maliban sa .git/ dir, kung saan mayroon kang lahat ng mga gumagawa) at i-extract ito muli.


Bakit nai- git reset HEAD --hard maaaring gumana ang git reset HEAD --hard sa i>

  1. Mga patakaran ng user sa .gitattributes file

    Ang pagkakaroon ng tuntunin eol eol=lf sa. Gitattributes ay maaaring maging sanhi ng git upang baguhin ang ilan sa mga pagbabago ng file, na nagko-convert ang mga endings ng mga linya ng CRLF sa LF sa i>

    Kung gayon, dapat mong gawin ang mga pagbabago na ito ng CRLF / LF (sa pamamagitan ng pagtingin sa kanila sa git status ) o subukan: git config core.autcrlf false upang pansamanta>

  2. Hindi katugma ang sistema ng file

    Kapag gumamit ka ng isang file system na hindi sumusuporta sa mga katangian ng pahintulot. Halimbawa, mayroon kang dalawang mga repository, isa para sa Linux / Mac ( ext3 / hfs+ ) at ang iba pang para sa mga file system na batay sa FAT32 / NTFS.

    Tulad ng napansin mo, mayroong dalawang magkakaibang uri ng mga sistema ng file, kaya ang isa na hindi sumusuporta sa mga pahintulot ng Unix ay karaniwang hindi maaaring i-reset ang mga pahintulot para sa mga file sa isang sistema na hindi sumusuporta sa naturang mga pahintulot, kaya gaano man ka --hard subukan mo, git laging nakikita ang i>

33
26 окт. ang sagot ay ibinigay noong Oktubre 26. 2012-10-26 12:17 '12 sa 12:17 2012-10-26 12:17

Bonus:

Nagsasalita ng pull / makuha / pagsamahin sa nakaraang mga sagot, nais kong ibahagi ang isang kawili-wili at produktibong bilis ng kamay:

git pull --rebase

Ang koponan na ito ay ang pinaka-kapaki-pakinabang na koponan sa aking buhay sa Git, na naka-save ng maraming oras.

Bago ipadala ang iyong bagong komit sa server, subukan ang command na ito at awtomatiko itong i-synchronize ang pinakabagong mga pagbabago sa server (may fetch + merge) at ilagay ang iyong commit sa tuktok ng Git log. Hindi na kai>

Maghanap ng mga bahagi sa Ano ang gumagawa ng "git pull --rebase"? ,

31
23 дек. Ang sagot ay ibinigay ni Sazzad Hissain Khan noong Disyembre 23. 2015-12-23 18:41 '15 sa 18:41 2015-12-23 18:41

Summarized ko ang iba pang mga sagot. Maaari kang magsagawa ng git pull wa>

 git fetch --all git reset --hard origin/master git reset --hard HEAD git clean -f -d git pull 

Babala Ang script na ito ay napakalakas, kaya maaari mong mawala ang iyong mga pagbabago.

27
07 авг. ang sagot ay ibinigay ni Robert Moon 07 aug. 2015-08-07 06:03 '15 sa 6:03 2015-08-07 06:03

Mayroon akong katulad na problema. Kai>

 git reset --hard HEAD git clean -f git pull 
27
14 янв. Ang sagot ay ibinigay ni Ryan Jan. 14 2011-01-14 18:18 '11 sa 18:18 2011-01-14 18:18

Batay sa aking sariling mga karanasan ng ganitong uri, ang solusyon na inaalok ng Strahinja Kustudic sa itaas ay sa pamamagitan ng malayo ang pinakamahusay. Tulad ng nakikita ng iba, ang pagsasagawa lamang ng isang hard reset ay mag-aalis ng lahat ng mga hindi pa natatapos na mga file, na maaaring magsama ng maraming bagay na hindi mo gustong tanggalin, tulad ng mga file ng pagsasaayos. Higit na ligtas, kai>

Iyon ang dahilan kung bakit in-update ko ang Kustudic script upang gawin iyon. Naayos ko rin ang isang typo (nawawala mula sa orihinal).

26
27 февр. Sumagot na ibinigay ni Rolf Kaiser noong Pebrero 27 2013-02-27 17:43 '13 sa 17:43 2013-02-27 17:43

Naniniwala ako na mayroong dalawang posibleng mga sanhi ng salungatan na kai>

  • Ang mga lokal na file na hindi sinusubaybayan ay dapat na alisin nang manu-mano (mas ligtas) o, tulad ng iminungkahing sa ibang mga sagot, sa git clean -f -d

  • Dapat ding tanggalin ang mga lokal na gumawa na hindi nasa remote na sangay. Ang IMO ay ang pinakamadaling paraan upang makamit ito: git reset --hard origin/master (palitan ang "master" sa anumang sangay na pinagtatrabahuhan mo, at unang patakbuhin ang git fetch origin )

23
12 дек. Ang sagot ay ibinigay tiho Disyembre 12. 2011-12-12 22:54 '11 sa 10:54 ng 2011-12-12 22:54

Isang mas madaling paraan:

 git checkout --theirs /path/to/file.extension git pull origin master 

Susubukan nito ang iyong lokal na git file.

20
05 мая '15 в 11:03 2015-05-05 11:03 ang sagot ay ibinigay maximus 69 Mayo 05 '15 sa 11:03 2015-05-05 11:03

Tila na ang karamihan ng mga sagot dito ay nakatuon sa sangay ng sangay; Gayunpaman, kung minsan may mga kaso kapag nagtatrabaho ako sa parehong sangay ng pag-andar sa dalawang magkakaibang lugar, at gusto ko ang isa sa mga ito na maipakita ang isa sa mga ito sa kabi>

Batay sa kombinasyon ng tugon ng RNA at ang sagot na tila sa isang katulad na tanong , dumating ako sa isang mahusay na trabaho:

 git fetch git reset --hard @{u} 

Patakbuhin ito mula sa sangay, at i-reset lamang nito ang iyong lokal na sangay sa salungat sa agos na bersyon.

Ito ay maaaring maginhawang inilagay sa git forcepull git ( git forcepull ):

git config alias.forcepull "!git fetch ; git reset --hard @{u}"

O sa .gitconfig file:

 [alias] forcepull = "!git fetch ; git reset --hard @{u}" 

Enjoy!

19
25 февр. ang sagot ay ibinigay ni JacobEvelyn noong Pebrero 25. 2014-02-25 20:19 '14 sa 20:19 2014-02-25 20:19

Ako ay may parehong problema, at para sa i>git clean -f -d hindi gawin iyon. Iyon ang dahilan kung bakit: Para sa i>-x .

19
03 авг. Sumagot Tierlieb 03 aug. 2011-08-03 12:23 '11 sa 12:23 2011-08-03 12:23

Napagpasyahan ko >

18
03 дек. sagot na ibinigay ni Simon B. 03 disyembre. 2010-12-03 18:00 '10 sa 18:00 2010-12-03 18:00

Mayroon akong isang kakaibang sitwasyon na wa>git clean o git reset trabaho. Kai>git index gamit ang sumusunod na script para sa bawat untracked na file:

 git rm [file] 

Pagkatapos ay maaari kong hilahin fine.

17
19 сент. Sumagot na ibinigay ni Chen Zhang sa Sep 19 2011-09-19 17:18 '11 sa 17:18 2011-09-19 17:18

Alam ko ang isang mas simple at mas masakit na paraan:

 $ git branch -m [branch_to_force_pull] tmp $ git fetch $ git checkout [branch_to_force_pull] $ git branch -D tmp 

Ito ay!

16
05 сент. ang sagot ay ibinigay ddmytrenko 05 sep . 2015-09-05 21:23 '15 sa 21:23 2015-09-05 21:23

Ang apat na mga koponan na ito ay gumagana para sa akin.

 git reset --hard HEAD git checkout origin/master git branch -D master git checkout -b master 

Upang suriin / bunutin pagkatapos maisagawa ang mga utos na ito

 git pull origin master 

Sinubukan ko ng maraming, ngunit sa wakas nakamit ang tagumpay sa mga koponan.

13
20 марта '14 в 7:24 2014-03-20 07:24 ang sagot ay ibinigay sa pamamagitan ng vishesh chandra Marso 20, '14 sa 7:24 2014-03-20 07:24

Sa kabila ng orihinal na tanong, ang mga nangungunang sagot ay maaaring maging sanhi ng mga problema para sa mga taong may katulad na problema, ngunit ayaw ni>

Ang susunod na bersyon ay nag-aayos ng iyong mga lokal na pagbabago sa oras ng sangay ( tmp ), sinusuri ang source branch (na, akala ko, ay master ), at pinagsasama ang mga update. Maaari mong gawin ito sa stash , ngunit natagpuan ko ito ay karaniwang mas madaling gamitin lamang ang sangay / sumanib diskarte.

 git checkout -b tmp git add *; git commit -am "my temporary files" git checkout master git fetch origin master git merge -s recursive -X theirs origin master 

kung saan ipinapalagay namin na ang isa pang repository ay origin master .

12
22 окт. Ang sagot ay ibinigay ng Snowcrash noong Oktubre 22. 2014-10-22 20:31 '14 sa 20:31 2014-10-22 20:31

Basta gawin ito

 git fetch origin branchname git checkout -f origin/branchname // This will overwrite ONLY new included files git checkout branchname git merge origin/branchname 

Sa ganitong paraan maiiwasan mo ang lahat ng hindi kanais-nais na epekto, tulad ng pagtanggal ng mga file o mga direktoryo na nais mong itago, atbp.

12
19 окт. sagot na ibinigay ng user2696128 Oktubre 19 2015-10-19 12:54 '15 sa 12:54 2015-10-19 12:54

I-reset ang pointer at magtungo sa origin/master , ngunit huwag i-reset ang gumaganang puno:

 git reset origin/master 
11
15 февр. Ang sagot ay ibinigay ng user811773 noong Pebrero 15. 2013-02-15 16:41 '13 sa 4:41 ng 2013-02-15 16:41

Mga Kinakai>

  • Subaybayan ang mga lokal na pagbabago, kaya wa>
  • Gawin ang lokal na imbakan na katugma sa remote source repository.

Solusyon:

  • Itago ang mga lokal na pagbabago.
  • Kumuha ng malinis na mga file at hindi pinapansin ang .gitignore at hard reset sa pinagmulan .

     git stash --include-untracked git fetch --all git clean -fdx git reset --hard origin/master 
9
02 сент. reply given vezenkov 02 Sep 2015-09-02 02:00 '15 sa 2:00 2015-02-02 02:00

Nabasa ko ang lahat ng mga sagot, ngunit hinahanap ko ang isang utos para dito. Iyon ang ginawa ko. Idinagdag ang git alias sa. Gitconfig

 [alias] fp = "!f(){ git fetch ${1} ${2}  git reset --hard ${1}/${2};};f" 

Patakbuhin ang utos

 git fp origin master 

ay katumbas ng

 git fetch origin master git reset --hard origin/master 
9
08 июля '16 в 16:11 2016-07-08 16:11 Ang sagot ay ibinigay ng Venkat Kotra Hulyo 08 '16 sa 16:11 2016-07-08 16:11
  • 1
  • 2

Iba pang mga katanungan tungkol sa tags o Magtanong ng isang Tanong