Alisin ang mga file mula sa Git commit

Ginagamit ko ang git at gumawa ako ng i>

 git commit -a 

Kalaunan natuklasan ko na ang file ay nagkamali na idinagdag sa gumawa.

Paano tanggalin ang isang file mula sa huling gumawa?

849
18 сент. Ang Mojoy ay nakatakda sa Septiyembre 18. 2012-09-18 19:59 '12 sa 7:59 ng gabi 2012-09-18 19:59
@ 19 tugon

Sa tingin ko na ang iba pang mga sagot dito ay hindi tama, dahil ito ay tungkol sa paglipat ng mga mali ang naayos na mga file pabalik sa intermediate na lugar mula sa nakaraang pagkapirmi nang hindi pag-undo ang mga pagbabago na ginawa nito. Magagawa ito bi>

 git reset --soft HEAD^ 

o

 git reset --soft HEAD~1 

Pagkatapos ay i-reset ang mga file ng basura upang iwanan ang mga ito ng gumawa:

 git reset HEAD path/to/unwanted_file 

Ngayon subukan muli, maaari mong muling gamitin ang parehong mensahe ng gumawa:

 git commit -c ORIG_HEAD 
1673
10 марта '13 в 13:56 2013-03-10 13:56 ang sagot ay ibinigay juzzlin Marso 10 '13 sa 13:56 2013-03-10 13:56

Pansin ! Kung nais mong tanggalin ang isang file mula sa iyong nakaraang commit at i-save ito sa disk, basahin ang sagot juzzlin nang kaunti pa.

Kung ito ang iyong huling gumawa at gusto mong lubos na alisin ang file mula sa iyong lokal at remote na repository , maaari kang:

  • tanggalin ang file git rm <file>
  • gumawa ng flag ng pagbabago: git commit --amend
border=0

Sinasabi ng flag ng pag-aayos ang git upang ayusin muli, ngunit sa "pagsamahin" (hindi sa kahulugan ng pagsasama ng dalawang sangay) ayusin ito sa huling pag-aayos.

At upang sabihin ito tulad ng yo, ang rm utos sa git ay kung ano mismo ang ginagawa!

168
18 сент. sumagot na ibinigay ni CharlesB Septiyembre 18. 2012-09-18 20:22 '12 sa 08:22 2012-09-18 20:22

Iminumungkahi ang mga kasalukuyang sagot na tanggalin ang mga hindi gustong file mula sa huling .

Kung nais mong tanggalin ang mga hindi kinakai>lumang gumawa (kahit na pinindot) at ayaw mong lumikha ng isang bagong gumawa, na hindi kinakai>

1.

Hanapin ang gumawa na gusto mong matugtog ang file.

 git checkout <commit_id> <path_to_file> 

Maaari mong gawin ito nang maraming beses kung nais mong tanggalin ang maraming mga file.

2

 git commit -am "remove unwanted files" 

3

Hanapin ang commit_id gumawa kung saan ang mga file ay naidagdag nang mali , sabihin, "35c23c2" dito

 git rebase 35c23c2~1 -i // notice: "~1" is necessary 

Ang utos na ito ay bubukas ang editor ayon sa iyong mga setting. Ang default ay vim.

Ilipat ang huling gumawa, na dapat ay "tanggalin ang mga hindi kinakai>fixup :

 pick 35c23c2 the first commit fixup 0d78b28 remove unwanted files 

Pagkatapos i-save ang file dapat kang maging multa.

Upang tapusin ang:

 git push -f 

Kung sa kasamaang-palad ay nakakakuha ka ng mga salungatan, dapat mong maresolba nang manu-mano ito

75
27 янв. Sagutan ni Brian Jan. 27 2015-01-27 18:24 '15 sa 18:24 2015-01-27 18:24

Ang pagtanggal ng isang file na may rm ay magtatanggal nito!

