Gawin ang kasalukuyang gumawa ng isang solong (unang) gumawa sa git repository?

Sa kasalukuyan, mayroon akong lokal na Git repository, na nag-click ako sa Github repository.

Ang lokal na repository ay may ~ 10 na gumagawa, at ang Gitub repository ay isang naka-synchronize na dobleng ito.

Ang nais kong gawin ay tanggalin ang LAHAT na kasaysayan ng bersyon mula sa lokal na Git repository, kaya ang mga nilalaman ng kasalukuyang repository ay ipapakita bi>

Gusto kong i-click ang mga pagbabagong ito sa Github.

Sinaliksik ko ang Git rebase, ngunit tila ito ay mas angkop para sa pag-alis ng i>

ETA: May i>

460
13 марта '12 в 14:41 2012-03-13 14:41 kaese ay naka-set Marso 13, '12 sa 2:41 2012-03-13 14:41
@ 14 sagot

Narito ang isang diskarte ng malupit na puwersa. Inaalis din nito ang configuration ng repository.

Tandaan Ito ay HINDI gumagana kung may mga submodules sa repository! Kung gumagamit ka ng submodules, dapat mong gamitin, halimbawa, isang interactive na pag-reboot.

Hakbang 1: tanggalin ang buong kasaysayan ( Siguraduhin na mayroon kang isang backup, imposible na bumalik )

 rm -rf .git 

Hakbang 2: ibalik ang Git na imbakan na may kasalukuyang nilalaman lamang

 git init git add . git commit -m "Initial commit" 

Hakbang 3: Mag-click sa GitHub.

 git remote add origin <github-uri> git push -u --force origin master 
747
13 марта '12 в 14:44 2012-03-13 14:44 Sagot ay ibinigay ni Fred Foo noong Marso 13 '12 sa 14:44 2012-03-13 14:44

Ang tanging solusyon na gumagana para sa akin (at ang mga sub-modules work) ay

 git checkout --orphan newBranch git add -A # Add all files and commit them git commit git branch -D master # Deletes the master branch git branch -m master # Rename the current branch to master git push -f origin master # Force push master branch to github git gc --aggressive --prune=all # remove the old files 
border=0

Ang pag-aalis ng .git/ palaging nagiging sanhi ng malalaking problema kapag mayroon akong mga sub-module. Ang paggamit ng git rebase --root paanuman ay nagiging sanhi ng mga salungatan para sa akin (at marami akong kasaysayan).

410
27 окт. sumagot na ibinigay sa Zeelot Oktubre 27. 2012-10-27 21:16 '12 sa 21:16 2012-10-27 21:16

Ito ang aking kanais-nais na diskarte:

 git branch new_branch_name $(echo "commit message" | git commit-tree HEAD^{tree}) 

Gumagawa ito ng isang bagong sangay na may isang solong gumawa, na magdaragdag ng lahat sa HEAD. Hindi nagbabago ang anumang bagay, kaya lubos na ligtas ito.

63
22 марта '13 в 16:53 2013-03-22 16:53 ang sagot ay ibinigay dan_waterworth Marso 22 '13 sa 16:53 2013-03-22 16:53

Ang isa pang pagpipilian na maaaring maging isang pulutong ng trabaho kung mayroon kang maraming mga gumawa ay isang interactive na rebase (kung ang iyong git bersyon ay> 1.7.12): git rebase --root -i

Kapag nagpapakita ng isang listahan ng mga gumawa sa iyong editor:

  • Palitan ang "pick" sa "reword" para sa unang gumawa
  • Baguhin ang "pick" sa "fixup" bawat iba pang mga gumawa

I-save at isara. git ay reboot.

Sa katapusan magkakaroon ka ng bagong root retainer, na isang kumbinasyon ng lahat ng mga na dumating pagkatapos nito.

Ang kalamangan ay hindi mo kai>

