Isang gabay sa oras ng manlalakbay sa Git

May -Akda: Randy Alexander
Petsa Ng Paglikha: 28 Abril 2021
I -Update Ang Petsa: 16 Mayo 2024
Anonim
SULIT BA ANG NILE RIVER CRUISE? ASWAN papuntang LUXOR | PROS at CONS ng Nile Cruise
Video.: SULIT BA ANG NILE RIVER CRUISE? ASWAN papuntang LUXOR | PROS at CONS ng Nile Cruise

Nilalaman

Habang durog ng mga siyentista ang pangarap na maglakbay pabalik sa panahon, nag-aalok ang Git ng kontrol sa ika-apat na sukat kapag ang mga pagkakamali ng nakaraan ay kailangang maitama. Pinapayagan ng ipinamamahagi na sistema ng kontrol sa bersyon ang mga komit na mabago, itapon, muling ayusin at mabago upang ma-scrub ang kasaysayan ng isang lalagyan.

Ngunit, sundin ang mga babala ng isang karanasan sa oras na paglalakbay. Sinusunod ni Git ang batas ng causality; ang bawat komite sa isang Git na lalagyan ay hindi maipalabas na naiugnay sa gumawa bago ito. Binabago ng isang pagbabago ang nagbabago sa lahat ng mga pangako na susunod, lumilikha ng isang kahaliling katotohanan. Ang pagbabago ng nakaraan ay maaaring mapanganib at - maliban sa mga bihirang pangyayari - dapat lamang gawin kung ang mga pangyayaring binago ay hindi napansin ng iba pa. Ang mga sanga na naitulak na sa isang remote ay hindi dapat baguhin.

Sumali sa akin habang nagsisiyasat kami ng mga paraan upang muling isulat ang kasaysayan sa Git.

01. Baguhin ang kamakailang kasaysayan

Sa anumang kadahilanan, ang utak ng tao ay tila naka-wire upang matandaan ang isang bagay na mahalaga pagkatapos lamang pindutin ang pindutang 'Magpadala' sa isang email, at ang mga tamang salita ay palaging naisip pagkatapos ng isang pag-uusap ay tapos na. Gayundin, madalas kong mapagtanto na nagkamali kaagad pagkatapos gumawa ng isang nakatuon sa Git. Ang pinakaligtas at pinakakaraniwang anyo ng muling pagsulat ng kasaysayan ng Git ay upang baguhin ang pinakabagong pagtatalaga.


Ang artikulong ito ay isinulat sa isang Repository ng Git. Ang unang gumawa ay upang lumikha ng isang README na nagpapaliwanag ng layunin ng pag-iimbak.

$ git idagdag.
$ git commit -am 'Magdagdag ng README'
[master (root-commit) 6261ead] Magdagdag ng README
2 mga file ang nagbago, 12 mga insert (+)
lumikha mode 100644 README.md
lumikha mode 100644 artikulo.md

Oops, matapos na gumawa, napagtanto kong nakatuon ako artikulo.md, na kung saan ay ilang mga tala lamang at ang unang ilang mga pangungusap ng pagpapakilala. Hindi ko pa balak na gawin ang file na iyon, kaya alisin natin ito mula sa kasaysayan.

$ git rm --cached article.md
rm ’artikulo.md’

Ang - naka-cache pagtatalo sa git rm Sinasabi kay Git na i-entablado ang pagtanggal ng file, ngunit upang hindi talaga tanggalin ang file mula sa filesystem. Kung nais mo ring tanggalin ang file, iwanan lamang ang pagtatalo na iyon.

Maaari rin kaming gumawa ng iba pang mga pagbabago tulad ng gagawin namin kung makakalikha kami ng isa pang nakatuon, tulad ng paggawa ng mga pag-edit sa README.md at pagtatanghal ng mga ito sa git idagdag. Baguhin ang dating nagawa sa pamamagitan ng pagpasa ng --magpahiwatig watawat sa git gumawa:


$ git commit --amend
[master 667f8c9] Magdagdag ng README
Binago ang 1 file, 7 mga insert (+)
lumikha mode 100644 README.md

Magbubukas ang Git ng isang editor upang pahintulutan ang pag-edit ng nakaraang mensahe na gumawa. Ipinapakita ngayon ng Git log na mayroon pa ring iisa, at ang pangako na iyon ay mayroon lamang README.md.

