Paano upang kanselahin ang 'git add' bago gumawa?

Nagkamali akong nagdagdag ng mga file sa git gamit ang command:

 git add myfile.txt 

Hindi pa ako tumatakbo git commit pa. Mayroon bang paraan upang kanselahin ito upang ang mga file na ito ay hindi kasama sa gumawa?


Sa sandaling mayroong 48 na sagot (i> Mangyaring huwag magdagdag ng bago kung wala kang bagong impormasyon.

7856
08 дек. itinakda ng paxos1977 08 disyembre . 2008-12-08 00:57 '08 at 0:57 2008-12-08 00:57
@ 34 sagot
  • 1
  • 2

Maaari mong kanselahin ang git add bago gumawa

 git reset <file> 

na kung saan ay aalisin ito mula sa kasalukuyang index (ang "tungkol sa gumawa ng" listahan) nang hindi binabago ang anumang bagay.

Maaari mong gamitin

 git reset 

nang wa>

Sa mas lumang mga bersyon ng Git, ang mga utos sa itaas ay katumbas ng git reset HEAD <file> at git reset HEAD ayon sa pagkakabanggit, at hindi magtagumpay kung ang HEAD ay hindi natukoy (dahil hindi ka nakagawa ng anumang gumawa sa iyong repo) o hindi siguradong (dahil nilikha mo ang isang branch pangalan HEAD , na kung saan ay isang bobo bagay na hindi mo dapat gawin). Binago ito sa Git 1.8.2 , bagaman sa makabagong bersyon ng Git maaari mong gamitin ang mga utos sa itaas bago gumawa ng iyong unang pangako:

"git reset" (wa>

8850
08 дек. sagot ay ibinigay genehack 08 dec. 2008-12-08 01:30 '08 at 1:30 2008-12-08 01:30

Gusto mo:

 git rm --cached <added_file_to_undo> 

Makatwirang paliwanag:

Noong bago ako dito, sinubukan ko muna

 git reset . 

(upang kanselahin ang lahat ng aking mga inisyal na pag-upload), para lamang makuha ang (hindi masyadong) kapaki-pakinabang na mensahe na ito:

 fatal: Failed to resolve 'HEAD' as a valid ref. 

Ito ay lumiliko out na ito ay dahil ang link HEAD (sangay?) Lumalabas lamang pagkatapos ng unang gumawa. Iyon ay, makakaranas ka ng parehong problema sa Newbie bi>

  1. Pumunta sa aking bagong direktoryo ng proyekto upang subukan ang Git, ang bagong pagkasabik
  2. git init
  3. git add.
  4. git status

    ... maraming crap scrolls ...

    > Sumpain, hindi ko nais idagdag ang lahat ng ito.

  5. google "cancel ang git add"

    => makita ang overflow ng stack - ooh

  6. git reset.

    => nakamamatay: Hindi malutas ang 'HEAD' bi>

Bi>isang mensahe ng error ay nakarehistro sa listahan ng pamamahagi.

At ang tamang desisyon ay naroroon doon sa output ng status ng Git (na, oo, tinawagan ko na "crap")

border=0
 ... # Changes to be committed: # (use "git rm --cached <file>..." to unstage) ... 

At ang solusyon talaga ay ang paggamit ng git rm --cached FILE .

Tandaan ang mga babala sa ibang lugar dito - tinatanggal ng git rm iyong lokal na nagtatrabaho kopya ng file, ngunit hindi kung gagamitin mo - naka- cache . Narito ang resulta ng git help rm :

- naka-cache Gamitin ang pagpipiliang ito upang alisin at alisin ang mga landas mula sa index lamang. Ang mga file ng desktop, binago o hindi, ay mananatili.

Nagsisimula akong gamitin

 git rm --cached . 

tanggalin ang lahat at magsimula. Hindi ito gumana, dahil, kahit na add. ay recursive, ito ay lumiliko na rm pangangai>-r para sa recursion. Hininga

 git rm -r --cached . 

Ok, ngayon ako ay bumalik sa kung saan ako nagsimula. Susunod na oras na gagamitin ko -n para sa -n run at tingnan kung ano ang idaragdag:

 git add -n . 

--cached archive ko ang lahat ng bagay sa isang ligtas na lugar bago nagtitiwala sa git help rm upang sabihin na - naka- --cached ay hindi sirain ang anumang bagay (at kung ano kung isinulat ko ito mali).

2013
25 марта '09 в 19:20 2009-03-25 19:20 ang sagot ay ibinigay sa pamamagitan ng Rhubarb sa Marso 25, 2009 sa 19:20 2009-03-25 19:20

Kung nag-type ka:

 git status 

sasabihin sa iyo ng git kung ano ang pag-aayos, atbp., kasama ang mga tagubilin kung paano tanggalin:

 use "git reset HEAD <file>..." to unstage 

Nakita ko na ang git ay isang magandang trabaho na nagtutulak sa akin na gawin ang tamang bagay sa mga sitwasyong ito.

Tandaan Ang mga bagong bersyon ng git (1.8.4.x) ay nagbago ng mensaheng ito:

 (use "git rm --cached <file>..." to unstage) 
498
08 дек. Ang sagot ay ibinigay ni Paul Beckingham 08 dec. 2008-12-08 02:22 '08 at 2:22 am 2008-12-08 02:22

Upang linawin: git add pagbabago sa gumagalaw mula sa kasalukuyang nagtatrabaho direktoryo sa isang intermediate na lugar (index).

Ang prosesong ito ay tinatawag na intermediate. Kaya, ang pinaka-natural na utos para sa pagbabago ng mga pagbabago (binagong mga file) ay halata:

 git stage 

git add ay isang alias lamang para sa git stage

Ito ay isang awa na wa>git unstage at git unadd . Ang kauku>

 git reset HEAD -- 

Madali naming lumikha ng isang alias para sa:

 git config --global alias.unadd 'reset HEAD --' git config --global alias.unstage 'reset HEAD --' 

At sa wakas, mayroon kaming mga bagong koponan:

 git add file1 git stage file2 git unadd file2 git unstage file1 

Sa personal, gumagamit ako ng mas maikling pseudonyms:

 git a #for staging git u #for unstaging 
232
10 сент. Ang sagot na takeshin 10 Setyembre 2010-09-10 23:28 '10 sa 23:28 2010-09-10 23:28

Bi>git reset " ito ay nagaganap pa rin sa .git direktoryo. Hindi ka dapat mag-alala tungkol dito, ang file ay talagang nasa repository pa rin, ngunit lamang bi>

 git gc --prune=now 

I-update (simula dito, susubukan kong alisin ang i>

Kaya kung ano ang tunay na pagkansela ng git add ?

git reset HEAD <file> ?

o

git rm --cached <file> ?

Mahigpit na pagsasalita, at kung hindi ako nagkakamali: hindi .

git add ay hindi maaaring bawiin - ligtas, sa pangkalahatan.

Tandaan muna natin kung ano ang git add <file> talaga ang ginagawa:

  1. Kung ang <file> hindi pa sinusubaybayan , ang git add nagdadagdag sa cache kasama ang mga kasalukuyang nilalaman nito.

  2. Kung ang <file> nasusubaybayan na , ang git add nagse-save sa kasalukuyang nilalaman (snapshot, bersyon) sa cache. Sa GIT, ang pagkilos na ito ay tinatawag pa rin pagdaragdag (at hindi lamang pag-update), dahil ang dalawang magkakaibang mga bersyon (mga snapshot) ng isang file ay itinuturing bi>

Sa liwanag ng mga ito, ang tanong ay medyo hindi maliwanag:

Nagkamali akong nagdagdag ng mga file gamit ang command ...

Ang script ng OP ay tila ang unang (hindi nabuong file), gusto naming "i-undo" na tanggalin ang file (at hindi lamang ang kasalukuyang nilalaman) mula sa mga sinusubaybayan na item. Kung gayon, maaari kang magpatakbo ng git rm --cached <file> .

At maaari rin naming patakbuhin ang git reset HEAD <file> . Sa pangkalahatan, ito ay lalong kanais-nais sapagkat ito ay gumagana sa parehong mga sitwasyon: ito rin ay nagbabawal sa mga pagkilos kapag nagkamali kami ay nagdagdag ng isang bersyon ng na sinusubaybayan na item.

Ngunit may dalawang caveat.

Una: may (tulad ng ipinahiwatig sa sagot) lamang ng isang script na kung saan git reset HEAD ay hindi gumagana, ngunit git rm --cached gumagana: isang bagong repository (wa>

Ikalawa, tandaan na ang git reset HEAD ay hindi maaaring magically ibalik ang mga naunang naka-cache na mga nilalaman ng file, muling sini-sync ito sa HEAD. Kung ang aming mga hindi tama na git add overwrite sa nakaraang uncommitted na bersyon, hindi namin magagawang mabawi ito. Samakatuwid, mahigpit na nagsasalita, hindi namin maaaring kanselahin ang [*].

Halimbawa:

 $ git init $ echo "version 1" > file.txt $ git add file.txt # first add of file.txt $ git commit -m 'first commit' $ echo "version 2" > file.txt $ git add file.txt # stage (don't commit) "version 2" of file.txt $ git diff --cached file.txt -version 1 +version 2 $ echo "version 3" > file.txt $ git diff file.txt -version 2 +version 3 $ git add file.txt # oops we didn't mean this $ git reset HEAD file.txt # undo ? $ git diff --cached file.txt # no dif, of course. stage == HEAD $ git diff file.txt # we have lost irrevocably "version 2" -version 1 +version 3 

Siyempre, hindi ito napakahalaga kung sundin lamang namin ang karaniwang tamad na daloy ng trabaho sa pagpapatupad ng 'git add' para lamang magdagdag ng mga bagong file (case 1), at ina-update namin ang bagong nilalaman sa commit, git commit -a command.


* (I-edit: Ang nasa itaas ay halos tama, ngunit maaari pa ring magkaroon ng i>

153
18 мая '11 в 21:05 2011-05-18 21:05 Ang sagot ay ibinigay ng leonbloy noong Mayo 18, '11 sa 21:05 2011-05-18 21:05
 git rm --cached . -r 

ay "idagdag" ang lahat ng iyong idinagdag mula sa kasalukuyang direktoryo na recursively

89
10 дек. reply na ibinigay ng braitsch 10 dec. 2009-12-10 00:19 '09 sa 0:19 2009-12-10 00:19

Patakbuhin

 git gui 

at tanggalin nang manu-mano ang lahat ng mga file o sa pamamagitan ng pagpili sa lahat ng mga ito at pagpindot sa pindutan ng gumawa nang gumawa.

83
12 окт. Sumagot na ibinigay ni Khaja Minhajuddin noong Oktubre 12 2011-10-12 04:12 '11 sa 4:12 sa 2011-10-12 04:12

Ang Git ay may mga utos para sa bawat pagkilos na maiisip, ngunit nangangai>

Ano ang ginawa mo dati:

  • Binago ang file at gumamit ng git add . o git add <file> .

Ano ang gusto mo:

  • Alisin ang file mula sa index, ngunit i-save ito sa mga bersyon at umalis sa mga hindi nabagong mga pagbabago sa nagtatrabaho kopya:

     git reset head <file> 
  • I-reset ang file gamit ang pinakabagong katayuan mula sa HEAD, itapon ang mga pagbabago at tanggalin ang mga ito mula sa index:

29 марта '13 в 14:14 2013-03-29 14:14 ang sagot ay ibinigay sjas Marso 29, '13 sa 14:14 2013-03-29 14:14

Upang kanselahin ang isang file na naidagdag ay medyo simple, gamit ang git , upang i-reset ang myfile.txt na naidagdag na, gamitin ang:

 git reset HEAD myfile.txt 

Ipaliwanag:

Pagkatapos mong ilagay ang mga hindi kinakai>git reset , Ang Head ay i- git reset iyong file sa lokal na network, at ang huling parameter ay ang pangalan ng iyong file.

Gumawa ako ng mga hakbang na ipinakita sa figure sa ibaba, nang mas detalyado para sa iyo, kasama ang lahat ng mga hakbang na maaaring mangyari sa mga sumusunod na kaso:

2019

28 июня '17 в 13:43 2017-06-28 13:43 Ang sagot ay ibinigay ni Alireza noong Hunyo 28 '17 sa 1:43 ng hapon 2017-06-28 13:43

Ang tanong ay malinaw na hindi tinanong. Ang dahilan dito ay ang git add ay may dalawang kahulugan:

  • magdagdag ng isang bagong file sa lugar ng pagtatanghal ng dula, pagkatapos ay kanselahin ang git rm --cached file .
  • Ang pagdaragdag ng isang file na na- modify sa isang lugar ng pagtatanghal ng dula, pagkatapos ay kanselahin ito sa git reset HEAD file .

kung may pag-aalin>

 git reset HEAD file 

Dahil sa parehong mga kaso inaasahang bagay ay inaasahan.

Babala: kung gagawin mo git rm --cached file sa file ay binago (ang file na dati nang umiiral sa repository), pagkatapos ay mabubura ang file sa git commit ! Ito ay umiiral pa rin sa iyong sistema ng file, ngunit kung may ibang tao na pulls iyong commit, ang file ay aalisin mula sa puno ng trabaho nito.

git status nagsasabi sa iyo kung ang file ay bago o nagbago :

 On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: my_new_file.txt modified: my_modified_file.txt 
69
16 янв. Ang sagot ay ibinigay ni Michael_Scharf Jan 16 2014-01-16 22:54 '14 sa 10:54 ng 2014-01-16 22:54

Kung ikaw ay gumagamit ng iyong orihinal na gumawa at hindi maaaring gumamit ng git reset, ipahayag lamang ang "Git bangkarota" at tanggalin ang .git folder at magsimula sa mga ito

58
19 нояб. Sagot na ibinigay ni Paul Betts Nobyembre 19 2009-11-19 19:39 '09 sa 19:39 2009-11-19 19:39

Tulad ng maraming iba pang mga sagot, maaari mong gamitin ang git reset

NGUNIT:

git unadd ko ang kahanga-hangang mensahe na talagang nagdaragdag ng isang git unadd command (mahusay, alias) para sa git unadd : tingnan git unadd para sa mga detalye o ..

Lamang

 git config --global alias.unadd "reset HEAD" 

Ngayon ay magagawa mo na

 git unadd foo.txt bar.txt 
54
01 окт. ang sagot ay ibinigay ng electblake 01 oct. 2010-10-01 17:54 '10 sa 17:54 2010-10-01 17:54

git remove o git rm ay maaaring gamitin para sa mga ito gamit ang - naka- --cached bandila. Subukan:

 git help rm 
45
08 дек. ang sagot ay ibinigay ng gnud 08 dec. 2008-12-08 01:00 '08 at 1:00 2008-12-08 01:00

Gamitin ang git add -i upang alisin ang mga idinagdag na mga file lamang mula sa iyong paparating na gumawa. Halimbawa:

Pagdaragdag ng isang file na hindi mo kai>

 $ git add foo $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: foo # # Untracked files: # (use "git add <file>..." to include in what will be committed) # [...]# 

Paganahin ang interactive na idagdag upang kanselahin ang iyong mga add (mga command na na-type sa git dito: "r" (bumalik), "1" (ang unang entry sa listahan ay babalik), "bumalik" upang lumabas mula sa return mode, at "q" (umalis):

 $ git add -i staged unstaged path 1: +1/-0 nothing foo *** Commands *** 1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked 5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp What now> r staged unstaged path 1: +1/-0 nothing [f]oo Revert>> 1 staged unstaged path * 1: +1/-0 nothing [f]oo Revert>> note: foo is untracked now. reverted one path *** Commands *** 1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked 5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp What now> q Bye. $ 

Ano ito! Narito ang iyong patunay na nagpapakita na ang "foo" ay bumalik sa listahan nang wa>

 $ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # [...] # foo nothing added to commit but untracked files present (use "git add" to track) $ 
41
18 апр. Sumagot ang ibinigay ni Alex North-Keys noong Abril 18 2012-04-18 15:53 '12 sa 3:53 ng hapon 2012-04-18 15:53

Dito maaari mong maiwasan ang hindi kanais-nais na problema kapag naglulunsad ng isang bagong proyekto:

  • Lumikha ng isang base na direktoryo para sa iyong bagong proyekto.
  • Patakbuhin ang git init .
  • Ngayon, gumawa ng .gitignore na file (kahit na wa>
  • Ayusin ang. Gitignore file.

Ginagawa ito ng Git na napakahirap na gawin ang git reset kung wala kang ginagawa. Kung lumikha ka ng isang maliit na paunang pasasagawa para lamang sa kapakanan nito, maaari kang git add -A at git reset maraming beses hangga't gusto mo ang lahat ay maging tama.

Ang isa pang bentahe ng pamamaraang ito ay kung nakatagpo ka ng mga problema sa pagkumpleto ng linya mamaya at kai>

  • Tandaan na ang paunang pag-aayos. Tatanggalin nito ang lahat ng iyong mga file.
  • Pagkatapos suriin muli ang iyong huling commit. Naibabalik nito ang mga sariwang kopya ng iyong mga file gamit ang kasalukuyang mga setting ng pagtatapos ng linya.
36
25 сент. ang sagot ay ibinigay ng Ryan Lundy 25 sep. 2011-09-25 02:34 '11 sa 2:34 sa 2011-09-25 02:34

Marahil ay nagbago ang Git mula nang mailagay mo ang iyong tanong.

 $> git --version git version 1.6.2.1 

Ngayon ay maaari mong subukan:

 git reset HEAD . 

Ito ay dapat na kung ano ang iyong hinahanap.

32
19 нояб. Ang sagot ay ibinigay ng Kokotte23 Nobyembre 19. 2009-11-19 19:38 '09 sa 19:38 2009-11-19 19:38

Tandaan na kung hindi mo tukuyin ang isang rebisyon, dapat mong isama ang isang separator. Isang halimbawa mula sa aking console:

 git reset <path_to_file> fatal: ambiguous argument '<path_to_file>': unknown revision or path not in the working tree. Use '--' to separate paths from revisions git reset -- <path_to_file> Unstaged changes after reset: M <path_to_file> 

(git bersyon 1.7.5.4)

32
23 янв. ang sagot ay ibinigay powlo 23 jan. 2012-01-23 19:57 '12 sa 19:57 2012-01-23 19:57

Upang alisin ang mga bagong file mula sa lugar ng pagtatanghal ng dula (at tanging sa kaso ng isang bagong file), tulad ng iminungkahing sa itaas:

 git rm --cached FILE 

Gamitin rm - naka-cache lamang para sa hindi sinasadyang idinagdag na mga bagong file.

29
22 июня '09 в 14:58 2009-06-22 14:58 ang sagot ay ibinigay sa Ran sa Hunyo 22, 2009 sa 14:58 2009-06-22 14:58

Sa pag-reset ng bawat file sa isang partikular na folder (at mga subfolder nito) maaari mong gamitin ang sumusunod na command:

 git reset * 
23
26 июля '12 в 10:50 2012-07-26 10:50 ang sagot ay ibinigay Zorayr Hulyo 26 '12 sa 10:50 2012-07-26 10:50

gamitin ang * command upang maproseso ang maramihang mga file nang sabay-sabay

 git reset HEAD *.prj git reset HEAD *.bmp git reset HEAD *gdb* 

at iba pa

23
28 авг. boulder_ruby ay ang sagot 28 aug. 2013-08-28 00:15 '13 sa 0:15 2013-08-28 00:15

I-type lamang ang git reset , babalik ito, at mukhang hindi mo naipasok ang git add . dahil ang huling gumawa. Siguraduhin na gawin ito bago.

21
19 мая '10 в 6:49 2010-05-19 06:49 Ang sagot ay ibinigay ni Donovan noong Mayo 19 '10 sa 6:49 2010-05-19 06:49

Ipagpalagay na lumikha ako ng isang bagong file newFile.txt .

2019

04 окт. ang sagot ay ibinigay ng Vidura Mudalige 04 oct. 2016-10-04 14:02 '16 sa 2:02 ng hapon 2016-10-04 14:02

Para sa isang tukoy na file:

  • git reset my_file.txt
  • git checkout my_file.txt

Para sa lahat ng idinagdag na mga file:

  • git reset
  • Git checkout.

Tandaan: binabago ng checkout ang code sa mga file at pupunta sa huling na-update (nakumpirma) na estado. reset ay hindi binabago ang mga code; binababa >

15
28 окт. ang sagot ay ibinigay ni Hasib Kamal noong Oktubre 28. 2017-10-28 09:03 '17 sa 9:03 2017-10-28 09:03

Binabago ng utos na ito ang iyong mga pagbabago:

 git reset HEAD filename.txt 

Maaari mo ring gamitin

 git add -p 

upang magdagdag ng mga bahagi ng mga file.

12
31 янв. Ang sagot ay ibinigay wallerjake Enero 31 2013-01-31 18:43 '13 sa 18:43 2013-01-31 18:43

Nagulat ako na wa>

 git add -i 

Piliin ang opsyon 3 upang magdagdag ng mga file. Sa aking kaso, madalas kong nais magdagdag ng maraming mga file, online, maaari mong gamitin ang mga numerong ito upang magdagdag ng mga file. Tumatagal lamang ito ng 4: 1,2,3,5

Upang pumili ng isang pagkakasunud-sunod, ipasok lamang 1-5 upang gawin ang lahat mula 1 hanggang 5.

Git intermediate files

12
22 окт. Tumugon kay Jonathan Oktubre 22. 2015-10-22 16:03 '15 sa 16:03 2015-10-22 16:03

Upang kanselahin ang paggamit ng git add

git reset filename

12
02 окт. sumagot na ibinigay ng Anirudh Sood 02 oct. 2016-10-02 18:54 '16 sa 18:54 2016-10-02 18:54

git add myfile.txt # idaragdag nito ang iyong file sa listahan ng gumawa

Hindi tulad ng utos na ito,

 git reset HEAD myfile.txt # this will undo it. 

Kaya, ikaw ay nasa dating estado. ang tinukoy ay muli sa listahan nang wa>

I-reset niya ang ulo gamit ang tinukoy na file. kaya kung ang iyong ulo ay wa>

8
27 июня '17 в 16:58 2017-06-27 16:58 Ang sagot ay ibinigay ni Mohideen ibn Mohammed noong Hunyo 27 '17 sa 16:58 2017-06-27 16:58
 git reset filename.txt 

Tinatanggal ang file na pinangalanang filename.txt mula sa kasalukuyang index, ang "tungkol sa magkasala" na lugar, nang wa>

8
11 июля '16 в 21:40 2016-07-11 21:40 Ang sagot ay ibinigay ni Rahul Sinha noong Hulyo 11 '16 sa 21:40 2016-07-11 21:40

Sa SourceTree, madali mong gawin ito sa pamamagitan ng gui. Maaari mong suriin kung aling command sourcetree gumagamit upang huwag paganahin ang file.

Lumikha ako ng isang bagong file at idinagdag ito sa git. Pagkatapos ay pinatay ko ito gamit ang guit SourceTree. Ito ang resulta:

Unstaging file [08/12/15 10:43]
git -c diff. mnemonicprefix = false -c core. quotepath = false -c credentials. helper = sourcetree reset -q - path / to / file / filename.java

Gumagamit ang SourceTree ng pag- reset upang huwag paganahin ang mga bagong file.

7
08 дек. ang sagot ay ibinigay ng miva2 08 dec. 2015-12-08 12:58 '15 sa 12:58 2015-12-08 12:58
 git reset filename.txt 

Tinatanggal ang file na pinangalanang filename.txt mula sa kasalukuyang index, ang "tungkol sa magkasala" na lugar, nang wa>

6
26 окт. Sumagot na ibinigay ni Joseph Mathew noong Oktubre 26 2017-10-26 21:15 '17 sa 21:15 2017-10-26 21:15
  • 1
  • 2

Iba pang mga tanong tungkol sa labels o Magtanong ng isang Tanong