Palagi mong idagdag ang isang commit sa git sa halip na tanggalin ito, kaya sa pagkakataong ito ibabalik mo ang file sa estado na ito ay nasa bago ang unang gumawa (maaaring ito ay ang pagkawa>

Upang ibalik ang isang file sa nakaraang estado nito:

  git checkout <commit_id> <path_to_file> 

o ibalik ito sa estado sa remote HEAD:

  git checkout origin/master <path_to_file> 

pagkatapos ay baguhin ang gumawa at dapat mong makita na ang file ay nawala mula sa listahan (at hindi tinanggal mula sa iyong disk!)

30
28 янв. Si Bob Flannigon ay nag-post ng isang tugon sa Enero 28 2013-01-28 17:00 '13 sa 17:00 2013-01-28 17:00

Kung hindi mo nai-click ang mga pagbabago sa server, maaari mong gamitin

 git reset --soft HEAD~1 

I-reset nito ang lahat ng mga pagbabago at bumalik sa isang gumawa.

Kung na-click mo ang iyong mga pagbabago, sundin ang mga hakbang sa ibaba tulad ng ipinahiwatig sa @ CharlesSB

28
18 сент. Ang sagot ay ibinigay ng Paritosh Singh 18 sep . 2012-09-18 21:28 '12 sa 21:28 2012-09-18 21:28
 git checkout HEAD~ path/to/file git commit --amend 
27
23 авг. Sumagot na ibinigay ni Denis Shchepetov noong Agosto 23 2013-08-23 22:01 '13 sa 10:01 ng 2013-08-23 22:01

Tulad ng ipinakita na tinatanggap na sagot, maaari mong gawin ito sa pamamagitan ng pag-drop sa buong commit. Ngunit ito ay isang mahirap na diskarte.
Ang isang mas malinis na paraan upang gawin ito ay upang i-save ang gumawa at alisin lamang ang binagong mga file mula rito.

 git reset HEAD^ -- path/to/file git commit --amend --no-edit 

git reset ay kukuha ng file sa parehong paraan tulad ng sa nakaraang gumawa, at bubuuin ito sa index. Ang file sa direktoryo ng nagtatrabaho ay hindi hinawakan.
Pagkatapos git commit aayos at kinukuha ang index sa kasalukuyang gumawa.

Talagang tinatanggap nito ang bersyon ng file na nasa nakaraang gumawa at idinagdag ito sa kasalukuyang gumawa. Hindi nito binabago ang network, kaya ang file ay epektibong inalis mula sa commit.

25
25 февр. Sumagot na ibinigay ni Patrick noong Pebrero 25 2017-02-25 03:06 '17 sa 3:06 2017-02-25 03:06

Ang mga sumusunod ay hindi paganahin ang file na nilalayon mo, na kung ano ang kai>

 git reset HEAD^ /path/to/file 

Makakakita ka ng isang bagay tulad ng sumusunod ...

Mga Pagbabago na kai>

binago: / path / to / file

Ang mga pagbabago ay hindi ginawa upang gumawa: (gamitin ang "git add ..." upang i-update kung ano ang gagawin) (gamitin ang "git checkout -..." upang itapon ang mga pagbabago sa direktoryo ng nagtatrabaho)

binago: / path / to / file

  • Ang mga pagbabagong kai>
  • "Ang mga pagbabago ay hindi naihatid para gumawa" ay ang pagbabagong ginawa mo at ang kasalukuyang estado ng file

Sa puntong ito, maaari mong gawin ang anumang nais mo sa file, halimbawa, i-reset sa ibang bersyon.

Kapag handa ka nang gumawa:

 git commit --amend -a 

o (kung mayroon kang ibang mga pagbabago na ayaw mong gawin)

 git commit add /path/to/file git commit --amend 
24
07 дек. ang sagot ay ibinigay ThatsAMorais 07 dec. 2014-12-07 10:13 '14 sa 10:13 2014-12-07 10:13

Kung nais mong i-save ang gumawa (marahil ay ginugol mo na ang i>

 git checkout origin/<remote-branch> <filename> git commit --amend 
8
17 июня '13 в 23:07 2013-06-17 23:07 ang sagot ay ibinigay mattexx Hunyo 17 '13 sa 23:07 2013-06-17 23:07
 git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file> git commit -m "removed unwanted file from git" 

aalis ka sa isang lokal na file. Kung ayaw mo rin ang file na maging lokal, maaari mong laktawan ang - opsyon na naka-cache.

Kung ang lahat ng trabaho ay nasa iyong lokal na sangay, kai>

 git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file> git commit --squash <commit_id> git add <file_to_remove_from_commit_<commit_id>_which_added_file> git commit -m "brand new file!" git rebase --interactive <commit_id>^ 

at maaari mong madaling tapusin ang pag-reboot nang hindi na kabisaduhin ang mas kumplikadong mga utos o ayusin ang isang mensahe o ipasok ang parehong numero.

6
23 февр. Ang sagot ay ibinigay ni Bryan Buckley noong Pebrero 23. 2016-02-23 09:22 '16 sa 9:22 ng 2016-02-23 09:22

Ang paggamit ng git GUI ay maaaring gawing mas madaling tanggalin ang isang file mula sa isang nakaraang gumawa.

Ipagpapalagay na ito ay hindi isang nakabahagi na sangay, at hindi mo naisip na muling isulat ang kuwento , pagkatapos ay magsagawa ng:

 git gui citool --amend 

Maaari mong kanselahin ang file na nagkamali, at pagkatapos ay i-click ang "Commit".

2019

6
18 мая '15 в 22:50 2015-05-18 22:50 ang sagot ay ibinigay ng JDiMatteo Mayo 18, '15 sa 10:50 ng hapon 2015-05-18 22:50

Patakbuhin ang isang pagkakasunod-sunod ng mga sumusunod na utos:

 //to remove the last commit, but preserve changes git reset --soft HEAD~1 //to remove unneded file from the staging area git reset HEAD `<your file>` //finally make a new commit git commit -m 'Your message' 
5
10 сент. ang sagot ay ibinigay ng Sergey Onishchenko 10 Septiyembre . 2015-09-10 14:51 '15 sa 14:51 2015-09-10 14:51

Ipapaliwanag ko sa iyo ang isang halimbawa. Hayaan ang A, B, C ay magkakasunod na magkasunod na mga pag-aayos. Naglalaman ang Commit B ng isang file na hindi dapat ginawa.

  • $ git log # take A commmit_id
  • $ git rebase -i "A_ID"
  • baguhin ang gumawa sa 'e' sa vim rebase
  • $ git rm unwanted_file
  • $ git rebase magpatuloy
  • $ git push -force
3
17 авг. Tumugon na ibinigay ni Moaz Rashad Agosto 17. 2017-08-17 12:52 '17 sa 12:52 2017-08-17 12:52

Gusto ko >

 git reset --soft HEAD^ git checkout origin/master <filepath> 

Hooray!

3
25 мая '16 в 18:24 2016-05-25 18:24 ang sagot ay ibinigay ng andrepo Mayo 25, '16 sa 18:24 2016-05-25 18:24

Isang bagay na nagtrabaho para sa akin, ngunit sa tingin ko pa rin na dapat magkaroon ng isang mas mahusay na solusyon:

 $ git revert <commit_id> $ git reset HEAD~1 --hard 

Basta iwanan ang pagbabago na gusto mong kanselahin sa isa pang gumawa, lagyan ng tsek ang iba.

 $ git commit --amend // or stash and rebase to <commit_id> to amend changes 
2
14 авг. sagot na ibinigay ng saiyancoder 14 aug. 2014-08-14 08:34 '14 sa 8:34 ng umaga 2014-08-14 08:34

Sa katunayan, sa tingin ko ang mas mabilis at mas madaling paraan ay ang paggamit ng interactive git mode.

 git rebase -i head~1 

(o ulo ~ 4, kung gaano ninyo gustong pumunta)

at pagkatapos ay gamitin ang 'i-edit' sa halip na 'pumili'. Hindi ko naunawaan kung gaano kalakas ang pag-edit.

https://www.youtube.com/watch?v=2dQosJaLN18

Sana ay masiyahan ka dito.

1
19 мая '16 в 23:58 2016-05-19 23:58 ang sagot ay ibinigay ni Matt Mayo 19, '16 sa 23:58 2016-05-19 23:58

Nagkaroon ng parehong problema kapag may mga pagbabago ako sa lokal na sangay, kung saan nais kong ibalik lamang ang isang file. Ano ang nagtrabaho para sa akin -

( tampok / target_branch ) kung saan mayroon akong lahat ng aking mga pagbabago, kabi>

( pinagmulan / tampok / target_branch ) ay ang malayong sangay na gusto kong gumawa ng mga pagbabago sa)

(ang function / yugto ay ang aking pansamanta>

  • Lumikha ng isang lokal na sangay mula sa aking pinagmulan / tampok / target_branch - tinatawag itong isang function / statement

  • Ang pagsasama ng aking lokal na local na tampok / target_branch branch na may branch

  • Ang function / statement ay naka- check, pagkatapos ay i- reset ang git --soft ORIG_HEAD (ngayon lahat ng mga pagbabago mula sa function / stage "ay maayos, ngunit hindi naayos.)

  • Uninstalled file na dati akong naka-check sa mga hindi kinakai>

  • Binago ang sangay ng upstream para sa function / origin / feature / target_branch

  • Mabawasan ang natitirang mga pagbabagong pagbabago at nag-click sa salungat sa agos sa aking remote source / function / target_branch

1
23 янв. ang sagot ay ibinigay ng user1201303 23 jan. 2017-01-23 07:13 '17 sa 7:13 2017-01-23 07:13

Kung hindi mo pa pinindot ang commit, madali na malulutas ng GitHub Desktop ang problemang ito:

  • Piliin ang imbakan → I-undo ang huling gumawa.
  • Alisin sa pagkakapili ang file na iyong idinagdag na nagkamali. Ang iyong nakaraang mensahe ng gumawa ay nasa kahon ng dialogo.
  • Pindutin ang hold button!
1
14 марта '17 в 22:41 2017-03-14 22:41 ang sagot ay ibinigay ni Ron noong Marso 14 '17 sa 22:41 2017-03-14 22:41

Kung hindi mo na kai>

 git rm file git commit --amend git push origin branch 
0
29 сент. ang sagot ay ibinigay tven 29 sep . 2017-09-29 00:49 '17 sa 0:49 2017-09-29 00:49

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