$ git log --oneline --stat
667f8c9 Idagdag ang README
README.md | 7 +++++++
Binago ang 1 file, 7 mga insert (+)

Ipagawa natin ang artikulong ito ngayon na nagawa ang pag-unlad.

$ git magdagdag ng article.md $ git gumawa -m 'unang draft ng seksyon ng pag-amyenda' [master 8dbf5d5] unang draft ng susubukan ang seksyon 1 na file na nabago, 47 mga insertion (+) lumikha mode 100644 article.md

02. I-undo ang kamakailang kasaysayan

Minsan, ang paggawa ay may napakaraming mga pagkakamali na mas madaling i-undo lang ito. Marahil ay nakatuon ito sa maling sangay, o isang direktoryo ng mga hindi gustong file ang aksidenteng naidagdag.

$ git reset HEAD ^

Sinasabi nito kay Git na mag-alis sa dating gumawa, ngunit panatilihing lokal ang mga pagbabagong ipinakilala ng komit na iyon. git reset ay makapangyarihan at maaaring mapanirang kung hindi wastong ginamit. Ito ay nagkakahalaga ng pagbabasa nang higit pa tungkol dito sa git-scm.com.


Ipinapakita ngayon ng log na ang pinakabagong gumawa ay nawala, ngunit artikulo.md binago pa rin.

$ git log --oneline
667f8c9 Idagdag ang README

$ git status -s
M artikulo.md

Mula dito, ang mga pagbabago ay maaaring isagawa sa ibang sangay, itinago, itinapon o binago at muling inirekomenda.

03. Panatilihin ang isang malinis na kasaysayan

Kung nagamit mo ang Git sa isang koponan, kung gayon walang duda na nakakita ka ng pagtulak na tinanggihan.

$ git push origin master
Upang [email protected]: bkeepers / git-history.git
! [tinanggihan] master -> master (non-fast-forward)
error: nabigong itulak ang ilang mga ref sa '[email protected]: bkeepers / git-history.git'
pahiwatig: Ang mga pag-update ay tinanggihan dahil ang dulo ng iyong kasalukuyang sangay ay nasa likuran
hint: ang remote na katapat nito. Pagsamahin ang mga malalayong pagbabago (hal. 'Git pull')
hint: bago itulak ulit.
pahiwatig: Tingnan ang 'Tandaan tungkol sa mga mabilis na pasulong' sa 'git push --help' para sa mga detalye.

Habang ang mensahe na ito ay mukhang malaki at nakakatakot, talagang kapaki-pakinabang ito. Sinasabi sa amin ng mga pahiwatig na simula nang magsimula kami sa aming trabaho, ang isa sa mga miyembro ng aming koponan ay nagtulak ng mga pagbabago at kailangan naming makuha ang mga ito, karaniwang sa pamamagitan ng pagtakbo git hilahin. Inirekomenda rin ng pahiwatig na suriin ang tala tungkol sa 'mabilis na pasulong' sa mga Git na dokumento. Pangalawa ko sa rekomendasyong iyon.

Tumatakbo git hilahin kukunin ang mga malalayong pagbabago at lilikha ng isang bagong pangako na pagsasama sa mga ito sa aming mga lokal na pagbabago. Habang walang mali sa pagsasama ng pagsama, nagdaragdag ito ng hindi kinakailangang pagiging kumplikado sa kasaysayan ng rebisyon.

$ git log --decorate --graph --oneline
* aaf6c0c (HEAD, master) Pagsamahin ang sangay na 'master' ng pinagmulan
|
| * 9f7e4de Update README
* | 00165a8 unang draft ng seksyon ng susog
|/
* 667f8c9 (pinagmulan / i-reset) Idagdag ang README

Ang gagawing mas malinaw at nababasa ang aming kasaysayan ay isang paraan ng pagkuha ng aming mga pagbabago at ilapat ang mga ito sa tuktok ng mga malalayong pagbabago, tulad nito:

$ git pull --bawi muli ang pinagmulan ng master
Una, pag-rewind ng ulo upang i-replay ang iyong trabaho sa tuktok nito ...
Paglalapat: i-update ang README

Ginagawa nitong lumitaw ang kasaysayan ng rebisyon na para bang ang pagbabago ay nagawa pagkatapos ng isang miyembro ng koponan na gumawa ng kanilang pangako.