Kung gusto mo talagang sirain ang iyong kasaysayan, i-reset ang master para sa commit na ito at tanggalin ang lahat ng iba pang mga sanga.

26
14 марта '12 в 23:24 2012-03-14 23:24 ang sagot ay ibinigay ni Carl noong Marso 14 '12 sa 23:24 2012-03-14 23:24

Ang pagtanggal ng .git na folder ay maaaring humantong sa mga problema sa git repository. Kung gusto mong tanggalin ang iyong buong kasaysayan ng pag-aayos.

sundin ang mga hakbang na ito:

step-1 (checkout)

 git checkout --orphan latest_branch 

step-2 (idagdag ang lahat ng mga file)

 git add -A 

Hakbang 3 (Mga Pagbabago)

 git commit -am "commit message" 

hakbang-4 (Tanggalin ang sangay)

 git branch -D master 

step-5 (palitan ang pangalan ng kasalukuyang branch sa master)

 git branch -m master 

Hakbang 6 (huling hakbang, kapangyarihan upang i-update ang iyong repository)

 git push -f origin master 

!! Ngayon tamasahin ang kasaysayan ng pag-aayos!

21
14 окт. ang sagot ay ibinigay ni Shivam Srivastava noong Oktubre 14. 2017-10-14 12:08 '17 sa 12:08 2017-10-14 12:08

Variant ng ipinanuka>

I-save ang listahan ng mga di-print na mga file:

 git ls-files --others --exclude-standard > /tmp/my_untracked_files 

I-save ang configuration ng git:

 mv .git/config /tmp/ 

Pagkatapos ay sundin ang mga unang hakbang ng mga larsmans:

 rm -rf .git git init git add . 

Ibalik ang configuration:

 mv /tmp/config .git/ 

Alisin ang mga hindi pa natutukoy na mga file:

 cat /tmp/my_untracked_files | xargs -0 git rm --cached 

Pagkatapos ay ayusin:

 git commit -m "Initial commit" 

Panghuli, mag-click sa iyong repository:

 git push -u --force origin master 
14
19 апр. reply na ibinigay ng lalebarde sa Abril 19 2014-04-19 11:58 '14 sa 11:58 2014-04-19 11:58

Gumawa ng isang sangay, kopyahin ang lahat ng mga nilalaman dito, kopyahin ito, at pagkatapos ay tanggalin ang pangunahing sangay:

 git checkout --orphan newBranch; git add -A ;git commit -am 'first commit' ;git branch -D master;git branch -m master; git push -f origin master; git gc --aggressive --prune=all 
5
12 марта '17 в 17:53 2017-03-12 17:53 ang sagot ay ibinigay pratik_bhavsar Marso 12, '17 sa 17:53 2017-03-12 17:53

Maaari kang gumamit ng mababaw na mga clone (git> 1.9):

 git clone --depth depth remote-url 

Ang karagdagang pagbabasa: http://blogs.atlassian.com/2014/05/handle-big-repositories-git/

5
04 апр. ang sagot ay ibinigay ni Matthias M 04 apr. 2016-04-04 14:05 '16 sa 2:05 ng hapon 2016-04-04 14:05

Ang paraan sa ibaba ay maaaring kopyahin, kaya hindi na kai>

 git log -n1 --format=%H >.git/info/grafts git filter-branch -f rm .git/info/grafts 

Kung gusto mong linisin ito, subukan ang script:

http://sam.nipl.net/b/git-gc-all-ferocious

Isinulat ko ang isang script na "pinapatay ang kasaysayan" para sa bawat branch sa repository:

http://sam.nipl.net/b/git-kill-history

Tingnan din ang: http://sam.nipl.net/b/confirm

2
06 февр. Ang sagot ay ibinigay ni Sam Watkins noong Peb. 06. 2013-02-06 19:46 '13 sa 19:46 2013-02-06 19:46
 git for-each-ref --format='git update-ref -d %(refname)' \ refs/{heads,tags} | sh -x current=$(git commit-tree -m 'Initial commit' `git write-tree`) git update-ref -m 'Initial commit' `git symbolic-ref HEAD` $current 