$ git log --decorate --graph --oneline
* 8dbf5d5 unang draft ng seksyon ng susog
* c408281 i-update ang README
* 667f8c9 Idagdag ang README

Maaari mong makita na ang aming kasaysayan sa Git ngayon ay mas malinis at mas madaling i-scan.

Maliban kung ang isang repository ay naitulak sa maraming mga remote, ang muling pag-urong kapag ang paghila ay halos palaging isang magandang ideya. Na-configure ko ang Git upang awtomatikong mag-rebate.

$ git config --global branch.autosetuprebase palagi

Ang pagpapanatiling malinis sa kasaysayan ng rebisyon ay maaaring mukhang mababaw, ngunit malaki ang naitutulong nito sa pamamahala ng isang malaking proyekto.

04. Linisin ang kamakailang kasaysayan

Minsan hindi ito malinaw hanggang pagkatapos ng ilang maling hakbang na mayroong mas mahusay na landas. Ginagawang madali ng kakayahang umangkop ni Git upang lumikha ng mga checkpoint sa daan, na nag-aalok ng isang punto upang bumalik kung nagkamali ang mga bagay.

Sa aking pang-araw-araw na pag-unlad, nangangako ako nang madalas hangga't maaari. Anumang oras na naiisip ko sa sarili ko, "OK, tapos na iyan, ngayon ano?", Nakatuon ako. Habang humahantong ito sa isang kasaysayan ng rebisyon na tumpak na sumasalamin sa pagkakasunud-sunod ng mga kaganapan, ang ingay ng maraming maliliit na mga pangako ay maaaring aktwal na hadlangan ang pagpapanatili ng malalaking proyekto. Kaya't sa sandaling handa na akong ibahagi ang aking mga pagbabago sa aking koponan, sinusuri ko ang aking hindi nai-publish na mga pangako at linisin ang mga ito.

Pinapayagan ng isang interactive rebase na i-edit, mai-squash nang sama-sama o ganap na alisin mula sa kamakailang kasaysayan ng isang sangay.

Habang sinusuri ang aking pag-unlad sa artikulong ito, natuklasan ko ang ilang nakakahiyang mga typo. Dahil ang repository ay hindi pa naibabahagi sa sinuman, tinakpan ko ang aking mga track sa pamamagitan ng pag-aayos ng mga typo sa orihinal na pangako. Napanatili ko ang aking orihinal na pagkakamali, upang maaari mong sundin sa pamamagitan ng pag-check sa sangay ng typos ng imbakan.

Una, lumikha ako ng dalawang bagong komit upang ayusin ang mga typo.

$ git log --oneline
7445019 Ayusin ang maling pagbaybay ng susog
b0377f9 Ayusin ang typo sa pamagat
b1cdd72 unang draft ng paghila - rebase
2fbe35b unang draft ng pag-reset
7bb9109 unang draft ng seksyon ng susog
667f8c9 Idagdag ang README

Itala ang pangako na kailangang maayos. Parehong mga typo ay mula sa gumawa 7bb9109, unang draft ng seksyon ng susog. Simulan ang rebase sa rebisyon bago:

$ git rebase -i 7bb9109 ^

Bubuksan ni Git ang editor kasama ang listahan ng mga commits at isang napaka-kapaki-pakinabang na mensahe.

pumili ng 7bb9109 unang draft ng seksyon ng susog
pumili ng 2fbe35b unang draft ng pag-reset
pumili ng b1cdd72 unang draft ng paghila - rebase
pumili ng b0377f9 Ayusin ang typo sa pamagat
pumili ng 7445019 Ayusin ang maling pagbaybay ng susog

# Rebase 667f8c9..7445019 papunta sa 667f8c9
#
# Mga Utos:
# p, pick = use commit
# r, reword = gumamit ng gumawa, ngunit i-edit ang gumawa ng mensahe
# e, i-edit = gamitin ang gumawa, ngunit huminto para sa pag-amyenda
# s, kalabasa = gumamit ng gumawa, ngunit matunaw sa nakaraang gumawa
# f, pag-aayos = tulad ng "kalabasa", ngunit itapon ang mensahe sa pag-log ng ito
# x, exec = patakbuhin ang utos (ang natitirang linya) gamit ang shell
#
# Ang mga linyang ito ay maaaring mag-order muli; sila ay naisakatuparan mula sa itaas hanggang sa ibaba.
#
# Kung aalisin mo ang isang linya dito AY MAWAWALA ANG KOMITONG IYON.
#
# Gayunpaman, kung aalisin mo ang lahat, ang muling pagbawas ay aalisin.
#
# Tandaan na ang mga walang laman na paggawang ay nai-comment

Tulad ng ipinaliwanag ng tala, ang mga commit ay maaaring muling ayusin upang mabago ang kanilang order, o Pumili maaaring mabago sa isa sa iba pang mga utos.

pumili ng 7bb9109 unang draft ng seksyon ng susog
ayusin ang b0377f9 Ayusin ang typo sa pamagat
pag-aayos 7445019 Ayusin ang maling pagbaybay ng susog
pumili ng 2fbe35b unang draft ng pag-reset
pumili ng b1cdd72 unang draft ng paghila - rebase

Inilipat ko ang dalawang pag-aayos ng typo sa pagkatapos lamang ng paggawa kung saan ipinakilala at binago ang pick iayos upang matunaw ang mga ito sa orihinal na gumawa. Pagkatapos i-save at isara ang editor, ilalapat ni Git ang mga pagbabago:

[hiwalay HEAD 00165a8] unang draft ng seksyon ng susog
Binago ang 1 file, 47 na insert (+)
lumikha mode 100644 artikulo.md
Matagumpay na na-rebased at na-update ang mga ref / ulo / master.

Ipinapakita ng log na ang mga pag-aayos ng typo commits ay wala na ngayon. Ang mga pag-aayos ay inilapat sa orihinal na mga pangako at walang katibayan ng aking hindi magandang pagbaybay (sa sangay na ito).

$ git log --oneline
4787614 unang draft ng paghila - rebase
ee719e9 unang draft ng pag-reset
00165a8 unang draft ng seksyon ng susog
667f8c9 Idagdag ang README

Gumana ang rebase na ito nang walang anumang iba pang pakikipag-ugnay, ngunit paminsan-minsan ang isang rebase ay mangangailangan ng manu-manong mga pag-aayos para sa mga pagsalungat sa pagsasama. Kung mangyari iyan, huwag mag-freak out. Basahin lamang ang mga mensahe. Karaniwang makakatulong sa iyo ang Git na makawala sa iyo ng isang bind.

05. Isulat muli ang lahat ng kasaysayan

Ang lahat ng mga utos na Git na napagmasdan natin sa ngayon ay kapaki-pakinabang para sa pagbabago ng mga kamakailang paggawa, ngunit kung minsan kinakailangan ang mas matinding mga hakbang, maging upang alisin ang mga sensitibo o napakalaking mga file, o upang gawing mas madaling pamahalaan ang isang proyekto.

git filter-branch sumusuporta sa isang kamay na puno ng mga pasadyang filter na maaaring muling isulat ang kasaysayan ng rebisyon para sa isang saklaw ng mga commits.

Ang aking unang lehitimong paggamit ng git filter-branch ay nasa isang malaking proyekto kung saan ang server at ang kliyente ay pareho sa parehong lalagyan. Tulad ng maraming mga tao ay naidagdag sa koponan, at ang mga pag-igting sa pagitan ng mga hipsters at leeg-balbas ay tumaas, naging malinaw na ang dalawang repository ay magiging mas naaangkop.

Ang isang simpleng solusyon ay ang pag-clone ng imbakan ng dalawang beses, tanggalin ang hindi kinakailangang mga file at ilipat ang natitirang mga file sa paligid. Ngunit nag-iiwan ito ng dalawang repository na may mga duplicate na kasaysayan na tumatagal ng hindi kinakailangang puwang. Sa halip, na-clone namin ang lalagyan ng dalawang beses, at ginamit ang --subdirectory-filter upang lumikha ng dalawang bagong repository na naglalaman lamang ng mga pagbabago para sa mga kaugnay na bahagi ng application.

$ git rebase -i 7bb9109 ^

Maraming mga tao ang gumagamit ng iba't ibang mga email address para sa mga personal at proyekto sa trabaho, na maaaring madaling magresulta sa mga pag-komit sa isang lalagyan gamit ang maling email address. Ang -env-filter maaaring mabago ang pangunahing metadata tungkol sa isang nakatuon, tulad ng impormasyon ng may-akda o ang petsa ng pagbibigay.