Tatanggalin nito ang lahat ng mga lokal na sanga at tag, gumawa ng isang kaganapan na wa>

1
05 апр. ang sagot ay ibinigay jthill 05 Abr 2014-04-05 04:42 '14 sa 4:42 2014-04-05 04:42

Ang nais kong gawin ay tanggalin ang LAHAT na kasaysayan ng bersyon mula sa lokal na Git repository, kaya ang mga nilalaman ng kasalukuyang repository ay ipapakita bi>

Higit pang mga haka-haka sagot:

Ang git ng awtomatiko ay kumakolekta ng mga lumang gawa kung ang mga tag / branch / link ay hindi tumuturo sa kanila. Kaya, kai>

Ang mga lumang, hindi maa-access na mga gawain ay hindi na makikita muli ng sinuman maliban kung pag-aralan nila ang mga mababang-antas na mga utos ng Git. Kung sapat na ito para sa iyo, hihinto >git gc (marahil sa - --aggressive --prune=all ). Para sa isang remote na Git repository, hindi mo magagawang gawin ito maliban kung mayroon kang access sa file system.

0
04 апр. ang sagot ay ibinigay ng AnoE 04 apr. 2016-04-04 14:27 '16 sa 2:27 PM 2016-04-04 14:27

Upang gawin ito, gamitin ang command na Mababaw na I-clone git clone --depth 1 URL - ito ay i-clone lamang sa kasalukuyang repository ng HEAD

-1
23 авг. Ang sagot ay ibinigay ng kkarki 23 aug. 2017-08-23 18:55 '17 sa 6:55 ng hapon 2017-08-23 18:55

Upang alisin ang huling gumawa mula sa git, maaari ka lamang tumakbo

 git reset --hard HEAD^ 

Kung tatanggalin mo ang i>

 git reset --hard HEAD~2 

upang alisin ang huling dalawang gumawa. Maaari mong dagdagan ang numero upang mag-alis ng higit pang mga gawain.

Higit pang impormasyon dito.

Git tutoturial dito ay nagbibigay ng tulong sa pag-clear sa repository:

Gusto mong tanggalin ang file mula sa kasaysayan at idagdag ito sa. Gitignore upang matiyak na hindi ito sinasadyang paulit-ulit. Para sa aming mga halimbawa, aalisin namin ang Rakefile mula sa github gem repository.

 git clone https://github.com/defunkt/github-gem.git cd github-gem git filter-branch --force --index-filter \ 'git rm --cached --ignore-unmatch Rakefile' \ --prune-empty --tag-name-filter cat -- --all 

Ngayon na natanggal na namin ang file mula sa kasaysayan, ipaalam sa amin na hindi namin ginagawa ito nang hindi sinasadya.

 echo "Rakefile" >> .gitignore git add .gitignore git commit -m "Add Rakefile to .gitignore" 

Kung ikaw ay nasiyahan sa estado ng imbakan, kai>

 git push origin master --force 
-1
05 июня '13 в 8:41 2013-06-05 08:41 ang sagot ay ibinigay octoback Hunyo 05 '13 sa 8:41 2013-06-05 08:41

Nalutas ko ang isang katulad na problema sa pamamagitan lamang ng pag-aalis ng .git folder mula sa aking proyekto at reintegrating sa control na bersyon sa pamamagitan ng IntelliJ. Tandaan Ang .git folder ay nakatago. Maaari mo itong tingnan sa terminal na may ls -a , at pagkatapos ay tanggalin ito sa rm -rf .git .

-1
11 апр. Sumagot na ibinigay ni JB Lovell noong Abril 11 2017-04-11 21:54 '17 sa 9:54 ng hapon 2017-04-11 21:54

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