$ git filter-branch --env-filter ’
kung [$ GIT_AUTHOR_EMAIL = [email protected]];
pagkatapos [email protected];
fi; i-export ang GIT_AUTHOR_EMAIL ’
Isulat muli ang f853027b7979756bab7146d3bb34d8829b81a884 (8/8)
Ang mga ref 'ref / head / master' ay muling isinulat

Ipagpalagay na maaga pa sa isang proyekto, ang isang tao ay gumawa ng ilang napakalaking mga assets, at ngayon lahat ng nag-clone ng repository ay kailangang maghintay para mag-download ang mga assets na iyon. O baka ikaw ay open-sourcing ng isang proyekto na may ilang sensitibong data na nakaimbak dito.

$ git filter-branch --index-filter ’git rm -r --cached --ignore-unmatch docs / disenyo’
--prune-walang laman --tag-name-filter cat - --all

Ang lahat ng mga sumusunod na pagbabago ay muling susulat ng buong kasaysayan ng isang imbakan, mahalagang ginagawa itong isang bagong lalagyan. Ang pagtulak sa parehong remote na ginamit nang orihinal ay tatanggihan.

$ git push
! [tinanggihan] master -> master (non-fast-forward)

Posibleng pilitin ang Git na itulak ang lahat ng mga pagbabago sa isang umiiral na remote, ngunit tandaan na maaari itong magkaroon ng masamang epekto para sa lahat na nagtatrabaho sa proyekto.

$ git push --force --all --tags

06. Kapangyarihan at kakayahang umangkop

Ang makapangyarihang mga tampok ng Git, matinding kakayahang umangkop at madalas na hindi nag-uutos na linya ng utos ay maaaring mukhang napakalaki, ngunit ang paglalaan ng oras upang malaman at mag-eksperimento ay isang mahalagang pamumuhunan. Kapag may pag-aalinlangan, pumasa --tulong sa anumang utos ng Git upang matuto nang higit pa. Ang pag-unawa sa kung paano at kailan muling susulat ang kasaysayan ng rebisyon ay magbibigay sa iyo ng kumpletong kontrol sa iyong mga proyekto at gawing mas madaling pamahalaan ang mga ito.

Ginamit ang imahe sa kagandahang-loob ng JohnGoode sa ilalim ng Creative Commons Licensing

Ang Brandon Keepers ay isang tagagawa at breaker ng mga bagay sa GitHub na nagtatrabaho halos sa Speaker Deck. Kapag ang kanyang mukha ay hindi madilim ng isang computer screen, mahahanap mo siya na may libro sa kanyang mga kamay, naglalaro ng raketball o basketball, tumatakbo kasama ang kanyang aso, o nasisiyahan sa masarap na pagkain at inumin kasama ng kanyang asawa.

Nagustuhan ito? Basahin ang mga ito!

  • Paano bumuo ng isang app: subukan ang mahusay na mga tutorial na ito
  • Magagamit ang libreng graphic design software sa iyo ngayon!
  • Napili ng napili ng tutorial ng Wordpress
Popular.
Mga Setting ng BIOS / UEFI: Paano Magtakda ng BIOS sa Boot mula sa CD / DVD
Magbasa Pa

Mga Setting ng BIOS / UEFI: Paano Magtakda ng BIOS sa Boot mula sa CD / DVD

Ang BIO ay iang hanay ng tagubilin na makakatulong a pagkontrol a mga pagpapatakbo ng input at output. a madaling abi, maaari nating abihin na ang BIO ay nag-et up ng computer at BOOT ang operating yt...
Nangungunang 3 ZIP File Crackers Password
Magbasa Pa

Nangungunang 3 ZIP File Crackers Password

Karamihan a atin ay ginagamit upang i-archive ang aming mga file a format na ZIP upang makatipid a epayo at magpatuloy a iang hakbang a pamamagitan ng pag-lock a kanila gamit ang iang paword. Ma madal...
Paano Burahin ang iPad nang walang iCloud Password 2020 Nai-update
Magbasa Pa

Paano Burahin ang iPad nang walang iCloud Password 2020 Nai-update

Ang artikulong ito, gagabayan ka namin a kung paano makamit ang iPad nang walang paword a iCloud dahil maraming mga gumagamit ang hindi na matandaan ang pacode. a pamamagitan ng pag-reet ng factory a ...