From 263e91068bf2996797b3e0d538fd6e407c25dfc0 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 24 Feb 2026 21:09:26 +0000 Subject: [PATCH 1/7] Add AGENTS.md with cloud-specific development instructions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rafael Corrêa Gomes --- AGENTS.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..224c44f --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,21 @@ +## Cursor Cloud specific instructions + +This is a static HTML/CSS website (no build tools, no package managers, no tests). It serves as a Git commands reference in Portuguese, hosted on GitHub Pages. + +### Running locally + +Serve files with any static HTTP server from the repo root: + +``` +python3 -m http.server 8000 +``` + +Then open `http://localhost:8000/` in a browser. + +### Linting + +There are no project-defined lint or test scripts. HTML can be validated with `tidy -q -e index.html`. The only known warning is an empty `
  • ` on line 1024 of `index.html` (pre-existing). + +### CI + +The GitHub Actions workflow (`.github/workflows/jekyll-docker.yml`) runs a Jekyll build in a Docker container, but the site itself uses `.nojekyll` and is served as raw static files on GitHub Pages. From a4e9f1e8f97251c4f697ce4f1d60a492ddf1c32e Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 24 Feb 2026 21:38:55 +0000 Subject: [PATCH 2/7] Refactor to Jekyll: split monolithic HTML into layouts, includes, and data files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add _config.yml with centralized site metadata - Add Gemfile with Jekyll 4.x and jekyll-seo-tag - Add _layouts/default.html as base HTML layout - Add _includes/ for reusable partials (head, header, nav, footer, scripts) - Add _includes/sections/ with 13 content section files - Add _data/navigation.yml to drive sidebar navigation via Liquid - Refactor index.html to use Jekyll front matter and includes - Update .gitignore for Jekyll build artifacts - Update AGENTS.md with Jekyll-specific instructions Co-authored-by: Rafael Corrêa Gomes --- .bundle/config | 2 + .gitignore | 7 +- AGENTS.md | 35 +- Gemfile | 7 + Gemfile.lock | 236 ++++ _config.yml | 27 + _data/navigation.yml | 202 +++ _includes/footer.html | 19 + _includes/head.html | 68 + _includes/header.html | 20 + _includes/nav.html | 27 + _includes/scripts.html | 14 + _includes/sections/administracao.html | 25 + _includes/sections/basico.html | 193 +++ _includes/sections/branch-e-merge.html | 141 ++ _includes/sections/canalizacao-de-codigo.html | 52 + .../sections/compartilhar-e-atualizar.html | 65 + _includes/sections/criando-o-projeto.html | 63 + _includes/sections/debugando.html | 13 + _includes/sections/email.html | 19 + _includes/sections/inspecao-e-comparacao.html | 19 + .../sections/instalando-e-configurando.html | 99 ++ _includes/sections/pacotes.html | 19 + _includes/sections/servidor.html | 10 + _includes/sections/sistemas-externos.html | 10 + _layouts/default.html | 18 + index.html | 1142 +---------------- 27 files changed, 1442 insertions(+), 1110 deletions(-) create mode 100644 .bundle/config create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 _config.yml create mode 100644 _data/navigation.yml create mode 100644 _includes/footer.html create mode 100644 _includes/head.html create mode 100644 _includes/header.html create mode 100644 _includes/nav.html create mode 100644 _includes/scripts.html create mode 100644 _includes/sections/administracao.html create mode 100644 _includes/sections/basico.html create mode 100644 _includes/sections/branch-e-merge.html create mode 100644 _includes/sections/canalizacao-de-codigo.html create mode 100644 _includes/sections/compartilhar-e-atualizar.html create mode 100644 _includes/sections/criando-o-projeto.html create mode 100644 _includes/sections/debugando.html create mode 100644 _includes/sections/email.html create mode 100644 _includes/sections/inspecao-e-comparacao.html create mode 100644 _includes/sections/instalando-e-configurando.html create mode 100644 _includes/sections/pacotes.html create mode 100644 _includes/sections/servidor.html create mode 100644 _includes/sections/sistemas-externos.html create mode 100644 _layouts/default.html diff --git a/.bundle/config b/.bundle/config new file mode 100644 index 0000000..2369228 --- /dev/null +++ b/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_PATH: "vendor/bundle" diff --git a/.gitignore b/.gitignore index 723ef36..8a1aad3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,6 @@ -.idea \ No newline at end of file +.idea +_site/ +.sass-cache/ +.jekyll-cache/ +.jekyll-metadata +vendor/ diff --git a/AGENTS.md b/AGENTS.md index 224c44f..22615cd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,21 +1,44 @@ ## Cursor Cloud specific instructions -This is a static HTML/CSS website (no build tools, no package managers, no tests). It serves as a Git commands reference in Portuguese, hosted on GitHub Pages. +This is a Jekyll-powered static website hosted on GitHub Pages (main branch). It serves as a Git commands reference in Portuguese. + +### Project structure + +- `_config.yml` — Jekyll configuration (site metadata, excludes) +- `_layouts/default.html` — Base HTML layout (head, body wrapper, scripts) +- `_includes/` — Reusable partials: `head.html`, `header.html`, `nav.html`, `footer.html`, `scripts.html` +- `_includes/sections/` — One file per content section (13 files) +- `_data/navigation.yml` — Sidebar navigation data (drives `_includes/nav.html`) +- `index.html` — Main page (front matter + section includes) +- `Gemfile` — Ruby dependencies (Jekyll 4.x, jekyll-seo-tag) ### Running locally -Serve files with any static HTTP server from the repo root: +``` +bundle install --path vendor/bundle +bundle exec jekyll serve +``` + +The dev server runs at `http://localhost:4000/` with live-reload on file changes. + +### Building ``` -python3 -m http.server 8000 +bundle exec jekyll build ``` -Then open `http://localhost:8000/` in a browser. +Output goes to `_site/`. ### Linting -There are no project-defined lint or test scripts. HTML can be validated with `tidy -q -e index.html`. The only known warning is an empty `
  • ` on line 1024 of `index.html` (pre-existing). +No project-defined lint scripts. HTML can be validated with `tidy -q -e _site/index.html` after building. ### CI -The GitHub Actions workflow (`.github/workflows/jekyll-docker.yml`) runs a Jekyll build in a Docker container, but the site itself uses `.nojekyll` and is served as raw static files on GitHub Pages. +The GitHub Actions workflow (`.github/workflows/jekyll-docker.yml`) runs a Jekyll build in a Docker container on pushes/PRs to master. + +### Gotchas + +- `vendor/` must be in both `.gitignore` and `_config.yml` `exclude:` list, otherwise Jekyll tries to process bundled gems. +- The `_data/navigation.yml` file drives the sidebar navigation; add new sections there and create a matching `_includes/sections/*.html` file. +- Site metadata (title, description, author, GTM ID) is centralized in `_config.yml` and referenced via Liquid variables in includes. diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..ad81a05 --- /dev/null +++ b/Gemfile @@ -0,0 +1,7 @@ +source "https://rubygems.org" + +gem "jekyll", "~> 4.4" + +group :jekyll_plugins do + gem "jekyll-seo-tag" +end diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..2cf7723 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,236 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.8) + public_suffix (>= 2.0.2, < 8.0) + base64 (0.3.0) + bigdecimal (4.0.1) + colorator (1.1.0) + concurrent-ruby (1.3.6) + csv (3.3.5) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + eventmachine (1.2.7) + ffi (1.17.3) + ffi (1.17.3-aarch64-linux-gnu) + ffi (1.17.3-aarch64-linux-musl) + ffi (1.17.3-arm-linux-gnu) + ffi (1.17.3-arm-linux-musl) + ffi (1.17.3-arm64-darwin) + ffi (1.17.3-x86-linux-gnu) + ffi (1.17.3-x86-linux-musl) + ffi (1.17.3-x86_64-darwin) + ffi (1.17.3-x86_64-linux-gnu) + ffi (1.17.3-x86_64-linux-musl) + forwardable-extended (2.6.0) + google-protobuf (4.33.5) + bigdecimal + rake (>= 13) + google-protobuf (4.33.5-aarch64-linux-gnu) + bigdecimal + rake (>= 13) + google-protobuf (4.33.5-aarch64-linux-musl) + bigdecimal + rake (>= 13) + google-protobuf (4.33.5-arm64-darwin) + bigdecimal + rake (>= 13) + google-protobuf (4.33.5-x86-linux-gnu) + bigdecimal + rake (>= 13) + google-protobuf (4.33.5-x86-linux-musl) + bigdecimal + rake (>= 13) + google-protobuf (4.33.5-x86_64-darwin) + bigdecimal + rake (>= 13) + google-protobuf (4.33.5-x86_64-linux-gnu) + bigdecimal + rake (>= 13) + google-protobuf (4.33.5-x86_64-linux-musl) + bigdecimal + rake (>= 13) + http_parser.rb (0.8.1) + i18n (1.14.8) + concurrent-ruby (~> 1.0) + jekyll (4.4.1) + addressable (~> 2.4) + base64 (~> 0.2) + colorator (~> 1.0) + csv (~> 3.0) + em-websocket (~> 0.5) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) + jekyll-watch (~> 2.0) + json (~> 2.6) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (~> 0.3, >= 0.3.6) + pathutil (~> 0.9) + rouge (>= 3.0, < 5.0) + safe_yaml (~> 1.0) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-sass-converter (3.1.0) + sass-embedded (~> 1.75) + jekyll-seo-tag (2.8.0) + jekyll (>= 3.8, < 5.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + json (2.18.1) + kramdown (2.5.2) + rexml (>= 3.4.4) + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.4) + listen (3.10.0) + logger + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + logger (1.7.0) + mercenary (0.4.0) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (7.0.2) + rake (13.3.1) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) + ffi (~> 1.0) + rexml (3.4.4) + rouge (4.7.0) + safe_yaml (1.0.5) + sass-embedded (1.97.3) + google-protobuf (~> 4.31) + rake (>= 13) + sass-embedded (1.97.3-aarch64-linux-android) + google-protobuf (~> 4.31) + sass-embedded (1.97.3-aarch64-linux-gnu) + google-protobuf (~> 4.31) + sass-embedded (1.97.3-aarch64-linux-musl) + google-protobuf (~> 4.31) + sass-embedded (1.97.3-arm-linux-androideabi) + google-protobuf (~> 4.31) + sass-embedded (1.97.3-arm-linux-gnueabihf) + google-protobuf (~> 4.31) + sass-embedded (1.97.3-arm-linux-musleabihf) + google-protobuf (~> 4.31) + sass-embedded (1.97.3-arm64-darwin) + google-protobuf (~> 4.31) + sass-embedded (1.97.3-riscv64-linux-android) + google-protobuf (~> 4.31) + sass-embedded (1.97.3-riscv64-linux-gnu) + google-protobuf (~> 4.31) + sass-embedded (1.97.3-riscv64-linux-musl) + google-protobuf (~> 4.31) + sass-embedded (1.97.3-x86_64-darwin) + google-protobuf (~> 4.31) + sass-embedded (1.97.3-x86_64-linux-android) + google-protobuf (~> 4.31) + sass-embedded (1.97.3-x86_64-linux-gnu) + google-protobuf (~> 4.31) + sass-embedded (1.97.3-x86_64-linux-musl) + google-protobuf (~> 4.31) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + unicode-display_width (2.6.0) + webrick (1.9.2) + +PLATFORMS + aarch64-linux-android + aarch64-linux-gnu + aarch64-linux-musl + arm-linux-androideabi + arm-linux-gnu + arm-linux-gnueabihf + arm-linux-musl + arm-linux-musleabihf + arm64-darwin + riscv64-linux-android + riscv64-linux-gnu + riscv64-linux-musl + ruby + x86-linux-gnu + x86-linux-musl + x86_64-darwin + x86_64-linux-android + x86_64-linux-gnu + x86_64-linux-musl + +DEPENDENCIES + jekyll (~> 4.4) + jekyll-seo-tag + +CHECKSUMS + addressable (2.8.8) sha256=7c13b8f9536cf6364c03b9d417c19986019e28f7c00ac8132da4eb0fe393b057 + base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b + bigdecimal (4.0.1) sha256=8b07d3d065a9f921c80ceaea7c9d4ae596697295b584c296fe599dd0ad01c4a7 + colorator (1.1.0) sha256=e2f85daf57af47d740db2a32191d1bdfb0f6503a0dfbc8327d0c9154d5ddfc38 + concurrent-ruby (1.3.6) sha256=6b56837e1e7e5292f9864f34b69c5a2cbc75c0cf5338f1ce9903d10fa762d5ab + csv (3.3.5) sha256=6e5134ac3383ef728b7f02725d9872934f523cb40b961479f69cf3afa6c8e73f + em-websocket (0.5.3) sha256=f56a92bde4e6cb879256d58ee31f124181f68f8887bd14d53d5d9a292758c6a8 + eventmachine (1.2.7) sha256=994016e42aa041477ba9cff45cbe50de2047f25dd418eba003e84f0d16560972 + ffi (1.17.3) sha256=0e9f39f7bb3934f77ad6feab49662be77e87eedcdeb2a3f5c0234c2938563d4c + ffi (1.17.3-aarch64-linux-gnu) sha256=28ad573df26560f0aedd8a90c3371279a0b2bd0b4e834b16a2baa10bd7a97068 + ffi (1.17.3-aarch64-linux-musl) sha256=020b33b76775b1abacc3b7d86b287cef3251f66d747092deec592c7f5df764b2 + ffi (1.17.3-arm-linux-gnu) sha256=5bd4cea83b68b5ec0037f99c57d5ce2dd5aa438f35decc5ef68a7d085c785668 + ffi (1.17.3-arm-linux-musl) sha256=0d7626bb96265f9af78afa33e267d71cfef9d9a8eb8f5525344f8da6c7d76053 + ffi (1.17.3-arm64-darwin) sha256=0c690555d4cee17a7f07c04d59df39b2fba74ec440b19da1f685c6579bb0717f + ffi (1.17.3-x86-linux-gnu) sha256=868a88fcaf5186c3a46b7c7c2b2c34550e1e61a405670ab23f5b6c9971529089 + ffi (1.17.3-x86-linux-musl) sha256=f0286aa6ef40605cf586e61406c446de34397b85dbb08cc99fdaddaef8343945 + ffi (1.17.3-x86_64-darwin) sha256=1f211811eb5cfaa25998322cdd92ab104bfbd26d1c4c08471599c511f2c00bb5 + ffi (1.17.3-x86_64-linux-gnu) sha256=3746b01f677aae7b16dc1acb7cb3cc17b3e35bdae7676a3f568153fb0e2c887f + ffi (1.17.3-x86_64-linux-musl) sha256=086b221c3a68320b7564066f46fed23449a44f7a1935f1fe5a245bd89d9aea56 + forwardable-extended (2.6.0) sha256=1bec948c469bbddfadeb3bd90eb8c85f6e627a412a3e852acfd7eaedbac3ec97 + google-protobuf (4.33.5) sha256=1b64fb774c101b23ac3f6923eca24be04fd971635d235c4cd4cfe0d752620da0 + google-protobuf (4.33.5-aarch64-linux-gnu) sha256=f70ca066e37a7ac60b4f34a836bb48ca3fc41a9371310052e484d8c9f925ff39 + google-protobuf (4.33.5-aarch64-linux-musl) sha256=d9ae90025f05db642e5603de5dbb2390cd1215bac7507fa575cc20b0db7e11a1 + google-protobuf (4.33.5-arm64-darwin) sha256=996d4e93c4232cc42f0facd821a92b4f4a926c3c9c1a768e7d768b33d9ef72f9 + google-protobuf (4.33.5-x86-linux-gnu) sha256=8d0d056743449221c723bffcf423ee8028a7028b4fca159db9692ec79fa4d185 + google-protobuf (4.33.5-x86-linux-musl) sha256=08de722ce05e619dcfa75a1a998615694e7a0c4254d4bb1557834d98d5090851 + google-protobuf (4.33.5-x86_64-darwin) sha256=173d1d6c9f0de93fd9ee25fde172d6fb6376099dca8844e19bc5782bbc7b93b0 + google-protobuf (4.33.5-x86_64-linux-gnu) sha256=a782adf86bfba207740b49d7bb9ccdc25c4fb8f800fe222af62bce951149338a + google-protobuf (4.33.5-x86_64-linux-musl) sha256=d14feec9118f44cfdc3ee4a1d1baa4e6dd77fa418967ccf22ecbe76b8c1bacbf + http_parser.rb (0.8.1) sha256=9ae8df145b39aa5398b2f90090d651c67bd8e2ebfe4507c966579f641e11097a + i18n (1.14.8) sha256=285778639134865c5e0f6269e0b818256017e8cde89993fdfcbfb64d088824a5 + jekyll (4.4.1) sha256=4c1144d857a5b2b80d45b8cf5138289579a9f8136aadfa6dd684b31fe2bc18c1 + jekyll-sass-converter (3.1.0) sha256=83925d84f1d134410c11d0c6643b0093e82e3a3cf127e90757a85294a3862443 + jekyll-seo-tag (2.8.0) sha256=3f2ed1916d56f14ebfa38e24acde9b7c946df70cb183af2cb5f0598f21ae6818 + jekyll-watch (2.2.1) sha256=bc44ed43f5e0a552836245a54dbff3ea7421ecc2856707e8a1ee203a8387a7e1 + json (2.18.1) sha256=fe112755501b8d0466b5ada6cf50c8c3f41e897fa128ac5d263ec09eedc9f986 + kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa + kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 + liquid (4.0.4) sha256=4fcfebb1a045e47918388dbb7a0925e7c3893e58d2bd6c3b3c73ec17a2d8fdb3 + listen (3.10.0) sha256=c6e182db62143aeccc2e1960033bebe7445309c7272061979bb098d03760c9d2 + logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 + mercenary (0.4.0) sha256=b25a1e4a59adca88665e08e24acf0af30da5b5d859f7d8f38fba52c28f405138 + pathutil (0.16.2) sha256=e43b74365631cab4f6d5e4228f812927efc9cb2c71e62976edcb252ee948d589 + public_suffix (7.0.2) sha256=9114090c8e4e7135c1fd0e7acfea33afaab38101884320c65aaa0ffb8e26a857 + rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c + rb-fsevent (0.11.2) sha256=43900b972e7301d6570f64b850a5aa67833ee7d87b458ee92805d56b7318aefe + rb-inotify (0.11.1) sha256=a0a700441239b0ff18eb65e3866236cd78613d6b9f78fea1f9ac47a85e47be6e + rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142 + rouge (4.7.0) sha256=dba5896715c0325c362e895460a6d350803dbf6427454f49a47500f3193ea739 + safe_yaml (1.0.5) sha256=a6ac2d64b7eb027bdeeca1851fe7e7af0d668e133e8a88066a0c6f7087d9f848 + sass-embedded (1.97.3) sha256=c4136da69ae3acfa7b0809f4ec10891125edf57df214a2d1ab570f721f96f7a6 + sass-embedded (1.97.3-aarch64-linux-android) sha256=623b2f52fed6e3696c6445406e4efaef57b54442cc35604bfffbb82aef7d5c45 + sass-embedded (1.97.3-aarch64-linux-gnu) sha256=81915bb19ce7e224eae534e75e828f4ab5acddcb17e54da0b5ef91d932462836 + sass-embedded (1.97.3-aarch64-linux-musl) sha256=508c92fa2f9e58f9072325e02f011bd22c7e428465c67fafaee570d0bc40563b + sass-embedded (1.97.3-arm-linux-androideabi) sha256=e2ef33b187066e09374023e58e72cf3b5baabe6b77ecd74356fe9b4892a1c6e1 + sass-embedded (1.97.3-arm-linux-gnueabihf) sha256=ce443b57f3d7f03740267cf0f2cdff13e8055dd5938488967746f29f230222da + sass-embedded (1.97.3-arm-linux-musleabihf) sha256=be3972424616f916ce1f4f41228266d57339e490dfd7ca0cea5588579564d4c0 + sass-embedded (1.97.3-arm64-darwin) sha256=8897d3503efe75c30584070a7104095545f5157665029aeb9bff3fa533a73861 + sass-embedded (1.97.3-riscv64-linux-android) sha256=201426b3e58611aa8cf34a7574df51905ec42fefb5a69982cc8497ac7fb26a6b + sass-embedded (1.97.3-riscv64-linux-gnu) sha256=d7bac32f4de55c589a036da13ac4482bf5b7dfac980b4c0203d31a1bd9f07622 + sass-embedded (1.97.3-riscv64-linux-musl) sha256=621d981d700e2b8d0459b5ea696fff746dfa07d6b6bbc70cd982905214b07888 + sass-embedded (1.97.3-x86_64-darwin) sha256=578f167907ee2a4d355a5a40bcf35d2e3eb90c87008dcd9ce31a2c4a877697f6 + sass-embedded (1.97.3-x86_64-linux-android) sha256=8f5e179bee8610be432499f228ea4e53ab362b1db0da1ae3cd3e76b114712372 + sass-embedded (1.97.3-x86_64-linux-gnu) sha256=173a4d0dbe2fffdf7482bd3e82fb597dfc658c18d1e8fd746aa7d5077ed4e850 + sass-embedded (1.97.3-x86_64-linux-musl) sha256=fcc0dcb253ef174ea25283f8781ce9ce95a492663f4bdbb1d66bfae99267a9f7 + terminal-table (3.0.2) sha256=f951b6af5f3e00203fb290a669e0a85c5dd5b051b3b023392ccfd67ba5abae91 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a + webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 + +BUNDLED WITH + 4.0.6 diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..62c2b95 --- /dev/null +++ b/_config.yml @@ -0,0 +1,27 @@ +title: Comandos Git +tagline: Aprenda Git do básico ao avançado +description: >- + Comandos Git, aprenda Git do básico ao avançado com tutorial para Windows, + Mac e Linux (Ubuntu) usando as principais ferramentas como GitHub, BitBucket e GitLab +author: Rafael Corrêa Gomes +url: "https://comandosgit.github.io" +baseurl: "" +lang: pt + +google_verification: "E5A42C839A2CF7FA50F0FB3FCA369D4E" +gtm_id: "GTM-T2DGXXP" + +keywords: >- + git branch, git commit, git remote, comandos git, github, git merge, + windows, mac, bitbucket, git, linux, ubuntu, debian, controle de versão, + git add, git pull, git push, git remote + +exclude: + - Gemfile + - Gemfile.lock + - README.md + - LICENSE + - LICENSE.html + - AGENTS.md + - .gitignore + - vendor/ diff --git a/_data/navigation.yml b/_data/navigation.yml new file mode 100644 index 0000000..96a60b2 --- /dev/null +++ b/_data/navigation.yml @@ -0,0 +1,202 @@ +- title: Instalando e Configurando + id: instalando-e-configurando + css_class: install + items: + - title: Instalação + id: instalacao + - title: git config + id: gitconfig + - title: git help + id: githelp + +- title: Criando o projeto + id: criando-o-projeto + css_class: project + items: + - title: git init + id: gitinit + - title: git clone + id: gitclone + +- title: Básico + id: basico + css_class: basic + items: + - title: git add + id: gitadd + - title: git status + id: gitstatus + - title: git diff + id: gitdiff + - title: git commit + id: gitcommit + - title: git reset + id: gitreset + - title: git rm + id: gitrm + - title: git mv + id: gitmv + +- title: Branch e Merge + id: branch + css_class: branch + items: + - title: git branch + id: gitbranch + - title: git checkout + id: gitcheckout + - title: git merge + id: gitmerge + - title: git mergetool + id: gitmergetool + - title: git log + id: gitlog + - title: git stash + id: gitstash + - title: git tag + id: gittag + +- title: Compartilhar e Atualizar Projetos + id: sharing + css_class: sharing + items: + - title: git fetch + id: gitfetch + - title: git pull + id: gitpull + - title: git push + id: gitpush + - title: git remote + id: gitremote + - title: git submodule + id: gitsubmodule + +- title: Inspeção e Comparação + id: inspect + css_class: inspect + items: + - title: git show + id: gitshow + - title: git log + id: gitlog2 + - title: git diff + id: gitdiff2 + - title: git shortlog + id: gitshortlog + - title: git describe + id: gitdescribe + +- title: Pacotes + id: patching + css_class: patching + items: + - title: git apply + id: gitapply + - title: git cherry-pick + id: gitcherrypick + - title: git diff + id: gitdiff3 + - title: git rebase + id: gitrebase + - title: git revert + id: gitrevert + +- title: Debugando + id: debug + css_class: debug + items: + - title: git bisect + id: gitbisect + - title: git blame + id: gitblame + - title: git grep + id: gitgrep + +- title: Email + id: email + css_class: email + items: + - title: git am + id: gitam + - title: git apply + id: gitapply2 + - title: git format-patch + id: gitformatpatch + - title: git send-email + id: gitsendemail + - title: git request-pull + id: gitrequestpull + +- title: Sistemas Externos + id: external + css_class: external + items: + - title: git svn + id: gitsvn + - title: git fast-import + id: gitfastimport + +- title: Administração + id: administration + css_class: administration + items: + - title: git clean + id: gitclean + - title: git gc + id: gitgc + - title: git fsck + id: gitfsck + - title: git reflog + id: gitreflog + - title: git filter-branch + id: gitfilterbranch + - title: git instaweb + id: gitinstaweb + - title: git archive + id: gitarchive + +- title: Servidor + id: server + css_class: server + items: + - title: git daemon + id: gitdaemon + - title: git update-server-info + id: gitupdateserverinfo + +- title: Canalização de Código + id: plumbing + css_class: plumbing + items: + - title: git cat-file + id: gitcatfile + - title: git commit-tree + id: gitcommittree + - title: git count-objects + id: gitcountobjects + - title: git diff-index + id: gitdiffindex + - title: git for-each-ref + id: gitforeachref + - title: git hash-object + id: githashobject + - title: git merge-base + id: gitmergebase + - title: git read-tree + id: gitreadtree + - title: git rev-list + id: gitrevlist + - title: git rev-parse + id: gitrevparse + - title: git show-ref + id: gitshowref + - title: git symbolic-ref + id: gitsymbolicref + - title: git update-index + id: gitupdateindex + - title: git update-ref + id: gitupdateref + - title: git verify-pack + id: gitverifypack + - title: git write-tree + id: gitwritetree diff --git a/_includes/footer.html b/_includes/footer.html new file mode 100644 index 0000000..8c86b18 --- /dev/null +++ b/_includes/footer.html @@ -0,0 +1,19 @@ + diff --git a/_includes/head.html b/_includes/head.html new file mode 100644 index 0000000..3c76347 --- /dev/null +++ b/_includes/head.html @@ -0,0 +1,68 @@ + + + + +{{ site.title }} - {{ site.tagline }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_includes/header.html b/_includes/header.html new file mode 100644 index 0000000..8863256 --- /dev/null +++ b/_includes/header.html @@ -0,0 +1,20 @@ +
    +
    +
    +
    + + ComandosGit + +
    +
    +
    +
    +
    +

    {{ site.title }}

    +
    +
    +

    {{ site.tagline }}

    +
    +
    +
    +
    diff --git a/_includes/nav.html b/_includes/nav.html new file mode 100644 index 0000000..a605a4f --- /dev/null +++ b/_includes/nav.html @@ -0,0 +1,27 @@ + diff --git a/_includes/scripts.html b/_includes/scripts.html new file mode 100644 index 0000000..9e985f6 --- /dev/null +++ b/_includes/scripts.html @@ -0,0 +1,14 @@ + + + + + + + diff --git a/_includes/sections/administracao.html b/_includes/sections/administracao.html new file mode 100644 index 0000000..7a99fa9 --- /dev/null +++ b/_includes/sections/administracao.html @@ -0,0 +1,25 @@ +
    +

    Administração

    + +
    +

    git clean

    +
    +
    +

    git gc

    +
    +
    +

    git fsck

    +
    +
    +

    git reflog

    +
    +
    +

    git filter-branch

    +
    +
    +

    git instaweb

    +
    +
    +

    git archive

    +
    +
    diff --git a/_includes/sections/basico.html b/_includes/sections/basico.html new file mode 100644 index 0000000..676998c --- /dev/null +++ b/_includes/sections/basico.html @@ -0,0 +1,193 @@ +
    +

    Básico

    + +
    +

    git add

    + + + +
    +
    +
    + +

    Quando um repositório é inicialmente clonado, todos os seus arquivos estarão monitorados e inalterados porque você simplesmente os obteve e ainda não os editou. Conforme você edita esses arquivos, o Git passa a vê-los como modificados, porque você os alterou desde seu último commit. Você seleciona esses arquivos modificados e então faz o commit de todas as alterações selecionadas e o ciclo se repete.

    +
    Monitorando Novos Arquivos
    + +

    Para passar a monitorar um novo arquivo, use o comando git add. Para monitorar o arquivo + README, você pode rodar isso:

    + +
    git add README
    +

    Se você rodar o comando git status, você pode ver que o seu arquivo README agora está sendo monitorado. Os arquivos monitorados serão os que faram parte do commit.

    +
    +
    +
    +
    +

    git status

    + + + +
    +
    +
    + +

    A principal ferramenta utilizada para determinar quais arquivos estão em quais estados é o comando: +

    + +
    git status
    +

    O comando lhe mostra em qual branch você se encontra. Vamos dizer que você adicione um novo arquivo em seu projeto, um simples arquivo README. Caso o arquivo não exista e você execute git status, você verá o arquivo não monitorado dessa forma:

    + +
    # On branch master +
    # Untracked files: +
    # (use "git add {file}..." to include in what will be committed) +
    # +
    # README +
    nothing added to commit but untracked files present (use "git add" to track) +
    +

    Você pode ver que o seu novo arquivo README não está sendo monitorado, pois está listado sob o cabeçalho "Untracked files" na saída do comando status. Não monitorado significa basicamente que o Git está vendo um arquivo que não existia na última captura (commit); o Git não vai incluí-lo nas suas capturas de commit até que você o diga explicitamente que assim o faça. Ele faz isso para que você não inclua acidentalmente arquivos binários gerados, ou outros arquivos que você não têm a intenção de incluir. Digamos, que você queira incluir o arquivo README, portanto vamos começar a monitorar este arquivo.

    +
    +
    +
    + +
    +

    git diff

    + + + +
    +
    +
    + +

    Se o comando git status for muito vago — você quer saber exatamente o que você alterou, não apenas quais arquivos foram alterados — você pode utilizar o comando.

    + +
    git diff
    +

    Apesar do comando git status responder essas duas perguntas de maneira geral, o git + diff mostra as linhas exatas que foram adicionadas e removidas — o patch, por assim dizer. +
    Se você quer ver o que selecionou que irá no seu próximo commit, pode utilizar:

    + +
    git diff --cached
    + +
    +
    +
    +
    +

    git commit

    + + + +
    +
    +
    + +

    Armazena o conteúdo atual do índice em um novo commit, juntamente com uma mensagem de registro do usuário que descreve as mudanças. +
    Se usa o commit depois de já ter feito o git add, para fazer o commit:

    + +
    git commit -m "Mensagem"
    +

    Para commitar também os arquivos versionados mesmo não estando no Stage basta adicionar o parâmetro -a

    + +
    git commit -a -m "Mensagem"
    +

    Refazendo commit quando esquecer de adicionar um arquivo no Stage:

    + +
    git commit -m "Mensagem" --amend +
    +

    O amend é destrutivo e só deve ser utilizado antes do commit ter sido enviado ao servidor remoto. +

    +
    +
    +
    +
    +

    git reset

    + + + +
    +
    +
    + +

    Em qualquer fase, você pode querer desfazer alguma coisa. Aqui, veremos algumas ferramentas básicas para desfazer modificações que você fez. Cuidado, porque você não pode desfazer algumas dessas mudanças. Essa é uma das poucas áreas no Git onde você pode perder algum trabalho se fizer errado. +
    Para voltar ao último commit:

    + +
    git reset --hard HEAD~1
    +

    Para voltar ao último commit e mantém os últimos arquivos no Stage:

    + +
    git reset --soft HEAD~1
    +

    Volta para o commit com a hash XXXXXXXXXXX:

    + +
    git reset --hard XXXXXXXXXXX
    +
    Recuperando commit apagado pelo git reset
    + +

    Para visualizar os hashs

    + +
    git reflog
    +

    E para aplicar:

    + +
    git merge {hash}
    +
    +
    +
    +
    +

    git rm

    + + + +
    +
    +
    + +

    Para remover um arquivo do Git, você tem que removê-lo dos arquivos que estão sendo monitorados (mais precisamente, removê-lo da sua área de seleção) e então fazer o commit. O comando git + rm faz isso e também remove o arquivo do seu diretório para você não ver ele como arquivo não monitorado (untracked file) na próxima vez. +

    + +
    git rm -f {arquivo}
    +

    Se você modificou o arquivo e já o adicionou na área de seleção, você deve forçar a remoção com a opção -f. Essa é uma funcionalidade de segurança para prevenir remoções acidentais de dados que ainda não foram gravados em um snapshot e não podem ser recuperados do Git.

    + +
    +
    +
    +
    +

    git mv

    + + + +
    +
    +
    + +

    Diferente de muitos sistemas VCS, o Git não monitora explicitamente arquivos movidos. +
    É um pouco confuso que o Git tenha um comando mv. Se você quiser renomear um arquivo no Git, você pode fazer isso com

    + +
    git mv arquivo_origem arquivo_destino
    +

    e funciona. De fato, se você fizer algo desse tipo e consultar o status, você verá que o Git considera que o arquivo foi renomeado.

    + +

    No entanto, isso é equivalente a rodar algo como:

    + +
    mv README.txt README +
    git rm README.txt +
    git add README
    +

    O Git descobre que o arquivo foi renomeado implicitamente, então ele não se importa se você renomeou por este caminho ou com o comando mv. A única diferença real é que o comando + mv + é mais conveniente, executa três passos de uma vez. O mais importante, você pode usar qualquer ferramenta para renomear um arquivo, e usar add/rm depois, antes de consolidar com o commit.

    +
    +
    +
    +
    diff --git a/_includes/sections/branch-e-merge.html b/_includes/sections/branch-e-merge.html new file mode 100644 index 0000000..208f5d5 --- /dev/null +++ b/_includes/sections/branch-e-merge.html @@ -0,0 +1,141 @@ +
    +

    Branch e Merge

    + +
    +

    git branch

    + + + +
    +
    +
    + +

    Um branch no Git é simplesmente um leve ponteiro móvel para um dos commits. O nome do branch padrão no Git é master. Como você inicialmente fez commits, você tem um branch principal (master + branch) que aponta para o último commit que você fez. Cada vez que você faz um commit ele avança automaticamente. +
    O que acontece se você criar um novo branch? Bem, isso cria um novo ponteiro para que você possa se mover. Vamos dizer que você crie um novo branch chamado testing. Você faz isso com o comando git branch:

    + +
    git branch testing
    +

    Isso cria um novo ponteiro para o mesmo commit em que você está no momento. +
    Para mudar para um branch existente, você executa o comando git checkout. Vamos mudar para o novo branch testing: +

    + +
    git checkout testing
    +

    Isto move o HEAD para apontar para o branch testing.

    +
    +
    +
    +
    +

    git checkout

    + + + +
    +
    +
    +

    Com o git checkout você pode mudar de branch, caso a branch ainda não exista você poderá passar o parâmetro -b para criar.

    +
    git checkout -b {nome_da_branch}
    +
    +
    +
    +
    +

    git merge

    + + + +
    +
    +
    +

    Suponha que você decidiu que o trabalho na tarefa #53 está completo e pronto para ser feito o merge no branch master. Para fazer isso, você fará o merge do seu branch iss53, bem como o merge do branch hotfix de antes. Tudo que você tem a fazer é executar o checkout do branch para onde deseja fazer o merge e então rodar o comando git merge:

    +
    git checkout master +
    git merge iss53
    +
    +
    +
    +
    +

    git mergetool

    + + + +
    +
    +
    +

    Se você quer usar uma ferramenta gráfica para resolver esses problemas, você pode executar o seguinte comando que abre uma ferramenta visual de merge adequada e percorre os conflitos.

    +
    git mergetool
    +
    Arquivos Temporários
    +

    git mergetool cria * .orig arquivos de backup ao resolver fusões. Estes são seguros para remover uma vez que um arquivo foi fundida e sua git mergetool sessão foi concluída.

    +
    +
    +
    +
    +

    git log

    + + + +
    +
    +
    +

    Depois que você tiver criado vários commits, ou se clonou um repositório com um histórico de commits existente, você provavelmente vai querer ver o que aconteceu. A ferramente mais básica e poderosa para fazer isso é o comando:

    +
    git log
    +
    +
    +
    +
    +

    git stash

    + + + +
    +
    +
    +

    Muitas vezes, quando você está trabalhando em uma parte do seu projeto, as coisas estão em um estado confuso e você quer mudar de branch por um tempo para trabalhar em outra coisa. O problema é, você não quer fazer o commit de um trabalho incompleto somente para voltar a ele mais tarde. A resposta para esse problema é o comando git stash. +
    Você quer mudar de branch, mas não quer fazer o commit do que você ainda está trabalhando; você irá fazer o stash das modificações. Para fazer um novo stash na sua pilha, execute:

    +
    git stash
    +

    Seu diretório de trabalho estará limpo. +
    Neste momento, você pode facilmente mudar de branch e trabalhar em outra coisa; suas alterações estão armazenadas na sua pilha. Para ver as stashes que você guardou, você pode usar

    +
    git stash list
    +

    Você pode aplicar aquele que acabou de fazer o stash com o comando mostrado na saída de ajuda do comando stash original: git stash apply. Se você quer aplicar um dos stashes mais antigos, você pode especificá-lo, assim: git stash apply stash@{2}. Se você não especificar um stash, Git assume que é o stash mais recente e tenta aplicá-lo.

    +
    +
    +
    +
    +

    git tag

    + + + +
    +
    +
    +

    Git tem a habilidade de criar tags em pontos específicos na história do código como pontos importantes. Geralmente as pessoas usam esta funcionalidade para marcar pontos de release (v1.0, e por aí vai). Nesta seção, você aprenderá como listar as tags disponíveis, como criar novas tags, e quais são os tipos diferentes de tags. +
    Para listar as tags execute:

    +
    + git tag +
    +

    Para criar uma tag basta executar o seguinte comando, caso não queira criar a tag anotada, somente retire os parâmetros -a e -m.

    +
    + git tag -a v1.4 -m 'my version 1.4' +
    +
    +
    +
    +
    diff --git a/_includes/sections/canalizacao-de-codigo.html b/_includes/sections/canalizacao-de-codigo.html new file mode 100644 index 0000000..e9b2284 --- /dev/null +++ b/_includes/sections/canalizacao-de-codigo.html @@ -0,0 +1,52 @@ +
    +

    Canalização de Código

    + +
    +

    git cat-file

    +
    +
    +

    git commit-tree

    +
    +
    +

    git count-objects

    +
    +
    +

    git diff-index

    +
    +
    +

    git for-each-ref

    +
    +
    +

    git hash-object

    +
    +
    +

    git merge-base

    +
    +
    +

    git read-tree

    +
    +
    +

    git rev-list

    +
    +
    +

    git rev-parse

    +
    +
    +

    git show-ref

    +
    +
    +

    git symbolic-ref

    +
    +
    +

    git update-index

    +
    +
    +

    git update-ref

    +
    +
    +

    git verify-pack

    +
    +
    +

    git write-tree

    +
    +
    diff --git a/_includes/sections/compartilhar-e-atualizar.html b/_includes/sections/compartilhar-e-atualizar.html new file mode 100644 index 0000000..4b3be50 --- /dev/null +++ b/_includes/sections/compartilhar-e-atualizar.html @@ -0,0 +1,65 @@ +
    +

    Compartilhar e Atualizar Projetos

    + +
    +

    git fetch

    + + + +
    +
    +
    +

    Para pegar dados dos seus projetos remotos, você pode executar:

    +
    + git fetch origin +
    +

    Esse comando vai até o projeto remoto e pega todos os dados que você ainda não tem. Depois de fazer isso, você deve ter referências para todos os branches desse remoto, onde você pode fazer o merge ou inspecionar a qualquer momento.

    +
    +
    +
    +
    +

    git pull

    + + + +
    +
    +
    +

    Incorpora as alterações de um repositório remoto no branch atual. Em seu modo padrão, git pull é uma abreviação para git fetch seguido de git merge FETCH_HEAD. Por exemplo, se eu estiver em uma branch chamada develop e quiser atualizar caso haja atualizações remotamente:

    +
    + git pull origin develop +
    +
    +
    +
    +
    +

    git push

    + + + +
    +
    +
    +

    O git push é o comando em que você transfere commits a partir do seu repositório local para um repositório remoto. É a contrapartida do git fetch, que busca importações e comprometem as agências locais, utilizando o git push as exportações comprometem as filiais remotas. Para fazer isso, você executa git push [nome_do_repositório_remoto] [nome_da_sua_branch_local], que vai tentar fazer que o [nome_do_repositório_remoto] receba a sua branch [nome_da_sua_branch_local] contendo todos seus commits com alterações. Por exemplo:

    +
    + git push origin develop +
    +
    +
    +
    +
    +

    git remote

    +
    +
    +

    git submodule

    +
    +
    diff --git a/_includes/sections/criando-o-projeto.html b/_includes/sections/criando-o-projeto.html new file mode 100644 index 0000000..dce8948 --- /dev/null +++ b/_includes/sections/criando-o-projeto.html @@ -0,0 +1,63 @@ +
    +

    Criando o projeto

    + +
    +

    git init

    + + + +
    +
    +
    + +

    Você pode obter um projeto Git utilizando duas formas principais. A primeira faz uso de um projeto ou diretório existente e o importa para o Git. A segunda clona um repositório Git existente a partir de outro servidor.

    +
    +
    Inicializando um Repositório em um Diretório Existente
    + +

    Caso você esteja iniciando o monitoramento de um projeto existente com Git, você precisa ir para o diretório do projeto e digitar

    + +
    git init
    +

    Isso cria um novo subdiretório chamado .git que contem todos os arquivos necessários de seu repositório — um esqueleto de repositório Git. Neste ponto, nada em seu projeto é monitorado. +

    +
    +
    Primeira versão
    + +

    Caso você queira começar a controlar o versionamento dos arquivos existentes (diferente de um diretório vazio), você provavelmente deve começar a monitorar esses arquivos e fazer um commit inicial. Você pode realizar isso com poucos comandos

    + +
    touch .gitignore +
    git add .gitignore +
    git commit -m "Versão inicial do projeto" +
    +

    Bem, nós iremos repassar esses comandos em um momento. Neste ponto, você tem um repositório Git com arquivos monitorados e um commit inicial.

    +
    +
    + +
    +
    +

    git clone

    + + + +
    +
    +
    + +

    Você clona um repositório com git clone [url]. Por exemplo, caso você queria clonar a biblioteca Git do Ruby chamada Grit, você pode fazê-lo da seguinte forma:

    + +
    git clone git://github.com/schacon/grit.git
    +

    Se você entrar no novo diretório grit, você verá todos os arquivos do projeto nele, pronto para serem editados ou utilizados. Caso você queira clonar o repositório em um diretório diferente de grit, é possível especificar esse diretório utilizando a opção abaixo:

    + +
    git clone git://github.com/schacon/grit.git mygrit
    +

    Este comando faz exatamente a mesma coisa que o anterior, mas o diretório alvo será chamado mygrit.

    +
    +
    + +
    +
    diff --git a/_includes/sections/debugando.html b/_includes/sections/debugando.html new file mode 100644 index 0000000..8f8d4a6 --- /dev/null +++ b/_includes/sections/debugando.html @@ -0,0 +1,13 @@ +
    +

    Debugando

    + +
    +

    git bisect

    +
    +
    +

    git blame

    +
    +
    +

    git grep

    +
    +
    diff --git a/_includes/sections/email.html b/_includes/sections/email.html new file mode 100644 index 0000000..6cad11f --- /dev/null +++ b/_includes/sections/email.html @@ -0,0 +1,19 @@ +
    +

    Email

    + +
    +

    git am

    +
    +
    +

    git apply

    +
    +
    +

    git format-patch

    +
    +
    +

    git send-email

    +
    +
    +

    git request-pull

    +
    +
    diff --git a/_includes/sections/inspecao-e-comparacao.html b/_includes/sections/inspecao-e-comparacao.html new file mode 100644 index 0000000..47b2657 --- /dev/null +++ b/_includes/sections/inspecao-e-comparacao.html @@ -0,0 +1,19 @@ +
    +

    Inspeção e Comparação

    + +
    +

    git show

    +
    +
    +

    git log

    +
    +
    +

    git diff

    +
    +
    +

    git shortlog

    +
    +
    +

    git describe

    +
    +
    diff --git a/_includes/sections/instalando-e-configurando.html b/_includes/sections/instalando-e-configurando.html new file mode 100644 index 0000000..c777c78 --- /dev/null +++ b/_includes/sections/instalando-e-configurando.html @@ -0,0 +1,99 @@ +
    +

    Instalando e Configurando

    + +
    +

    Instalação

    + + + +
    +
    + +
    +

    Instalar o Git no Windows é muito fácil. O projeto msysgit tem um dos procedimentos mais simples de instalação. Simplesmente baixe o arquivo exe do instalador a partir da página do GitHub e execute-o: +

    + + +

    Após concluir a instalação, você terá tanto uma versão command line (linha de comando, incluindo um cliente SSH que será útil depois) e uma GUI padrão.

    +
    +
    +

    Existem duas formas fáceis de se instalar Git em um Mac. A mais fácil delas é usar o instalador gráfico do Git, que você pode baixar da página do SourceForge:

    + + +

    A outra forma comum é instalar o Git via MacPorts (https://www.macports.org). Se você tem o MacPOrts instalado, instale o Git via

    + +
    sudo port install git-core +svn +doc +bash_completion +gitweb
    +
    +
    +

    Se você quiser instalar o Git no Linux via um instalador binário, você pode fazê-lo com a ferramenta de gerenciamento de pacotes (packages) disponível na sua distribuição. Caso você esteja no Fedora, você pode usar o yum:

    + +
    yum install git-core
    +

    Ou se você estiver em uma distribuição baseada no Debian, como o Ubuntu, use o apt-get:

    + +
    apt-get install git
    +
    +
    +
    +
    +

    git config

    + + + +
    +
    +
    + +

    A primeira coisa que você deve fazer quando instalar o Git é definir o seu nome de usuário e endereço de e-mail. Isso é importante porque todos os commits no Git utilizam essas informações, e está imutavelmente anexado nos commits que você realiza:

    + +
    git config --global user.name "John Doe" +
    git config --global user.email johndoe@example.com +
    +

    Relembrando, você só precisará fazer isso uma vez caso passe a opção --global, pois o Git sempre usará essa informação para qualquer coisa que você faça nesse sistema. Caso você queira sobrepor estas com um nome ou endereço de e-mail diferentes para projetos específicos, você pode executar o comando sem a opção --global quando estiver no próprio projeto.

    +
    +
    +
    + +

    Para ativar as cores nas respostas de comandos, você pode utilizar o seguinte comando:

    + Bem, nós iremos repassar esses comandos em um momento. Neste ponto, você tem um repositório Git com arquivos monitorados e um commit inicial. +
    git config --global color.ui true
    +
    + +
    +
    +
    +

    git help

    + + + +
    +
    +
    + +

    Se você precisar de ajuda ao usar Git, existem três maneiras de obter a ajuda para qualquer um dos comandos Git:

    + +
    git help {comando} +
    git {comando} --help +
    man git- {comando} +
    +
    + +
    +
    +
    diff --git a/_includes/sections/pacotes.html b/_includes/sections/pacotes.html new file mode 100644 index 0000000..6ee114b --- /dev/null +++ b/_includes/sections/pacotes.html @@ -0,0 +1,19 @@ +
    +

    Pacotes

    + +
    +

    git apply

    +
    +
    +

    git cherry-pick

    +
    +
    +

    git diff

    +
    +
    +

    git rebase

    +
    +
    +

    git revert

    +
    +
    diff --git a/_includes/sections/servidor.html b/_includes/sections/servidor.html new file mode 100644 index 0000000..8108671 --- /dev/null +++ b/_includes/sections/servidor.html @@ -0,0 +1,10 @@ +
    +

    Servidor

    + +
    +

    git daemon

    +
    +
    +

    git update-server-info

    +
    +
    diff --git a/_includes/sections/sistemas-externos.html b/_includes/sections/sistemas-externos.html new file mode 100644 index 0000000..619c396 --- /dev/null +++ b/_includes/sections/sistemas-externos.html @@ -0,0 +1,10 @@ +
    +

    Sistemas Externos

    + +
    +

    git svn

    +
    +
    +

    git fast-import

    +
    +
    diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 0000000..565c56e --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,18 @@ + + + + + {% include head.html %} + + + + + + + + {{ content }} + + {% include scripts.html %} + + + diff --git a/index.html b/index.html index 70f2da0..8596c9a 100755 --- a/index.html +++ b/index.html @@ -1,1113 +1,49 @@ - - +--- +layout: default +--- +
    +
    +
    + {% include header.html %} - - - - - - Comandos Git - Aprenda Git do básico ao avançado - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    - - - - -
    -
    -
    -
    +
    +
    + {% include sections/instalando-e-configurando.html %}
    -
    -
    - - ComandosGit - -
    -
    -
    -
    -
    -

    Comandos Git

    -
    -
    -

    Aprenda Git do básico ao avançado

    -
    -
    -
    -
    - -
    - -
    -
    -
    -

    Instalando e Configurando

    - -
    -

    Instalação

    - - - -
    -
    - -
    -

    Instalar o Git no Windows é muito fácil. O projeto msysgit tem um dos procedimentos mais simples de instalação. Simplesmente baixe o arquivo exe do instalador a partir da página do GitHub e execute-o: -

    - - -

    Após concluir a instalação, você terá tanto uma versão command line (linha de comando, incluindo um cliente SSH que será útil depois) e uma GUI padrão.

    -
    -
    -

    Existem duas formas fáceis de se instalar Git em um Mac. A mais fácil delas é usar o instalador gráfico do Git, que você pode baixar da página do SourceForge:

    - - -

    A outra forma comum é instalar o Git via MacPorts (https://www.macports.org). Se você tem o MacPOrts instalado, instale o Git via

    - -
    sudo port install git-core +svn +doc +bash_completion +gitweb
    -
    -
    -

    Se você quiser instalar o Git no Linux via um instalador binário, você pode fazê-lo com a ferramenta de gerenciamento de pacotes (packages) disponível na sua distribuição. Caso você esteja no Fedora, você pode usar o yum:

    - -
    yum install git-core
    -

    Ou se você estiver em uma distribuição baseada no Debian, como o Ubuntu, use o apt-get:

    - -
    apt-get install git
    -
    -
    -
    -
    -

    git config

    - - - -
    -
    -
    - -

    A primeira coisa que você deve fazer quando instalar o Git é definir o seu nome de usuário e endereço de e-mail. Isso é importante porque todos os commits no Git utilizam essas informações, e está imutavelmente anexado nos commits que você realiza:

    - -
    git config --global user.name "John Doe" -
    git config --global user.email johndoe@example.com -
    -

    Relembrando, você só precisará fazer isso uma vez caso passe a opção --global, pois o Git sempre usará essa informação para qualquer coisa que você faça nesse sistema. Caso você queira sobrepor estas com um nome ou endereço de e-mail diferentes para projetos específicos, você pode executar o comando sem a opção --global quando estiver no próprio projeto.

    -
    -
    -
    - -

    Para ativar as cores nas respostas de comandos, você pode utilizar o seguinte comando:

    - Bem, nós iremos repassar esses comandos em um momento. Neste ponto, você tem um repositório Git com arquivos monitorados e um commit inicial. -
    git config --global color.ui true
    -
    - -
    -
    -
    -

    git help

    - - - -
    -
    -
    - -

    Se você precisar de ajuda ao usar Git, existem três maneiras de obter a ajuda para qualquer um dos comandos Git:

    - -
    git help {comando} -
    git {comando} --help -
    man git- {comando} -
    -
    - -
    -
    -
    -
    -
    -

    Criando o projeto

    - -
    -

    git init

    - - - -
    -
    -
    - -

    Você pode obter um projeto Git utilizando duas formas principais. A primeira faz uso de um projeto ou diretório existente e o importa para o Git. A segunda clona um repositório Git existente a partir de outro servidor.

    -
    -
    Inicializando um Repositório em um Diretório Existente
    - -

    Caso você esteja iniciando o monitoramento de um projeto existente com Git, você precisa ir para o diretório do projeto e digitar

    - -
    git init
    -

    Isso cria um novo subdiretório chamado .git que contem todos os arquivos necessários de seu repositório — um esqueleto de repositório Git. Neste ponto, nada em seu projeto é monitorado. -

    -
    -
    Primeira versão
    - -

    Caso você queira começar a controlar o versionamento dos arquivos existentes (diferente de um diretório vazio), você provavelmente deve começar a monitorar esses arquivos e fazer um commit inicial. Você pode realizar isso com poucos comandos

    - -
    touch .gitignore -
    git add .gitignore -
    git commit -m "Versão inicial do projeto" -
    -

    Bem, nós iremos repassar esses comandos em um momento. Neste ponto, você tem um repositório Git com arquivos monitorados e um commit inicial.

    -
    -
    - -
    -
    -

    git clone

    - - - -
    -
    -
    - -

    Você clona um repositório com git clone [url]. Por exemplo, caso você queria clonar a biblioteca Git do Ruby chamada Grit, você pode fazê-lo da seguinte forma:

    - -
    git clone git://github.com/schacon/grit.git
    -

    Se você entrar no novo diretório grit, você verá todos os arquivos do projeto nele, pronto para serem editados ou utilizados. Caso você queira clonar o repositório em um diretório diferente de grit, é possível especificar esse diretório utilizando a opção abaixo:

    - -
    git clone git://github.com/schacon/grit.git mygrit
    -

    Este comando faz exatamente a mesma coisa que o anterior, mas o diretório alvo será chamado mygrit.

    -
    -
    - -
    -
    -
    -
    -

    Básico

    - -
    -

    git add

    - - - -
    -
    -
    - -

    Quando um repositório é inicialmente clonado, todos os seus arquivos estarão monitorados e inalterados porque você simplesmente os obteve e ainda não os editou. Conforme você edita esses arquivos, o Git passa a vê-los como modificados, porque você os alterou desde seu último commit. Você seleciona esses arquivos modificados e então faz o commit de todas as alterações selecionadas e o ciclo se repete.

    -
    Monitorando Novos Arquivos
    - -

    Para passar a monitorar um novo arquivo, use o comando git add. Para monitorar o arquivo - README, você pode rodar isso:

    - -
    git add README
    -

    Se você rodar o comando git status, você pode ver que o seu arquivo README agora está sendo monitorado. Os arquivos monitorados serão os que faram parte do commit.

    -
    -
    -
    -
    -

    git status

    - - - -
    -
    -
    - -

    A principal ferramenta utilizada para determinar quais arquivos estão em quais estados é o comando: -

    - -
    git status
    -

    O comando lhe mostra em qual branch você se encontra. Vamos dizer que você adicione um novo arquivo em seu projeto, um simples arquivo README. Caso o arquivo não exista e você execute git status, você verá o arquivo não monitorado dessa forma:

    - -
    # On branch master -
    # Untracked files: -
    # (use "git add {file}..." to include in what will be committed) -
    # -
    # README -
    nothing added to commit but untracked files present (use "git add" to track) -
    -

    Você pode ver que o seu novo arquivo README não está sendo monitorado, pois está listado sob o cabeçalho "Untracked files" na saída do comando status. Não monitorado significa basicamente que o Git está vendo um arquivo que não existia na última captura (commit); o Git não vai incluí-lo nas suas capturas de commit até que você o diga explicitamente que assim o faça. Ele faz isso para que você não inclua acidentalmente arquivos binários gerados, ou outros arquivos que você não têm a intenção de incluir. Digamos, que você queira incluir o arquivo README, portanto vamos começar a monitorar este arquivo.

    -
    -
    -
    - -
    -

    git diff

    - - - -
    -
    -
    - -

    Se o comando git status for muito vago — você quer saber exatamente o que você alterou, não apenas quais arquivos foram alterados — você pode utilizar o comando.

    - -
    git diff
    -

    Apesar do comando git status responder essas duas perguntas de maneira geral, o git - diff mostra as linhas exatas que foram adicionadas e removidas — o patch, por assim dizer. -
    Se você quer ver o que selecionou que irá no seu próximo commit, pode utilizar:

    - -
    git diff --cached
    - -
    -
    -
    -
    -

    git commit

    - - - -
    -
    -
    - -

    Armazena o conteúdo atual do índice em um novo commit, juntamente com uma mensagem de registro do usuário que descreve as mudanças. -
    Se usa o commit depois de já ter feito o git add, para fazer o commit:

    - -
    git commit -m "Mensagem"
    -

    Para commitar também os arquivos versionados mesmo não estando no Stage basta adicionar o parâmetro -a

    - -
    git commit -a -m "Mensagem"
    -

    Refazendo commit quando esquecer de adicionar um arquivo no Stage:

    - -
    git commit -m "Mensagem" --amend -
    -

    O amend é destrutivo e só deve ser utilizado antes do commit ter sido enviado ao servidor remoto. -

    -
    -
    -
    -
    -

    git reset

    - - - -
    -
    -
    - -

    Em qualquer fase, você pode querer desfazer alguma coisa. Aqui, veremos algumas ferramentas básicas para desfazer modificações que você fez. Cuidado, porque você não pode desfazer algumas dessas mudanças. Essa é uma das poucas áreas no Git onde você pode perder algum trabalho se fizer errado. -
    Para voltar ao último commit:

    - -
    git reset --hard HEAD~1
    -

    Para voltar ao último commit e mantém os últimos arquivos no Stage:

    - -
    git reset --soft HEAD~1
    -

    Volta para o commit com a hash XXXXXXXXXXX:

    - -
    git reset --hard XXXXXXXXXXX
    -
    Recuperando commit apagado pelo git reset
    - -

    Para visualizar os hashs

    - -
    git reflog
    -

    E para aplicar:

    - -
    git merge {hash}
    -
    -
    -
    -
    -

    git rm

    - - - -
    -
    -
    - -

    Para remover um arquivo do Git, você tem que removê-lo dos arquivos que estão sendo monitorados (mais precisamente, removê-lo da sua área de seleção) e então fazer o commit. O comando git - rm faz isso e também remove o arquivo do seu diretório para você não ver ele como arquivo não monitorado (untracked file) na próxima vez. -

    - -
    git rm -f {arquivo}
    -

    Se você modificou o arquivo e já o adicionou na área de seleção, você deve forçar a remoção com a opção -f. Essa é uma funcionalidade de segurança para prevenir remoções acidentais de dados que ainda não foram gravados em um snapshot e não podem ser recuperados do Git.

    - -
    -
    -
    -
    -

    git mv

    - - - -
    -
    -
    - -

    Diferente de muitos sistemas VCS, o Git não monitora explicitamente arquivos movidos. -
    É um pouco confuso que o Git tenha um comando mv. Se você quiser renomear um arquivo no Git, você pode fazer isso com

    - -
    git mv arquivo_origem arquivo_destino
    -

    e funciona. De fato, se você fizer algo desse tipo e consultar o status, você verá que o Git considera que o arquivo foi renomeado.

    - -

    No entanto, isso é equivalente a rodar algo como:

    - -
    mv README.txt README -
    git rm README.txt -
    git add README
    -

    O Git descobre que o arquivo foi renomeado implicitamente, então ele não se importa se você renomeou por este caminho ou com o comando mv. A única diferença real é que o comando - mv - é mais conveniente, executa três passos de uma vez. O mais importante, você pode usar qualquer ferramenta para renomear um arquivo, e usar add/rm depois, antes de consolidar com o commit.

    -
    -
    -
    -
    -
    -
    -

    Branch e Merge

    - -
    -

    git branch

    - - - -
    -
    -
    - -

    Um branch no Git é simplesmente um leve ponteiro móvel para um dos commits. O nome do branch padrão no Git é master. Como você inicialmente fez commits, você tem um branch principal (master - branch) que aponta para o último commit que você fez. Cada vez que você faz um commit ele avança automaticamente. -
    O que acontece se você criar um novo branch? Bem, isso cria um novo ponteiro para que você possa se mover. Vamos dizer que você crie um novo branch chamado testing. Você faz isso com o comando git branch:

    - -
    git branch testing
    -

    Isso cria um novo ponteiro para o mesmo commit em que você está no momento. -
    Para mudar para um branch existente, você executa o comando git checkout. Vamos mudar para o novo branch testing: -

    - -
    git checkout testing
    -

    Isto move o HEAD para apontar para o branch testing.

    -
    -
    -
    -
    -

    git checkout

    - - - -
    -
    -
    -

    Com o git checkout você pode mudar de branch, caso a branch ainda não exista você poderá passar o parâmetro -b para criar.

    -
    git checkout -b {nome_da_branch}
    -
    -
    -
    -
    -

    git merge

    - - - -
    -
    -
    -

    Suponha que você decidiu que o trabalho na tarefa #53 está completo e pronto para ser feito o merge no branch master. Para fazer isso, você fará o merge do seu branch iss53, bem como o merge do branch hotfix de antes. Tudo que você tem a fazer é executar o checkout do branch para onde deseja fazer o merge e então rodar o comando git merge:

    -
    git checkout master -
    git merge iss53
    -
    -
    -
    -
    -

    git mergetool

    - - - -
    -
    -
    -

    Se você quer usar uma ferramenta gráfica para resolver esses problemas, você pode executar o seguinte comando que abre uma ferramenta visual de merge adequada e percorre os conflitos.

    -
    git mergetool
    -
    Arquivos Temporários
    -

    git mergetool cria * .orig arquivos de backup ao resolver fusões. Estes são seguros para remover uma vez que um arquivo foi fundida e sua git mergetool sessão foi concluída.

    -
    -
    -
    -
    -

    git log

    - - - -
    -
    -
    -

    Depois que você tiver criado vários commits, ou se clonou um repositório com um histórico de commits existente, você provavelmente vai querer ver o que aconteceu. A ferramente mais básica e poderosa para fazer isso é o comando:

    -
    git log
    -
    -
    -
    -
    -

    git stash

    - - - -
    -
    -
    -

    Muitas vezes, quando você está trabalhando em uma parte do seu projeto, as coisas estão em um estado confuso e você quer mudar de branch por um tempo para trabalhar em outra coisa. O problema é, você não quer fazer o commit de um trabalho incompleto somente para voltar a ele mais tarde. A resposta para esse problema é o comando git stash. -
    Você quer mudar de branch, mas não quer fazer o commit do que você ainda está trabalhando; você irá fazer o stash das modificações. Para fazer um novo stash na sua pilha, execute:

    -
    git stash
    -

    Seu diretório de trabalho estará limpo. -
    Neste momento, você pode facilmente mudar de branch e trabalhar em outra coisa; suas alterações estão armazenadas na sua pilha. Para ver as stashes que você guardou, você pode usar

    -
    git stash list
    -

    Você pode aplicar aquele que acabou de fazer o stash com o comando mostrado na saída de ajuda do comando stash original: git stash apply. Se você quer aplicar um dos stashes mais antigos, você pode especificá-lo, assim: git stash apply stash@{2}. Se você não especificar um stash, Git assume que é o stash mais recente e tenta aplicá-lo.

    -
    -
    -
    -
    -

    git tag

    - - - -
    -
    -
    -

    Git tem a habilidade de criar tags em pontos específicos na história do código como pontos importantes. Geralmente as pessoas usam esta funcionalidade para marcar pontos de release (v1.0, e por aí vai). Nesta seção, você aprenderá como listar as tags disponíveis, como criar novas tags, e quais são os tipos diferentes de tags. -
    Para listar as tags execute:

    -
    - git tag -
    -

    Para criar uma tag basta executar o seguinte comando, caso não queira criar a tag anotada, somente retire os parâmetros -a e -m.

    -
    - git tag -a v1.4 -m 'my version 1.4' -
    -
    -
    -
    -
    -
    -
    -

    Compartilhar e Atualizar Projetos

    - -
    -

    git fetch

    - - - -
    -
    -
    -

    Para pegar dados dos seus projetos remotos, você pode executar:

    -
    - git fetch origin -
    -

    Esse comando vai até o projeto remoto e pega todos os dados que você ainda não tem. Depois de fazer isso, você deve ter referências para todos os branches desse remoto, onde você pode fazer o merge ou inspecionar a qualquer momento.

    -
    -
    -
    -
    -

    git pull

    - - - -
    -
    -
    -

    Incorpora as alterações de um repositório remoto no branch atual. Em seu modo padrão, git pull é uma abreviação para git fetch seguido de git merge FETCH_HEAD. Por exemplo, se eu estiver em uma branch chamada develop e quiser atualizar caso haja atualizações remotamente:

    -
    - git pull origin develop -
    -
    -
    -
    -
    -

    git push

    - - - -
    -
    -
    -

    O git push é o comando em que você transfere commits a partir do seu repositório local para um repositório remoto. É a contrapartida do git fetch, que busca importações e comprometem as agências locais, utilizando o git push as exportações comprometem as filiais remotas. Para fazer isso, você executa git push [nome_do_repositório_remoto] [nome_da_sua_branch_local], que vai tentar fazer que o [nome_do_repositório_remoto] receba a sua branch [nome_da_sua_branch_local] contendo todos seus commits com alterações. Por exemplo:

    -
    - git push origin develop -
    -
    -
    -
    -
    -

    git remote

    -
    -
    -

    git submodule

    -
    -
    -
    -
    -

    Inspeção e Comparação

    - -
    -

    git show

    -
    -
    -

    git log

    -
    -
    -

    git diff

    -
    -
    -

    git shortlog

    -
    -
    -

    git describe

    -
    -
    -
    -
    -

    Pacotes

    - -
    -

    git apply

    -
    -
    -

    git cherry-pick

    -
    -
    -

    git diff

    -
    -
    -

    git rebase

    -
    -
    -

    git revert

    -
    -
    -
    -
    -

    Debugando

    - -
    -

    git bisect

    -
    -
    -

    git blame

    -
    -
    -

    git grep

    -
    -
    -
    -
    -

    Email

    - -
    -

    git am

    -
    -
    -

    git apply

    -
    -
    -

    git format-patch

    -
    -
    -

    git send-email

    -
    -
    -

    git request-pull

    -
    -
    -
    -
    -

    Sistemas Externos

    - -
    -

    git svn

    -
    -
    -

    git fast-import

    -
    -
    -
    -
    -

    Administração

    - -
    -

    git clean

    -
    -
    -

    git gc

    -
    -
    -

    git fsck

    -
    -
    -

    git reflog

    -
    -
    -

    git filter-branch

    -
    -
    -

    git instaweb

    -
    -
    -

    git archive

    -
    -
    -
    -
    -

    Servidor

    - -
    -

    git daemon

    -
    -
    -

    git update-server-info

    -
    -
    -
    -
    -

    Canalização de Código

    - -
    -

    git cat-file

    -
    -
    -

    git commit-tree

    -
    -
    -

    git count-objects

    -
    -
    -

    git diff-index

    -
    -
    -

    git for-each-ref

    -
    -
    -

    git hash-object

    -
    -
    -

    git merge-base

    -
    -
    -

    git read-tree

    -
    -
    -

    git rev-list

    -
    -
    -

    git rev-parse

    -
    -
    -

    git show-ref

    -
    -
    -

    git symbolic-ref

    -
    -
    -

    git update-index

    -
    -
    -

    git update-ref

    -
    -
    -

    git verify-pack

    -
    -
    -

    git write-tree

    -
    -
    -
    - -
    - -
    -
    -
    -
    -
    - +
    +
    + {% include nav.html %} +
    - - - - - - - - - - +
    + {% include footer.html %} +
    From 46e25e496ed8d9c9fb1df1c1fee2db45f7449064 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 24 Feb 2026 22:00:36 +0000 Subject: [PATCH 3/7] Revert Jekyll refactoring: restore original pure HTML site MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove all Jekyll files (_config.yml, _layouts/, _includes/, _data/, Gemfile) and restore the original monolithic index.html and .gitignore. Restore AGENTS.md to the original non-Jekyll version. Co-authored-by: Rafael Corrêa Gomes --- .bundle/config | 2 - .gitignore | 7 +- AGENTS.md | 35 +- Gemfile | 7 - Gemfile.lock | 236 ---- _config.yml | 27 - _data/navigation.yml | 202 --- _includes/footer.html | 19 - _includes/head.html | 68 - _includes/header.html | 20 - _includes/nav.html | 27 - _includes/scripts.html | 14 - _includes/sections/administracao.html | 25 - _includes/sections/basico.html | 193 --- _includes/sections/branch-e-merge.html | 141 -- _includes/sections/canalizacao-de-codigo.html | 52 - .../sections/compartilhar-e-atualizar.html | 65 - _includes/sections/criando-o-projeto.html | 63 - _includes/sections/debugando.html | 13 - _includes/sections/email.html | 19 - _includes/sections/inspecao-e-comparacao.html | 19 - .../sections/instalando-e-configurando.html | 99 -- _includes/sections/pacotes.html | 19 - _includes/sections/servidor.html | 10 - _includes/sections/sistemas-externos.html | 10 - _layouts/default.html | 18 - index.html | 1142 ++++++++++++++++- 27 files changed, 1110 insertions(+), 1442 deletions(-) delete mode 100644 .bundle/config delete mode 100644 Gemfile delete mode 100644 Gemfile.lock delete mode 100644 _config.yml delete mode 100644 _data/navigation.yml delete mode 100644 _includes/footer.html delete mode 100644 _includes/head.html delete mode 100644 _includes/header.html delete mode 100644 _includes/nav.html delete mode 100644 _includes/scripts.html delete mode 100644 _includes/sections/administracao.html delete mode 100644 _includes/sections/basico.html delete mode 100644 _includes/sections/branch-e-merge.html delete mode 100644 _includes/sections/canalizacao-de-codigo.html delete mode 100644 _includes/sections/compartilhar-e-atualizar.html delete mode 100644 _includes/sections/criando-o-projeto.html delete mode 100644 _includes/sections/debugando.html delete mode 100644 _includes/sections/email.html delete mode 100644 _includes/sections/inspecao-e-comparacao.html delete mode 100644 _includes/sections/instalando-e-configurando.html delete mode 100644 _includes/sections/pacotes.html delete mode 100644 _includes/sections/servidor.html delete mode 100644 _includes/sections/sistemas-externos.html delete mode 100644 _layouts/default.html diff --git a/.bundle/config b/.bundle/config deleted file mode 100644 index 2369228..0000000 --- a/.bundle/config +++ /dev/null @@ -1,2 +0,0 @@ ---- -BUNDLE_PATH: "vendor/bundle" diff --git a/.gitignore b/.gitignore index 8a1aad3..723ef36 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1 @@ -.idea -_site/ -.sass-cache/ -.jekyll-cache/ -.jekyll-metadata -vendor/ +.idea \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index 22615cd..b94e996 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,44 +1,21 @@ ## Cursor Cloud specific instructions -This is a Jekyll-powered static website hosted on GitHub Pages (main branch). It serves as a Git commands reference in Portuguese. - -### Project structure - -- `_config.yml` — Jekyll configuration (site metadata, excludes) -- `_layouts/default.html` — Base HTML layout (head, body wrapper, scripts) -- `_includes/` — Reusable partials: `head.html`, `header.html`, `nav.html`, `footer.html`, `scripts.html` -- `_includes/sections/` — One file per content section (13 files) -- `_data/navigation.yml` — Sidebar navigation data (drives `_includes/nav.html`) -- `index.html` — Main page (front matter + section includes) -- `Gemfile` — Ruby dependencies (Jekyll 4.x, jekyll-seo-tag) +This is a static HTML/CSS website (no build tools, no package managers, no tests). It serves as a Git commands reference in Portuguese, hosted on GitHub Pages. ### Running locally -``` -bundle install --path vendor/bundle -bundle exec jekyll serve -``` - -The dev server runs at `http://localhost:4000/` with live-reload on file changes. - -### Building +Serve files with any static HTTP server from the repo root: ``` -bundle exec jekyll build +python3 -m http.server 8000 ``` -Output goes to `_site/`. +Then open `http://localhost:8000/` in a browser. ### Linting -No project-defined lint scripts. HTML can be validated with `tidy -q -e _site/index.html` after building. +There are no project-defined lint or test scripts. HTML can be validated with `tidy -q -e index.html`. ### CI -The GitHub Actions workflow (`.github/workflows/jekyll-docker.yml`) runs a Jekyll build in a Docker container on pushes/PRs to master. - -### Gotchas - -- `vendor/` must be in both `.gitignore` and `_config.yml` `exclude:` list, otherwise Jekyll tries to process bundled gems. -- The `_data/navigation.yml` file drives the sidebar navigation; add new sections there and create a matching `_includes/sections/*.html` file. -- Site metadata (title, description, author, GTM ID) is centralized in `_config.yml` and referenced via Liquid variables in includes. +The GitHub Actions workflow (`.github/workflows/jekyll-docker.yml`) runs a Jekyll build in a Docker container, but the site itself is served as raw static files on GitHub Pages. diff --git a/Gemfile b/Gemfile deleted file mode 100644 index ad81a05..0000000 --- a/Gemfile +++ /dev/null @@ -1,7 +0,0 @@ -source "https://rubygems.org" - -gem "jekyll", "~> 4.4" - -group :jekyll_plugins do - gem "jekyll-seo-tag" -end diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 2cf7723..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,236 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - addressable (2.8.8) - public_suffix (>= 2.0.2, < 8.0) - base64 (0.3.0) - bigdecimal (4.0.1) - colorator (1.1.0) - concurrent-ruby (1.3.6) - csv (3.3.5) - em-websocket (0.5.3) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0) - eventmachine (1.2.7) - ffi (1.17.3) - ffi (1.17.3-aarch64-linux-gnu) - ffi (1.17.3-aarch64-linux-musl) - ffi (1.17.3-arm-linux-gnu) - ffi (1.17.3-arm-linux-musl) - ffi (1.17.3-arm64-darwin) - ffi (1.17.3-x86-linux-gnu) - ffi (1.17.3-x86-linux-musl) - ffi (1.17.3-x86_64-darwin) - ffi (1.17.3-x86_64-linux-gnu) - ffi (1.17.3-x86_64-linux-musl) - forwardable-extended (2.6.0) - google-protobuf (4.33.5) - bigdecimal - rake (>= 13) - google-protobuf (4.33.5-aarch64-linux-gnu) - bigdecimal - rake (>= 13) - google-protobuf (4.33.5-aarch64-linux-musl) - bigdecimal - rake (>= 13) - google-protobuf (4.33.5-arm64-darwin) - bigdecimal - rake (>= 13) - google-protobuf (4.33.5-x86-linux-gnu) - bigdecimal - rake (>= 13) - google-protobuf (4.33.5-x86-linux-musl) - bigdecimal - rake (>= 13) - google-protobuf (4.33.5-x86_64-darwin) - bigdecimal - rake (>= 13) - google-protobuf (4.33.5-x86_64-linux-gnu) - bigdecimal - rake (>= 13) - google-protobuf (4.33.5-x86_64-linux-musl) - bigdecimal - rake (>= 13) - http_parser.rb (0.8.1) - i18n (1.14.8) - concurrent-ruby (~> 1.0) - jekyll (4.4.1) - addressable (~> 2.4) - base64 (~> 0.2) - colorator (~> 1.0) - csv (~> 3.0) - em-websocket (~> 0.5) - i18n (~> 1.0) - jekyll-sass-converter (>= 2.0, < 4.0) - jekyll-watch (~> 2.0) - json (~> 2.6) - kramdown (~> 2.3, >= 2.3.1) - kramdown-parser-gfm (~> 1.0) - liquid (~> 4.0) - mercenary (~> 0.3, >= 0.3.6) - pathutil (~> 0.9) - rouge (>= 3.0, < 5.0) - safe_yaml (~> 1.0) - terminal-table (>= 1.8, < 4.0) - webrick (~> 1.7) - jekyll-sass-converter (3.1.0) - sass-embedded (~> 1.75) - jekyll-seo-tag (2.8.0) - jekyll (>= 3.8, < 5.0) - jekyll-watch (2.2.1) - listen (~> 3.0) - json (2.18.1) - kramdown (2.5.2) - rexml (>= 3.4.4) - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - liquid (4.0.4) - listen (3.10.0) - logger - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - logger (1.7.0) - mercenary (0.4.0) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (7.0.2) - rake (13.3.1) - rb-fsevent (0.11.2) - rb-inotify (0.11.1) - ffi (~> 1.0) - rexml (3.4.4) - rouge (4.7.0) - safe_yaml (1.0.5) - sass-embedded (1.97.3) - google-protobuf (~> 4.31) - rake (>= 13) - sass-embedded (1.97.3-aarch64-linux-android) - google-protobuf (~> 4.31) - sass-embedded (1.97.3-aarch64-linux-gnu) - google-protobuf (~> 4.31) - sass-embedded (1.97.3-aarch64-linux-musl) - google-protobuf (~> 4.31) - sass-embedded (1.97.3-arm-linux-androideabi) - google-protobuf (~> 4.31) - sass-embedded (1.97.3-arm-linux-gnueabihf) - google-protobuf (~> 4.31) - sass-embedded (1.97.3-arm-linux-musleabihf) - google-protobuf (~> 4.31) - sass-embedded (1.97.3-arm64-darwin) - google-protobuf (~> 4.31) - sass-embedded (1.97.3-riscv64-linux-android) - google-protobuf (~> 4.31) - sass-embedded (1.97.3-riscv64-linux-gnu) - google-protobuf (~> 4.31) - sass-embedded (1.97.3-riscv64-linux-musl) - google-protobuf (~> 4.31) - sass-embedded (1.97.3-x86_64-darwin) - google-protobuf (~> 4.31) - sass-embedded (1.97.3-x86_64-linux-android) - google-protobuf (~> 4.31) - sass-embedded (1.97.3-x86_64-linux-gnu) - google-protobuf (~> 4.31) - sass-embedded (1.97.3-x86_64-linux-musl) - google-protobuf (~> 4.31) - terminal-table (3.0.2) - unicode-display_width (>= 1.1.1, < 3) - unicode-display_width (2.6.0) - webrick (1.9.2) - -PLATFORMS - aarch64-linux-android - aarch64-linux-gnu - aarch64-linux-musl - arm-linux-androideabi - arm-linux-gnu - arm-linux-gnueabihf - arm-linux-musl - arm-linux-musleabihf - arm64-darwin - riscv64-linux-android - riscv64-linux-gnu - riscv64-linux-musl - ruby - x86-linux-gnu - x86-linux-musl - x86_64-darwin - x86_64-linux-android - x86_64-linux-gnu - x86_64-linux-musl - -DEPENDENCIES - jekyll (~> 4.4) - jekyll-seo-tag - -CHECKSUMS - addressable (2.8.8) sha256=7c13b8f9536cf6364c03b9d417c19986019e28f7c00ac8132da4eb0fe393b057 - base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b - bigdecimal (4.0.1) sha256=8b07d3d065a9f921c80ceaea7c9d4ae596697295b584c296fe599dd0ad01c4a7 - colorator (1.1.0) sha256=e2f85daf57af47d740db2a32191d1bdfb0f6503a0dfbc8327d0c9154d5ddfc38 - concurrent-ruby (1.3.6) sha256=6b56837e1e7e5292f9864f34b69c5a2cbc75c0cf5338f1ce9903d10fa762d5ab - csv (3.3.5) sha256=6e5134ac3383ef728b7f02725d9872934f523cb40b961479f69cf3afa6c8e73f - em-websocket (0.5.3) sha256=f56a92bde4e6cb879256d58ee31f124181f68f8887bd14d53d5d9a292758c6a8 - eventmachine (1.2.7) sha256=994016e42aa041477ba9cff45cbe50de2047f25dd418eba003e84f0d16560972 - ffi (1.17.3) sha256=0e9f39f7bb3934f77ad6feab49662be77e87eedcdeb2a3f5c0234c2938563d4c - ffi (1.17.3-aarch64-linux-gnu) sha256=28ad573df26560f0aedd8a90c3371279a0b2bd0b4e834b16a2baa10bd7a97068 - ffi (1.17.3-aarch64-linux-musl) sha256=020b33b76775b1abacc3b7d86b287cef3251f66d747092deec592c7f5df764b2 - ffi (1.17.3-arm-linux-gnu) sha256=5bd4cea83b68b5ec0037f99c57d5ce2dd5aa438f35decc5ef68a7d085c785668 - ffi (1.17.3-arm-linux-musl) sha256=0d7626bb96265f9af78afa33e267d71cfef9d9a8eb8f5525344f8da6c7d76053 - ffi (1.17.3-arm64-darwin) sha256=0c690555d4cee17a7f07c04d59df39b2fba74ec440b19da1f685c6579bb0717f - ffi (1.17.3-x86-linux-gnu) sha256=868a88fcaf5186c3a46b7c7c2b2c34550e1e61a405670ab23f5b6c9971529089 - ffi (1.17.3-x86-linux-musl) sha256=f0286aa6ef40605cf586e61406c446de34397b85dbb08cc99fdaddaef8343945 - ffi (1.17.3-x86_64-darwin) sha256=1f211811eb5cfaa25998322cdd92ab104bfbd26d1c4c08471599c511f2c00bb5 - ffi (1.17.3-x86_64-linux-gnu) sha256=3746b01f677aae7b16dc1acb7cb3cc17b3e35bdae7676a3f568153fb0e2c887f - ffi (1.17.3-x86_64-linux-musl) sha256=086b221c3a68320b7564066f46fed23449a44f7a1935f1fe5a245bd89d9aea56 - forwardable-extended (2.6.0) sha256=1bec948c469bbddfadeb3bd90eb8c85f6e627a412a3e852acfd7eaedbac3ec97 - google-protobuf (4.33.5) sha256=1b64fb774c101b23ac3f6923eca24be04fd971635d235c4cd4cfe0d752620da0 - google-protobuf (4.33.5-aarch64-linux-gnu) sha256=f70ca066e37a7ac60b4f34a836bb48ca3fc41a9371310052e484d8c9f925ff39 - google-protobuf (4.33.5-aarch64-linux-musl) sha256=d9ae90025f05db642e5603de5dbb2390cd1215bac7507fa575cc20b0db7e11a1 - google-protobuf (4.33.5-arm64-darwin) sha256=996d4e93c4232cc42f0facd821a92b4f4a926c3c9c1a768e7d768b33d9ef72f9 - google-protobuf (4.33.5-x86-linux-gnu) sha256=8d0d056743449221c723bffcf423ee8028a7028b4fca159db9692ec79fa4d185 - google-protobuf (4.33.5-x86-linux-musl) sha256=08de722ce05e619dcfa75a1a998615694e7a0c4254d4bb1557834d98d5090851 - google-protobuf (4.33.5-x86_64-darwin) sha256=173d1d6c9f0de93fd9ee25fde172d6fb6376099dca8844e19bc5782bbc7b93b0 - google-protobuf (4.33.5-x86_64-linux-gnu) sha256=a782adf86bfba207740b49d7bb9ccdc25c4fb8f800fe222af62bce951149338a - google-protobuf (4.33.5-x86_64-linux-musl) sha256=d14feec9118f44cfdc3ee4a1d1baa4e6dd77fa418967ccf22ecbe76b8c1bacbf - http_parser.rb (0.8.1) sha256=9ae8df145b39aa5398b2f90090d651c67bd8e2ebfe4507c966579f641e11097a - i18n (1.14.8) sha256=285778639134865c5e0f6269e0b818256017e8cde89993fdfcbfb64d088824a5 - jekyll (4.4.1) sha256=4c1144d857a5b2b80d45b8cf5138289579a9f8136aadfa6dd684b31fe2bc18c1 - jekyll-sass-converter (3.1.0) sha256=83925d84f1d134410c11d0c6643b0093e82e3a3cf127e90757a85294a3862443 - jekyll-seo-tag (2.8.0) sha256=3f2ed1916d56f14ebfa38e24acde9b7c946df70cb183af2cb5f0598f21ae6818 - jekyll-watch (2.2.1) sha256=bc44ed43f5e0a552836245a54dbff3ea7421ecc2856707e8a1ee203a8387a7e1 - json (2.18.1) sha256=fe112755501b8d0466b5ada6cf50c8c3f41e897fa128ac5d263ec09eedc9f986 - kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa - kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 - liquid (4.0.4) sha256=4fcfebb1a045e47918388dbb7a0925e7c3893e58d2bd6c3b3c73ec17a2d8fdb3 - listen (3.10.0) sha256=c6e182db62143aeccc2e1960033bebe7445309c7272061979bb098d03760c9d2 - logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 - mercenary (0.4.0) sha256=b25a1e4a59adca88665e08e24acf0af30da5b5d859f7d8f38fba52c28f405138 - pathutil (0.16.2) sha256=e43b74365631cab4f6d5e4228f812927efc9cb2c71e62976edcb252ee948d589 - public_suffix (7.0.2) sha256=9114090c8e4e7135c1fd0e7acfea33afaab38101884320c65aaa0ffb8e26a857 - rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c - rb-fsevent (0.11.2) sha256=43900b972e7301d6570f64b850a5aa67833ee7d87b458ee92805d56b7318aefe - rb-inotify (0.11.1) sha256=a0a700441239b0ff18eb65e3866236cd78613d6b9f78fea1f9ac47a85e47be6e - rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142 - rouge (4.7.0) sha256=dba5896715c0325c362e895460a6d350803dbf6427454f49a47500f3193ea739 - safe_yaml (1.0.5) sha256=a6ac2d64b7eb027bdeeca1851fe7e7af0d668e133e8a88066a0c6f7087d9f848 - sass-embedded (1.97.3) sha256=c4136da69ae3acfa7b0809f4ec10891125edf57df214a2d1ab570f721f96f7a6 - sass-embedded (1.97.3-aarch64-linux-android) sha256=623b2f52fed6e3696c6445406e4efaef57b54442cc35604bfffbb82aef7d5c45 - sass-embedded (1.97.3-aarch64-linux-gnu) sha256=81915bb19ce7e224eae534e75e828f4ab5acddcb17e54da0b5ef91d932462836 - sass-embedded (1.97.3-aarch64-linux-musl) sha256=508c92fa2f9e58f9072325e02f011bd22c7e428465c67fafaee570d0bc40563b - sass-embedded (1.97.3-arm-linux-androideabi) sha256=e2ef33b187066e09374023e58e72cf3b5baabe6b77ecd74356fe9b4892a1c6e1 - sass-embedded (1.97.3-arm-linux-gnueabihf) sha256=ce443b57f3d7f03740267cf0f2cdff13e8055dd5938488967746f29f230222da - sass-embedded (1.97.3-arm-linux-musleabihf) sha256=be3972424616f916ce1f4f41228266d57339e490dfd7ca0cea5588579564d4c0 - sass-embedded (1.97.3-arm64-darwin) sha256=8897d3503efe75c30584070a7104095545f5157665029aeb9bff3fa533a73861 - sass-embedded (1.97.3-riscv64-linux-android) sha256=201426b3e58611aa8cf34a7574df51905ec42fefb5a69982cc8497ac7fb26a6b - sass-embedded (1.97.3-riscv64-linux-gnu) sha256=d7bac32f4de55c589a036da13ac4482bf5b7dfac980b4c0203d31a1bd9f07622 - sass-embedded (1.97.3-riscv64-linux-musl) sha256=621d981d700e2b8d0459b5ea696fff746dfa07d6b6bbc70cd982905214b07888 - sass-embedded (1.97.3-x86_64-darwin) sha256=578f167907ee2a4d355a5a40bcf35d2e3eb90c87008dcd9ce31a2c4a877697f6 - sass-embedded (1.97.3-x86_64-linux-android) sha256=8f5e179bee8610be432499f228ea4e53ab362b1db0da1ae3cd3e76b114712372 - sass-embedded (1.97.3-x86_64-linux-gnu) sha256=173a4d0dbe2fffdf7482bd3e82fb597dfc658c18d1e8fd746aa7d5077ed4e850 - sass-embedded (1.97.3-x86_64-linux-musl) sha256=fcc0dcb253ef174ea25283f8781ce9ce95a492663f4bdbb1d66bfae99267a9f7 - terminal-table (3.0.2) sha256=f951b6af5f3e00203fb290a669e0a85c5dd5b051b3b023392ccfd67ba5abae91 - unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a - webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 - -BUNDLED WITH - 4.0.6 diff --git a/_config.yml b/_config.yml deleted file mode 100644 index 62c2b95..0000000 --- a/_config.yml +++ /dev/null @@ -1,27 +0,0 @@ -title: Comandos Git -tagline: Aprenda Git do básico ao avançado -description: >- - Comandos Git, aprenda Git do básico ao avançado com tutorial para Windows, - Mac e Linux (Ubuntu) usando as principais ferramentas como GitHub, BitBucket e GitLab -author: Rafael Corrêa Gomes -url: "https://comandosgit.github.io" -baseurl: "" -lang: pt - -google_verification: "E5A42C839A2CF7FA50F0FB3FCA369D4E" -gtm_id: "GTM-T2DGXXP" - -keywords: >- - git branch, git commit, git remote, comandos git, github, git merge, - windows, mac, bitbucket, git, linux, ubuntu, debian, controle de versão, - git add, git pull, git push, git remote - -exclude: - - Gemfile - - Gemfile.lock - - README.md - - LICENSE - - LICENSE.html - - AGENTS.md - - .gitignore - - vendor/ diff --git a/_data/navigation.yml b/_data/navigation.yml deleted file mode 100644 index 96a60b2..0000000 --- a/_data/navigation.yml +++ /dev/null @@ -1,202 +0,0 @@ -- title: Instalando e Configurando - id: instalando-e-configurando - css_class: install - items: - - title: Instalação - id: instalacao - - title: git config - id: gitconfig - - title: git help - id: githelp - -- title: Criando o projeto - id: criando-o-projeto - css_class: project - items: - - title: git init - id: gitinit - - title: git clone - id: gitclone - -- title: Básico - id: basico - css_class: basic - items: - - title: git add - id: gitadd - - title: git status - id: gitstatus - - title: git diff - id: gitdiff - - title: git commit - id: gitcommit - - title: git reset - id: gitreset - - title: git rm - id: gitrm - - title: git mv - id: gitmv - -- title: Branch e Merge - id: branch - css_class: branch - items: - - title: git branch - id: gitbranch - - title: git checkout - id: gitcheckout - - title: git merge - id: gitmerge - - title: git mergetool - id: gitmergetool - - title: git log - id: gitlog - - title: git stash - id: gitstash - - title: git tag - id: gittag - -- title: Compartilhar e Atualizar Projetos - id: sharing - css_class: sharing - items: - - title: git fetch - id: gitfetch - - title: git pull - id: gitpull - - title: git push - id: gitpush - - title: git remote - id: gitremote - - title: git submodule - id: gitsubmodule - -- title: Inspeção e Comparação - id: inspect - css_class: inspect - items: - - title: git show - id: gitshow - - title: git log - id: gitlog2 - - title: git diff - id: gitdiff2 - - title: git shortlog - id: gitshortlog - - title: git describe - id: gitdescribe - -- title: Pacotes - id: patching - css_class: patching - items: - - title: git apply - id: gitapply - - title: git cherry-pick - id: gitcherrypick - - title: git diff - id: gitdiff3 - - title: git rebase - id: gitrebase - - title: git revert - id: gitrevert - -- title: Debugando - id: debug - css_class: debug - items: - - title: git bisect - id: gitbisect - - title: git blame - id: gitblame - - title: git grep - id: gitgrep - -- title: Email - id: email - css_class: email - items: - - title: git am - id: gitam - - title: git apply - id: gitapply2 - - title: git format-patch - id: gitformatpatch - - title: git send-email - id: gitsendemail - - title: git request-pull - id: gitrequestpull - -- title: Sistemas Externos - id: external - css_class: external - items: - - title: git svn - id: gitsvn - - title: git fast-import - id: gitfastimport - -- title: Administração - id: administration - css_class: administration - items: - - title: git clean - id: gitclean - - title: git gc - id: gitgc - - title: git fsck - id: gitfsck - - title: git reflog - id: gitreflog - - title: git filter-branch - id: gitfilterbranch - - title: git instaweb - id: gitinstaweb - - title: git archive - id: gitarchive - -- title: Servidor - id: server - css_class: server - items: - - title: git daemon - id: gitdaemon - - title: git update-server-info - id: gitupdateserverinfo - -- title: Canalização de Código - id: plumbing - css_class: plumbing - items: - - title: git cat-file - id: gitcatfile - - title: git commit-tree - id: gitcommittree - - title: git count-objects - id: gitcountobjects - - title: git diff-index - id: gitdiffindex - - title: git for-each-ref - id: gitforeachref - - title: git hash-object - id: githashobject - - title: git merge-base - id: gitmergebase - - title: git read-tree - id: gitreadtree - - title: git rev-list - id: gitrevlist - - title: git rev-parse - id: gitrevparse - - title: git show-ref - id: gitshowref - - title: git symbolic-ref - id: gitsymbolicref - - title: git update-index - id: gitupdateindex - - title: git update-ref - id: gitupdateref - - title: git verify-pack - id: gitverifypack - - title: git write-tree - id: gitwritetree diff --git a/_includes/footer.html b/_includes/footer.html deleted file mode 100644 index 8c86b18..0000000 --- a/_includes/footer.html +++ /dev/null @@ -1,19 +0,0 @@ - diff --git a/_includes/head.html b/_includes/head.html deleted file mode 100644 index 3c76347..0000000 --- a/_includes/head.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - -{{ site.title }} - {{ site.tagline }} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/_includes/header.html b/_includes/header.html deleted file mode 100644 index 8863256..0000000 --- a/_includes/header.html +++ /dev/null @@ -1,20 +0,0 @@ -
    -
    -
    -
    - - ComandosGit - -
    -
    -
    -
    -
    -

    {{ site.title }}

    -
    -
    -

    {{ site.tagline }}

    -
    -
    -
    -
    diff --git a/_includes/nav.html b/_includes/nav.html deleted file mode 100644 index a605a4f..0000000 --- a/_includes/nav.html +++ /dev/null @@ -1,27 +0,0 @@ - diff --git a/_includes/scripts.html b/_includes/scripts.html deleted file mode 100644 index 9e985f6..0000000 --- a/_includes/scripts.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - diff --git a/_includes/sections/administracao.html b/_includes/sections/administracao.html deleted file mode 100644 index 7a99fa9..0000000 --- a/_includes/sections/administracao.html +++ /dev/null @@ -1,25 +0,0 @@ -
    -

    Administração

    - -
    -

    git clean

    -
    -
    -

    git gc

    -
    -
    -

    git fsck

    -
    -
    -

    git reflog

    -
    -
    -

    git filter-branch

    -
    -
    -

    git instaweb

    -
    -
    -

    git archive

    -
    -
    diff --git a/_includes/sections/basico.html b/_includes/sections/basico.html deleted file mode 100644 index 676998c..0000000 --- a/_includes/sections/basico.html +++ /dev/null @@ -1,193 +0,0 @@ -
    -

    Básico

    - -
    -

    git add

    - - - -
    -
    -
    - -

    Quando um repositório é inicialmente clonado, todos os seus arquivos estarão monitorados e inalterados porque você simplesmente os obteve e ainda não os editou. Conforme você edita esses arquivos, o Git passa a vê-los como modificados, porque você os alterou desde seu último commit. Você seleciona esses arquivos modificados e então faz o commit de todas as alterações selecionadas e o ciclo se repete.

    -
    Monitorando Novos Arquivos
    - -

    Para passar a monitorar um novo arquivo, use o comando git add. Para monitorar o arquivo - README, você pode rodar isso:

    - -
    git add README
    -

    Se você rodar o comando git status, você pode ver que o seu arquivo README agora está sendo monitorado. Os arquivos monitorados serão os que faram parte do commit.

    -
    -
    -
    -
    -

    git status

    - - - -
    -
    -
    - -

    A principal ferramenta utilizada para determinar quais arquivos estão em quais estados é o comando: -

    - -
    git status
    -

    O comando lhe mostra em qual branch você se encontra. Vamos dizer que você adicione um novo arquivo em seu projeto, um simples arquivo README. Caso o arquivo não exista e você execute git status, você verá o arquivo não monitorado dessa forma:

    - -
    # On branch master -
    # Untracked files: -
    # (use "git add {file}..." to include in what will be committed) -
    # -
    # README -
    nothing added to commit but untracked files present (use "git add" to track) -
    -

    Você pode ver que o seu novo arquivo README não está sendo monitorado, pois está listado sob o cabeçalho "Untracked files" na saída do comando status. Não monitorado significa basicamente que o Git está vendo um arquivo que não existia na última captura (commit); o Git não vai incluí-lo nas suas capturas de commit até que você o diga explicitamente que assim o faça. Ele faz isso para que você não inclua acidentalmente arquivos binários gerados, ou outros arquivos que você não têm a intenção de incluir. Digamos, que você queira incluir o arquivo README, portanto vamos começar a monitorar este arquivo.

    -
    -
    -
    - -
    -

    git diff

    - - - -
    -
    -
    - -

    Se o comando git status for muito vago — você quer saber exatamente o que você alterou, não apenas quais arquivos foram alterados — você pode utilizar o comando.

    - -
    git diff
    -

    Apesar do comando git status responder essas duas perguntas de maneira geral, o git - diff mostra as linhas exatas que foram adicionadas e removidas — o patch, por assim dizer. -
    Se você quer ver o que selecionou que irá no seu próximo commit, pode utilizar:

    - -
    git diff --cached
    - -
    -
    -
    -
    -

    git commit

    - - - -
    -
    -
    - -

    Armazena o conteúdo atual do índice em um novo commit, juntamente com uma mensagem de registro do usuário que descreve as mudanças. -
    Se usa o commit depois de já ter feito o git add, para fazer o commit:

    - -
    git commit -m "Mensagem"
    -

    Para commitar também os arquivos versionados mesmo não estando no Stage basta adicionar o parâmetro -a

    - -
    git commit -a -m "Mensagem"
    -

    Refazendo commit quando esquecer de adicionar um arquivo no Stage:

    - -
    git commit -m "Mensagem" --amend -
    -

    O amend é destrutivo e só deve ser utilizado antes do commit ter sido enviado ao servidor remoto. -

    -
    -
    -
    -
    -

    git reset

    - - - -
    -
    -
    - -

    Em qualquer fase, você pode querer desfazer alguma coisa. Aqui, veremos algumas ferramentas básicas para desfazer modificações que você fez. Cuidado, porque você não pode desfazer algumas dessas mudanças. Essa é uma das poucas áreas no Git onde você pode perder algum trabalho se fizer errado. -
    Para voltar ao último commit:

    - -
    git reset --hard HEAD~1
    -

    Para voltar ao último commit e mantém os últimos arquivos no Stage:

    - -
    git reset --soft HEAD~1
    -

    Volta para o commit com a hash XXXXXXXXXXX:

    - -
    git reset --hard XXXXXXXXXXX
    -
    Recuperando commit apagado pelo git reset
    - -

    Para visualizar os hashs

    - -
    git reflog
    -

    E para aplicar:

    - -
    git merge {hash}
    -
    -
    -
    -
    -

    git rm

    - - - -
    -
    -
    - -

    Para remover um arquivo do Git, você tem que removê-lo dos arquivos que estão sendo monitorados (mais precisamente, removê-lo da sua área de seleção) e então fazer o commit. O comando git - rm faz isso e também remove o arquivo do seu diretório para você não ver ele como arquivo não monitorado (untracked file) na próxima vez. -

    - -
    git rm -f {arquivo}
    -

    Se você modificou o arquivo e já o adicionou na área de seleção, você deve forçar a remoção com a opção -f. Essa é uma funcionalidade de segurança para prevenir remoções acidentais de dados que ainda não foram gravados em um snapshot e não podem ser recuperados do Git.

    - -
    -
    -
    -
    -

    git mv

    - - - -
    -
    -
    - -

    Diferente de muitos sistemas VCS, o Git não monitora explicitamente arquivos movidos. -
    É um pouco confuso que o Git tenha um comando mv. Se você quiser renomear um arquivo no Git, você pode fazer isso com

    - -
    git mv arquivo_origem arquivo_destino
    -

    e funciona. De fato, se você fizer algo desse tipo e consultar o status, você verá que o Git considera que o arquivo foi renomeado.

    - -

    No entanto, isso é equivalente a rodar algo como:

    - -
    mv README.txt README -
    git rm README.txt -
    git add README
    -

    O Git descobre que o arquivo foi renomeado implicitamente, então ele não se importa se você renomeou por este caminho ou com o comando mv. A única diferença real é que o comando - mv - é mais conveniente, executa três passos de uma vez. O mais importante, você pode usar qualquer ferramenta para renomear um arquivo, e usar add/rm depois, antes de consolidar com o commit.

    -
    -
    -
    -
    diff --git a/_includes/sections/branch-e-merge.html b/_includes/sections/branch-e-merge.html deleted file mode 100644 index 208f5d5..0000000 --- a/_includes/sections/branch-e-merge.html +++ /dev/null @@ -1,141 +0,0 @@ -
    -

    Branch e Merge

    - -
    -

    git branch

    - - - -
    -
    -
    - -

    Um branch no Git é simplesmente um leve ponteiro móvel para um dos commits. O nome do branch padrão no Git é master. Como você inicialmente fez commits, você tem um branch principal (master - branch) que aponta para o último commit que você fez. Cada vez que você faz um commit ele avança automaticamente. -
    O que acontece se você criar um novo branch? Bem, isso cria um novo ponteiro para que você possa se mover. Vamos dizer que você crie um novo branch chamado testing. Você faz isso com o comando git branch:

    - -
    git branch testing
    -

    Isso cria um novo ponteiro para o mesmo commit em que você está no momento. -
    Para mudar para um branch existente, você executa o comando git checkout. Vamos mudar para o novo branch testing: -

    - -
    git checkout testing
    -

    Isto move o HEAD para apontar para o branch testing.

    -
    -
    -
    -
    -

    git checkout

    - - - -
    -
    -
    -

    Com o git checkout você pode mudar de branch, caso a branch ainda não exista você poderá passar o parâmetro -b para criar.

    -
    git checkout -b {nome_da_branch}
    -
    -
    -
    -
    -

    git merge

    - - - -
    -
    -
    -

    Suponha que você decidiu que o trabalho na tarefa #53 está completo e pronto para ser feito o merge no branch master. Para fazer isso, você fará o merge do seu branch iss53, bem como o merge do branch hotfix de antes. Tudo que você tem a fazer é executar o checkout do branch para onde deseja fazer o merge e então rodar o comando git merge:

    -
    git checkout master -
    git merge iss53
    -
    -
    -
    -
    -

    git mergetool

    - - - -
    -
    -
    -

    Se você quer usar uma ferramenta gráfica para resolver esses problemas, você pode executar o seguinte comando que abre uma ferramenta visual de merge adequada e percorre os conflitos.

    -
    git mergetool
    -
    Arquivos Temporários
    -

    git mergetool cria * .orig arquivos de backup ao resolver fusões. Estes são seguros para remover uma vez que um arquivo foi fundida e sua git mergetool sessão foi concluída.

    -
    -
    -
    -
    -

    git log

    - - - -
    -
    -
    -

    Depois que você tiver criado vários commits, ou se clonou um repositório com um histórico de commits existente, você provavelmente vai querer ver o que aconteceu. A ferramente mais básica e poderosa para fazer isso é o comando:

    -
    git log
    -
    -
    -
    -
    -

    git stash

    - - - -
    -
    -
    -

    Muitas vezes, quando você está trabalhando em uma parte do seu projeto, as coisas estão em um estado confuso e você quer mudar de branch por um tempo para trabalhar em outra coisa. O problema é, você não quer fazer o commit de um trabalho incompleto somente para voltar a ele mais tarde. A resposta para esse problema é o comando git stash. -
    Você quer mudar de branch, mas não quer fazer o commit do que você ainda está trabalhando; você irá fazer o stash das modificações. Para fazer um novo stash na sua pilha, execute:

    -
    git stash
    -

    Seu diretório de trabalho estará limpo. -
    Neste momento, você pode facilmente mudar de branch e trabalhar em outra coisa; suas alterações estão armazenadas na sua pilha. Para ver as stashes que você guardou, você pode usar

    -
    git stash list
    -

    Você pode aplicar aquele que acabou de fazer o stash com o comando mostrado na saída de ajuda do comando stash original: git stash apply. Se você quer aplicar um dos stashes mais antigos, você pode especificá-lo, assim: git stash apply stash@{2}. Se você não especificar um stash, Git assume que é o stash mais recente e tenta aplicá-lo.

    -
    -
    -
    -
    -

    git tag

    - - - -
    -
    -
    -

    Git tem a habilidade de criar tags em pontos específicos na história do código como pontos importantes. Geralmente as pessoas usam esta funcionalidade para marcar pontos de release (v1.0, e por aí vai). Nesta seção, você aprenderá como listar as tags disponíveis, como criar novas tags, e quais são os tipos diferentes de tags. -
    Para listar as tags execute:

    -
    - git tag -
    -

    Para criar uma tag basta executar o seguinte comando, caso não queira criar a tag anotada, somente retire os parâmetros -a e -m.

    -
    - git tag -a v1.4 -m 'my version 1.4' -
    -
    -
    -
    -
    diff --git a/_includes/sections/canalizacao-de-codigo.html b/_includes/sections/canalizacao-de-codigo.html deleted file mode 100644 index e9b2284..0000000 --- a/_includes/sections/canalizacao-de-codigo.html +++ /dev/null @@ -1,52 +0,0 @@ -
    -

    Canalização de Código

    - -
    -

    git cat-file

    -
    -
    -

    git commit-tree

    -
    -
    -

    git count-objects

    -
    -
    -

    git diff-index

    -
    -
    -

    git for-each-ref

    -
    -
    -

    git hash-object

    -
    -
    -

    git merge-base

    -
    -
    -

    git read-tree

    -
    -
    -

    git rev-list

    -
    -
    -

    git rev-parse

    -
    -
    -

    git show-ref

    -
    -
    -

    git symbolic-ref

    -
    -
    -

    git update-index

    -
    -
    -

    git update-ref

    -
    -
    -

    git verify-pack

    -
    -
    -

    git write-tree

    -
    -
    diff --git a/_includes/sections/compartilhar-e-atualizar.html b/_includes/sections/compartilhar-e-atualizar.html deleted file mode 100644 index 4b3be50..0000000 --- a/_includes/sections/compartilhar-e-atualizar.html +++ /dev/null @@ -1,65 +0,0 @@ -
    -

    Compartilhar e Atualizar Projetos

    - -
    -

    git fetch

    - - - -
    -
    -
    -

    Para pegar dados dos seus projetos remotos, você pode executar:

    -
    - git fetch origin -
    -

    Esse comando vai até o projeto remoto e pega todos os dados que você ainda não tem. Depois de fazer isso, você deve ter referências para todos os branches desse remoto, onde você pode fazer o merge ou inspecionar a qualquer momento.

    -
    -
    -
    -
    -

    git pull

    - - - -
    -
    -
    -

    Incorpora as alterações de um repositório remoto no branch atual. Em seu modo padrão, git pull é uma abreviação para git fetch seguido de git merge FETCH_HEAD. Por exemplo, se eu estiver em uma branch chamada develop e quiser atualizar caso haja atualizações remotamente:

    -
    - git pull origin develop -
    -
    -
    -
    -
    -

    git push

    - - - -
    -
    -
    -

    O git push é o comando em que você transfere commits a partir do seu repositório local para um repositório remoto. É a contrapartida do git fetch, que busca importações e comprometem as agências locais, utilizando o git push as exportações comprometem as filiais remotas. Para fazer isso, você executa git push [nome_do_repositório_remoto] [nome_da_sua_branch_local], que vai tentar fazer que o [nome_do_repositório_remoto] receba a sua branch [nome_da_sua_branch_local] contendo todos seus commits com alterações. Por exemplo:

    -
    - git push origin develop -
    -
    -
    -
    -
    -

    git remote

    -
    -
    -

    git submodule

    -
    -
    diff --git a/_includes/sections/criando-o-projeto.html b/_includes/sections/criando-o-projeto.html deleted file mode 100644 index dce8948..0000000 --- a/_includes/sections/criando-o-projeto.html +++ /dev/null @@ -1,63 +0,0 @@ -
    -

    Criando o projeto

    - -
    -

    git init

    - - - -
    -
    -
    - -

    Você pode obter um projeto Git utilizando duas formas principais. A primeira faz uso de um projeto ou diretório existente e o importa para o Git. A segunda clona um repositório Git existente a partir de outro servidor.

    -
    -
    Inicializando um Repositório em um Diretório Existente
    - -

    Caso você esteja iniciando o monitoramento de um projeto existente com Git, você precisa ir para o diretório do projeto e digitar

    - -
    git init
    -

    Isso cria um novo subdiretório chamado .git que contem todos os arquivos necessários de seu repositório — um esqueleto de repositório Git. Neste ponto, nada em seu projeto é monitorado. -

    -
    -
    Primeira versão
    - -

    Caso você queira começar a controlar o versionamento dos arquivos existentes (diferente de um diretório vazio), você provavelmente deve começar a monitorar esses arquivos e fazer um commit inicial. Você pode realizar isso com poucos comandos

    - -
    touch .gitignore -
    git add .gitignore -
    git commit -m "Versão inicial do projeto" -
    -

    Bem, nós iremos repassar esses comandos em um momento. Neste ponto, você tem um repositório Git com arquivos monitorados e um commit inicial.

    -
    -
    - -
    -
    -

    git clone

    - - - -
    -
    -
    - -

    Você clona um repositório com git clone [url]. Por exemplo, caso você queria clonar a biblioteca Git do Ruby chamada Grit, você pode fazê-lo da seguinte forma:

    - -
    git clone git://github.com/schacon/grit.git
    -

    Se você entrar no novo diretório grit, você verá todos os arquivos do projeto nele, pronto para serem editados ou utilizados. Caso você queira clonar o repositório em um diretório diferente de grit, é possível especificar esse diretório utilizando a opção abaixo:

    - -
    git clone git://github.com/schacon/grit.git mygrit
    -

    Este comando faz exatamente a mesma coisa que o anterior, mas o diretório alvo será chamado mygrit.

    -
    -
    - -
    -
    diff --git a/_includes/sections/debugando.html b/_includes/sections/debugando.html deleted file mode 100644 index 8f8d4a6..0000000 --- a/_includes/sections/debugando.html +++ /dev/null @@ -1,13 +0,0 @@ -
    -

    Debugando

    - -
    -

    git bisect

    -
    -
    -

    git blame

    -
    -
    -

    git grep

    -
    -
    diff --git a/_includes/sections/email.html b/_includes/sections/email.html deleted file mode 100644 index 6cad11f..0000000 --- a/_includes/sections/email.html +++ /dev/null @@ -1,19 +0,0 @@ -
    -

    Email

    - -
    -

    git am

    -
    -
    -

    git apply

    -
    -
    -

    git format-patch

    -
    -
    -

    git send-email

    -
    -
    -

    git request-pull

    -
    -
    diff --git a/_includes/sections/inspecao-e-comparacao.html b/_includes/sections/inspecao-e-comparacao.html deleted file mode 100644 index 47b2657..0000000 --- a/_includes/sections/inspecao-e-comparacao.html +++ /dev/null @@ -1,19 +0,0 @@ -
    -

    Inspeção e Comparação

    - -
    -

    git show

    -
    -
    -

    git log

    -
    -
    -

    git diff

    -
    -
    -

    git shortlog

    -
    -
    -

    git describe

    -
    -
    diff --git a/_includes/sections/instalando-e-configurando.html b/_includes/sections/instalando-e-configurando.html deleted file mode 100644 index c777c78..0000000 --- a/_includes/sections/instalando-e-configurando.html +++ /dev/null @@ -1,99 +0,0 @@ -
    -

    Instalando e Configurando

    - -
    -

    Instalação

    - - - -
    -
    - -
    -

    Instalar o Git no Windows é muito fácil. O projeto msysgit tem um dos procedimentos mais simples de instalação. Simplesmente baixe o arquivo exe do instalador a partir da página do GitHub e execute-o: -

    - - -

    Após concluir a instalação, você terá tanto uma versão command line (linha de comando, incluindo um cliente SSH que será útil depois) e uma GUI padrão.

    -
    -
    -

    Existem duas formas fáceis de se instalar Git em um Mac. A mais fácil delas é usar o instalador gráfico do Git, que você pode baixar da página do SourceForge:

    - - -

    A outra forma comum é instalar o Git via MacPorts (https://www.macports.org). Se você tem o MacPOrts instalado, instale o Git via

    - -
    sudo port install git-core +svn +doc +bash_completion +gitweb
    -
    -
    -

    Se você quiser instalar o Git no Linux via um instalador binário, você pode fazê-lo com a ferramenta de gerenciamento de pacotes (packages) disponível na sua distribuição. Caso você esteja no Fedora, você pode usar o yum:

    - -
    yum install git-core
    -

    Ou se você estiver em uma distribuição baseada no Debian, como o Ubuntu, use o apt-get:

    - -
    apt-get install git
    -
    -
    -
    -
    -

    git config

    - - - -
    -
    -
    - -

    A primeira coisa que você deve fazer quando instalar o Git é definir o seu nome de usuário e endereço de e-mail. Isso é importante porque todos os commits no Git utilizam essas informações, e está imutavelmente anexado nos commits que você realiza:

    - -
    git config --global user.name "John Doe" -
    git config --global user.email johndoe@example.com -
    -

    Relembrando, você só precisará fazer isso uma vez caso passe a opção --global, pois o Git sempre usará essa informação para qualquer coisa que você faça nesse sistema. Caso você queira sobrepor estas com um nome ou endereço de e-mail diferentes para projetos específicos, você pode executar o comando sem a opção --global quando estiver no próprio projeto.

    -
    -
    -
    - -

    Para ativar as cores nas respostas de comandos, você pode utilizar o seguinte comando:

    - Bem, nós iremos repassar esses comandos em um momento. Neste ponto, você tem um repositório Git com arquivos monitorados e um commit inicial. -
    git config --global color.ui true
    -
    - -
    -
    -
    -

    git help

    - - - -
    -
    -
    - -

    Se você precisar de ajuda ao usar Git, existem três maneiras de obter a ajuda para qualquer um dos comandos Git:

    - -
    git help {comando} -
    git {comando} --help -
    man git- {comando} -
    -
    - -
    -
    -
    diff --git a/_includes/sections/pacotes.html b/_includes/sections/pacotes.html deleted file mode 100644 index 6ee114b..0000000 --- a/_includes/sections/pacotes.html +++ /dev/null @@ -1,19 +0,0 @@ -
    -

    Pacotes

    - -
    -

    git apply

    -
    -
    -

    git cherry-pick

    -
    -
    -

    git diff

    -
    -
    -

    git rebase

    -
    -
    -

    git revert

    -
    -
    diff --git a/_includes/sections/servidor.html b/_includes/sections/servidor.html deleted file mode 100644 index 8108671..0000000 --- a/_includes/sections/servidor.html +++ /dev/null @@ -1,10 +0,0 @@ -
    -

    Servidor

    - -
    -

    git daemon

    -
    -
    -

    git update-server-info

    -
    -
    diff --git a/_includes/sections/sistemas-externos.html b/_includes/sections/sistemas-externos.html deleted file mode 100644 index 619c396..0000000 --- a/_includes/sections/sistemas-externos.html +++ /dev/null @@ -1,10 +0,0 @@ -
    -

    Sistemas Externos

    - -
    -

    git svn

    -
    -
    -

    git fast-import

    -
    -
    diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index 565c56e..0000000 --- a/_layouts/default.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - {% include head.html %} - - - - - - - - {{ content }} - - {% include scripts.html %} - - - diff --git a/index.html b/index.html index 8596c9a..70f2da0 100755 --- a/index.html +++ b/index.html @@ -1,49 +1,1113 @@ ---- -layout: default ---- -
    -
    -
    - {% include header.html %} + + -
    + + + + + + Comandos Git - Aprenda Git do básico ao avançado + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
    -
    - {% include sections/instalando-e-configurando.html %} -
    - {% include sections/criando-o-projeto.html %} -
    - {% include sections/basico.html %} -
    - {% include sections/branch-e-merge.html %} -
    - {% include sections/compartilhar-e-atualizar.html %} -
    - {% include sections/inspecao-e-comparacao.html %} -
    - {% include sections/pacotes.html %} -
    - {% include sections/debugando.html %} -
    - {% include sections/email.html %} + + + + + + + + + + + + + + + +
    +
    +
    +

    - {% include sections/sistemas-externos.html %} +
    +
    + + ComandosGit + +
    +
    +
    +
    +
    +

    Comandos Git

    +
    +
    +

    Aprenda Git do básico ao avançado

    +
    +
    +
    +
    + +
    + +
    +
    +
    +

    Instalando e Configurando

    + +
    +

    Instalação

    + + + +
    +
    + +
    +

    Instalar o Git no Windows é muito fácil. O projeto msysgit tem um dos procedimentos mais simples de instalação. Simplesmente baixe o arquivo exe do instalador a partir da página do GitHub e execute-o: +

    + + +

    Após concluir a instalação, você terá tanto uma versão command line (linha de comando, incluindo um cliente SSH que será útil depois) e uma GUI padrão.

    +
    +
    +

    Existem duas formas fáceis de se instalar Git em um Mac. A mais fácil delas é usar o instalador gráfico do Git, que você pode baixar da página do SourceForge:

    + + +

    A outra forma comum é instalar o Git via MacPorts (https://www.macports.org). Se você tem o MacPOrts instalado, instale o Git via

    + +
    sudo port install git-core +svn +doc +bash_completion +gitweb
    +
    +
    +

    Se você quiser instalar o Git no Linux via um instalador binário, você pode fazê-lo com a ferramenta de gerenciamento de pacotes (packages) disponível na sua distribuição. Caso você esteja no Fedora, você pode usar o yum:

    + +
    yum install git-core
    +

    Ou se você estiver em uma distribuição baseada no Debian, como o Ubuntu, use o apt-get:

    + +
    apt-get install git
    +
    +
    +
    +
    +

    git config

    + + + +
    +
    +
    + +

    A primeira coisa que você deve fazer quando instalar o Git é definir o seu nome de usuário e endereço de e-mail. Isso é importante porque todos os commits no Git utilizam essas informações, e está imutavelmente anexado nos commits que você realiza:

    + +
    git config --global user.name "John Doe" +
    git config --global user.email johndoe@example.com +
    +

    Relembrando, você só precisará fazer isso uma vez caso passe a opção --global, pois o Git sempre usará essa informação para qualquer coisa que você faça nesse sistema. Caso você queira sobrepor estas com um nome ou endereço de e-mail diferentes para projetos específicos, você pode executar o comando sem a opção --global quando estiver no próprio projeto.

    +
    +
    +
    + +

    Para ativar as cores nas respostas de comandos, você pode utilizar o seguinte comando:

    + Bem, nós iremos repassar esses comandos em um momento. Neste ponto, você tem um repositório Git com arquivos monitorados e um commit inicial. +
    git config --global color.ui true
    +
    + +
    +
    +
    +

    git help

    + + + +
    +
    +
    + +

    Se você precisar de ajuda ao usar Git, existem três maneiras de obter a ajuda para qualquer um dos comandos Git:

    + +
    git help {comando} +
    git {comando} --help +
    man git- {comando} +
    +
    + +
    +
    +
    +
    +
    +

    Criando o projeto

    + +
    +

    git init

    + + + +
    +
    +
    + +

    Você pode obter um projeto Git utilizando duas formas principais. A primeira faz uso de um projeto ou diretório existente e o importa para o Git. A segunda clona um repositório Git existente a partir de outro servidor.

    +
    +
    Inicializando um Repositório em um Diretório Existente
    + +

    Caso você esteja iniciando o monitoramento de um projeto existente com Git, você precisa ir para o diretório do projeto e digitar

    + +
    git init
    +

    Isso cria um novo subdiretório chamado .git que contem todos os arquivos necessários de seu repositório — um esqueleto de repositório Git. Neste ponto, nada em seu projeto é monitorado. +

    +
    +
    Primeira versão
    + +

    Caso você queira começar a controlar o versionamento dos arquivos existentes (diferente de um diretório vazio), você provavelmente deve começar a monitorar esses arquivos e fazer um commit inicial. Você pode realizar isso com poucos comandos

    + +
    touch .gitignore +
    git add .gitignore +
    git commit -m "Versão inicial do projeto" +
    +

    Bem, nós iremos repassar esses comandos em um momento. Neste ponto, você tem um repositório Git com arquivos monitorados e um commit inicial.

    +
    +
    + +
    +
    +

    git clone

    + + + +
    +
    +
    + +

    Você clona um repositório com git clone [url]. Por exemplo, caso você queria clonar a biblioteca Git do Ruby chamada Grit, você pode fazê-lo da seguinte forma:

    + +
    git clone git://github.com/schacon/grit.git
    +

    Se você entrar no novo diretório grit, você verá todos os arquivos do projeto nele, pronto para serem editados ou utilizados. Caso você queira clonar o repositório em um diretório diferente de grit, é possível especificar esse diretório utilizando a opção abaixo:

    + +
    git clone git://github.com/schacon/grit.git mygrit
    +

    Este comando faz exatamente a mesma coisa que o anterior, mas o diretório alvo será chamado mygrit.

    +
    +
    + +
    +
    +
    +
    +

    Básico

    + +
    +

    git add

    + + + +
    +
    +
    + +

    Quando um repositório é inicialmente clonado, todos os seus arquivos estarão monitorados e inalterados porque você simplesmente os obteve e ainda não os editou. Conforme você edita esses arquivos, o Git passa a vê-los como modificados, porque você os alterou desde seu último commit. Você seleciona esses arquivos modificados e então faz o commit de todas as alterações selecionadas e o ciclo se repete.

    +
    Monitorando Novos Arquivos
    + +

    Para passar a monitorar um novo arquivo, use o comando git add. Para monitorar o arquivo + README, você pode rodar isso:

    + +
    git add README
    +

    Se você rodar o comando git status, você pode ver que o seu arquivo README agora está sendo monitorado. Os arquivos monitorados serão os que faram parte do commit.

    +
    +
    +
    +
    +

    git status

    + + + +
    +
    +
    + +

    A principal ferramenta utilizada para determinar quais arquivos estão em quais estados é o comando: +

    + +
    git status
    +

    O comando lhe mostra em qual branch você se encontra. Vamos dizer que você adicione um novo arquivo em seu projeto, um simples arquivo README. Caso o arquivo não exista e você execute git status, você verá o arquivo não monitorado dessa forma:

    + +
    # On branch master +
    # Untracked files: +
    # (use "git add {file}..." to include in what will be committed) +
    # +
    # README +
    nothing added to commit but untracked files present (use "git add" to track) +
    +

    Você pode ver que o seu novo arquivo README não está sendo monitorado, pois está listado sob o cabeçalho "Untracked files" na saída do comando status. Não monitorado significa basicamente que o Git está vendo um arquivo que não existia na última captura (commit); o Git não vai incluí-lo nas suas capturas de commit até que você o diga explicitamente que assim o faça. Ele faz isso para que você não inclua acidentalmente arquivos binários gerados, ou outros arquivos que você não têm a intenção de incluir. Digamos, que você queira incluir o arquivo README, portanto vamos começar a monitorar este arquivo.

    +
    +
    +
    + +
    +

    git diff

    + + + +
    +
    +
    + +

    Se o comando git status for muito vago — você quer saber exatamente o que você alterou, não apenas quais arquivos foram alterados — você pode utilizar o comando.

    + +
    git diff
    +

    Apesar do comando git status responder essas duas perguntas de maneira geral, o git + diff mostra as linhas exatas que foram adicionadas e removidas — o patch, por assim dizer. +
    Se você quer ver o que selecionou que irá no seu próximo commit, pode utilizar:

    + +
    git diff --cached
    + +
    +
    +
    +
    +

    git commit

    + + + +
    +
    +
    + +

    Armazena o conteúdo atual do índice em um novo commit, juntamente com uma mensagem de registro do usuário que descreve as mudanças. +
    Se usa o commit depois de já ter feito o git add, para fazer o commit:

    + +
    git commit -m "Mensagem"
    +

    Para commitar também os arquivos versionados mesmo não estando no Stage basta adicionar o parâmetro -a

    + +
    git commit -a -m "Mensagem"
    +

    Refazendo commit quando esquecer de adicionar um arquivo no Stage:

    + +
    git commit -m "Mensagem" --amend +
    +

    O amend é destrutivo e só deve ser utilizado antes do commit ter sido enviado ao servidor remoto. +

    +
    +
    +
    +
    +

    git reset

    + + + +
    +
    +
    + +

    Em qualquer fase, você pode querer desfazer alguma coisa. Aqui, veremos algumas ferramentas básicas para desfazer modificações que você fez. Cuidado, porque você não pode desfazer algumas dessas mudanças. Essa é uma das poucas áreas no Git onde você pode perder algum trabalho se fizer errado. +
    Para voltar ao último commit:

    + +
    git reset --hard HEAD~1
    +

    Para voltar ao último commit e mantém os últimos arquivos no Stage:

    + +
    git reset --soft HEAD~1
    +

    Volta para o commit com a hash XXXXXXXXXXX:

    + +
    git reset --hard XXXXXXXXXXX
    +
    Recuperando commit apagado pelo git reset
    + +

    Para visualizar os hashs

    + +
    git reflog
    +

    E para aplicar:

    + +
    git merge {hash}
    +
    +
    +
    +
    +

    git rm

    + + + +
    +
    +
    + +

    Para remover um arquivo do Git, você tem que removê-lo dos arquivos que estão sendo monitorados (mais precisamente, removê-lo da sua área de seleção) e então fazer o commit. O comando git + rm faz isso e também remove o arquivo do seu diretório para você não ver ele como arquivo não monitorado (untracked file) na próxima vez. +

    + +
    git rm -f {arquivo}
    +

    Se você modificou o arquivo e já o adicionou na área de seleção, você deve forçar a remoção com a opção -f. Essa é uma funcionalidade de segurança para prevenir remoções acidentais de dados que ainda não foram gravados em um snapshot e não podem ser recuperados do Git.

    + +
    +
    +
    +
    +

    git mv

    + + + +
    +
    +
    + +

    Diferente de muitos sistemas VCS, o Git não monitora explicitamente arquivos movidos. +
    É um pouco confuso que o Git tenha um comando mv. Se você quiser renomear um arquivo no Git, você pode fazer isso com

    + +
    git mv arquivo_origem arquivo_destino
    +

    e funciona. De fato, se você fizer algo desse tipo e consultar o status, você verá que o Git considera que o arquivo foi renomeado.

    + +

    No entanto, isso é equivalente a rodar algo como:

    + +
    mv README.txt README +
    git rm README.txt +
    git add README
    +

    O Git descobre que o arquivo foi renomeado implicitamente, então ele não se importa se você renomeou por este caminho ou com o comando mv. A única diferença real é que o comando + mv + é mais conveniente, executa três passos de uma vez. O mais importante, você pode usar qualquer ferramenta para renomear um arquivo, e usar add/rm depois, antes de consolidar com o commit.

    +
    +
    +
    +
    +
    +
    +

    Branch e Merge

    + +
    +

    git branch

    + + + +
    +
    +
    + +

    Um branch no Git é simplesmente um leve ponteiro móvel para um dos commits. O nome do branch padrão no Git é master. Como você inicialmente fez commits, você tem um branch principal (master + branch) que aponta para o último commit que você fez. Cada vez que você faz um commit ele avança automaticamente. +
    O que acontece se você criar um novo branch? Bem, isso cria um novo ponteiro para que você possa se mover. Vamos dizer que você crie um novo branch chamado testing. Você faz isso com o comando git branch:

    + +
    git branch testing
    +

    Isso cria um novo ponteiro para o mesmo commit em que você está no momento. +
    Para mudar para um branch existente, você executa o comando git checkout. Vamos mudar para o novo branch testing: +

    + +
    git checkout testing
    +

    Isto move o HEAD para apontar para o branch testing.

    +
    +
    +
    +
    +

    git checkout

    + + + +
    +
    +
    +

    Com o git checkout você pode mudar de branch, caso a branch ainda não exista você poderá passar o parâmetro -b para criar.

    +
    git checkout -b {nome_da_branch}
    +
    +
    +
    +
    +

    git merge

    + + + +
    +
    +
    +

    Suponha que você decidiu que o trabalho na tarefa #53 está completo e pronto para ser feito o merge no branch master. Para fazer isso, você fará o merge do seu branch iss53, bem como o merge do branch hotfix de antes. Tudo que você tem a fazer é executar o checkout do branch para onde deseja fazer o merge e então rodar o comando git merge:

    +
    git checkout master +
    git merge iss53
    +
    +
    +
    +
    +

    git mergetool

    + + + +
    +
    +
    +

    Se você quer usar uma ferramenta gráfica para resolver esses problemas, você pode executar o seguinte comando que abre uma ferramenta visual de merge adequada e percorre os conflitos.

    +
    git mergetool
    +
    Arquivos Temporários
    +

    git mergetool cria * .orig arquivos de backup ao resolver fusões. Estes são seguros para remover uma vez que um arquivo foi fundida e sua git mergetool sessão foi concluída.

    +
    +
    +
    +
    +

    git log

    + + + +
    +
    +
    +

    Depois que você tiver criado vários commits, ou se clonou um repositório com um histórico de commits existente, você provavelmente vai querer ver o que aconteceu. A ferramente mais básica e poderosa para fazer isso é o comando:

    +
    git log
    +
    +
    +
    +
    +

    git stash

    + + + +
    +
    +
    +

    Muitas vezes, quando você está trabalhando em uma parte do seu projeto, as coisas estão em um estado confuso e você quer mudar de branch por um tempo para trabalhar em outra coisa. O problema é, você não quer fazer o commit de um trabalho incompleto somente para voltar a ele mais tarde. A resposta para esse problema é o comando git stash. +
    Você quer mudar de branch, mas não quer fazer o commit do que você ainda está trabalhando; você irá fazer o stash das modificações. Para fazer um novo stash na sua pilha, execute:

    +
    git stash
    +

    Seu diretório de trabalho estará limpo. +
    Neste momento, você pode facilmente mudar de branch e trabalhar em outra coisa; suas alterações estão armazenadas na sua pilha. Para ver as stashes que você guardou, você pode usar

    +
    git stash list
    +

    Você pode aplicar aquele que acabou de fazer o stash com o comando mostrado na saída de ajuda do comando stash original: git stash apply. Se você quer aplicar um dos stashes mais antigos, você pode especificá-lo, assim: git stash apply stash@{2}. Se você não especificar um stash, Git assume que é o stash mais recente e tenta aplicá-lo.

    +
    +
    +
    +
    +

    git tag

    + + + +
    +
    +
    +

    Git tem a habilidade de criar tags em pontos específicos na história do código como pontos importantes. Geralmente as pessoas usam esta funcionalidade para marcar pontos de release (v1.0, e por aí vai). Nesta seção, você aprenderá como listar as tags disponíveis, como criar novas tags, e quais são os tipos diferentes de tags. +
    Para listar as tags execute:

    +
    + git tag +
    +

    Para criar uma tag basta executar o seguinte comando, caso não queira criar a tag anotada, somente retire os parâmetros -a e -m.

    +
    + git tag -a v1.4 -m 'my version 1.4' +
    +
    +
    +
    +
    +
    +
    +

    Compartilhar e Atualizar Projetos

    + +
    +

    git fetch

    + + + +
    +
    +
    +

    Para pegar dados dos seus projetos remotos, você pode executar:

    +
    + git fetch origin +
    +

    Esse comando vai até o projeto remoto e pega todos os dados que você ainda não tem. Depois de fazer isso, você deve ter referências para todos os branches desse remoto, onde você pode fazer o merge ou inspecionar a qualquer momento.

    +
    +
    +
    +
    +

    git pull

    + + + +
    +
    +
    +

    Incorpora as alterações de um repositório remoto no branch atual. Em seu modo padrão, git pull é uma abreviação para git fetch seguido de git merge FETCH_HEAD. Por exemplo, se eu estiver em uma branch chamada develop e quiser atualizar caso haja atualizações remotamente:

    +
    + git pull origin develop +
    +
    +
    +
    +
    +

    git push

    + + + +
    +
    +
    +

    O git push é o comando em que você transfere commits a partir do seu repositório local para um repositório remoto. É a contrapartida do git fetch, que busca importações e comprometem as agências locais, utilizando o git push as exportações comprometem as filiais remotas. Para fazer isso, você executa git push [nome_do_repositório_remoto] [nome_da_sua_branch_local], que vai tentar fazer que o [nome_do_repositório_remoto] receba a sua branch [nome_da_sua_branch_local] contendo todos seus commits com alterações. Por exemplo:

    +
    + git push origin develop +
    +
    +
    +
    +
    +

    git remote

    +
    +
    +

    git submodule

    +
    +
    +
    +
    +

    Inspeção e Comparação

    + +
    +

    git show

    +
    +
    +

    git log

    +
    +
    +

    git diff

    +
    +
    +

    git shortlog

    +
    +
    +

    git describe

    +
    +
    +
    +
    +

    Pacotes

    + +
    +

    git apply

    +
    +
    +

    git cherry-pick

    +
    +
    +

    git diff

    +
    +
    +

    git rebase

    +
    +
    +

    git revert

    +
    +
    +
    +
    +

    Debugando

    + +
    +

    git bisect

    +
    +
    +

    git blame

    +
    +
    +

    git grep

    +
    +
    +
    +
    +

    Email

    + +
    +

    git am

    +
    +
    +

    git apply

    +
    +
    +

    git format-patch

    +
    +
    +

    git send-email

    +
    +
    +

    git request-pull

    +
    +
    +
    +
    +

    Sistemas Externos

    + +
    +

    git svn

    +
    +
    +

    git fast-import

    +
    +
    +
    +
    +

    Administração

    + +
    +

    git clean

    +
    +
    +

    git gc

    +
    +
    +

    git fsck

    +
    +
    +

    git reflog

    +
    +
    +

    git filter-branch

    +
    +
    +

    git instaweb

    +
    +
    +

    git archive

    +
    +
    +
    +
    +

    Servidor

    + +
    +

    git daemon

    +
    +
    +

    git update-server-info

    +
    +
    +
    +
    +

    Canalização de Código

    + +
    +

    git cat-file

    +
    +
    +

    git commit-tree

    +
    +
    +

    git count-objects

    +
    +
    +

    git diff-index

    +
    +
    +

    git for-each-ref

    +
    +
    +

    git hash-object

    +
    +
    +

    git merge-base

    +
    +
    +

    git read-tree

    +
    +
    +

    git rev-list

    +
    +
    +

    git rev-parse

    +
    +
    +

    git show-ref

    +
    +
    +

    git symbolic-ref

    +
    +
    +

    git update-index

    +
    +
    +

    git update-ref

    +
    +
    +

    git verify-pack

    +
    +
    +

    git write-tree

    +
    +
    +
    + +
    + +
    +
    +
    + +
    - -
    -
    - {% include nav.html %}
    +
    +
    -
    - {% include footer.html %} -
    + + + + + + + + + + From cee69777bedd4da4737d15fca0a30028513266f6 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 24 Feb 2026 22:06:03 +0000 Subject: [PATCH 4/7] Add content to all empty sections and update existing ones for latest Git MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add git switch mention in git checkout section (Git 2.23+) - Add content for git remote and git submodule sections - Add content for Inspeção e Comparação: git show, log (advanced), diff (advanced), shortlog, describe - Add content for Pacotes: git apply, cherry-pick, diff (patches), rebase, revert - Add content for Debugando: git bisect, blame, grep - Add content for Email: git am, apply, format-patch, send-email, request-pull - Add content for Sistemas Externos: git svn, fast-import - Add content for Administração: git clean, gc, fsck, reflog, filter-branch, instaweb, archive - Add content for Servidor: git daemon, update-server-info - Add content for Canalização de Código: all 16 plumbing commands - Fix empty
  • bug in sidebar navigation - Mention git filter-repo as modern replacement for filter-branch Co-authored-by: Rafael Corrêa Gomes --- index.html | 923 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 848 insertions(+), 75 deletions(-) diff --git a/index.html b/index.html index 70f2da0..959a94a 100755 --- a/index.html +++ b/index.html @@ -504,6 +504,10 @@

    git checkout


    Com o git checkout você pode mudar de branch, caso a branch ainda não exista você poderá passar o parâmetro -b para criar.

    git checkout -b {nome_da_branch}
    +

    A partir do Git 2.23, o comando git switch foi introduzido como alternativa mais intuitiva para mudar de branch:

    +
    git switch {nome_da_branch} +
    git switch -c {nome_da_nova_branch}
    +

    O git checkout continua funcionando, mas o git switch é recomendado por ser mais claro na intenção.

    @@ -664,9 +668,51 @@

    git push

    git remote

    + + + +
    +
    +
    +

    Para ver quais servidores remotos você configurou, execute o comando git remote. Ele lista os nomes abreviados de cada repositório remoto que você configurou. Para ver também as URLs que o Git armazenou para leitura e escrita, adicione -v:

    +
    git remote -v
    +

    Para adicionar um novo repositório remoto com um nome abreviado que você pode referenciar facilmente:

    +
    git remote add {apelido} {url}
    +

    Para renomear a referência de um repositório remoto:

    +
    git remote rename {nome_atual} {novo_nome}
    +

    Para remover uma referência de repositório remoto:

    +
    git remote remove {nome}
    +

    Para ver informações detalhadas sobre um repositório remoto específico:

    +
    git remote show {nome}
    +
    +

    git submodule

    + + + +
    +
    +
    +

    Os submódulos permitem que você inclua um repositório Git como um subdiretório de outro repositório Git. Isso é útil quando você precisa incorporar bibliotecas externas ou projetos separados dentro do seu projeto principal.

    +

    Para adicionar um submódulo ao seu projeto:

    +
    git submodule add {url} {caminho}
    +

    Ao clonar um repositório que contém submódulos, você precisa inicializá-los e atualizá-los:

    +
    git submodule init +
    git submodule update
    +

    Ou você pode clonar recursivamente, o que faz tudo em um só passo:

    +
    git clone --recurse-submodules {url}
    +

    Para atualizar todos os submódulos para as últimas versões remotas:

    +
    git submodule update --remote
    +
    +

    @@ -675,18 +721,116 @@

    Inspeção e Comparação

    git show

    + + + +
    +
    +
    +

    O comando git show exibe informações sobre objetos do Git (commits, tags, árvores, blobs). Para ver os detalhes de um commit específico, incluindo o diff das alterações:

    +
    git show {hash_do_commit}
    +

    Para ver o conteúdo de um arquivo em um commit específico:

    +
    git show {hash}:{caminho/do/arquivo}
    +

    Para exibir as informações de uma tag anotada:

    +
    git show v1.0
    +

    Sem argumentos, exibe os detalhes do último commit:

    +
    git show
    +
    +

    git log

    + + + +
    +
    +
    +

    Além do uso básico, o git log oferece várias opções para personalizar a visualização do histórico. Para ver um resumo compacto com uma linha por commit:

    +
    git log --oneline
    +

    Para exibir um gráfico das branches e merges:

    +
    git log --oneline --graph --all
    +

    Para filtrar commits por autor:

    +
    git log --author="Nome"
    +

    Para filtrar por data:

    +
    git log --since="2024-01-01" --until="2024-12-31"
    +

    Para ver quais arquivos foram alterados em cada commit:

    +
    git log --stat
    +

    Para buscar commits cuja mensagem contenha um texto específico:

    +
    git log --grep="texto"
    +
    +

    git diff

    + + + +
    +
    +
    +

    O git diff pode ser utilizado de várias formas avançadas. Para comparar dois branches:

    +
    git diff {branch1}..{branch2}
    +

    Para comparar dois commits específicos:

    +
    git diff {hash1} {hash2}
    +

    Para ver apenas os nomes dos arquivos alterados:

    +
    git diff --name-only
    +

    Para ver um resumo estatístico das alterações:

    +
    git diff --stat
    +

    Para comparar o stage (área de seleção) com o último commit:

    +
    git diff --staged
    +
    +

    git shortlog

    + + + +
    +
    +
    +

    O git shortlog resume a saída do git log, agrupando os commits por autor. É útil para gerar changelogs ou ver quem contribuiu com o quê:

    +
    git shortlog
    +

    Para ver apenas a contagem de commits por autor, ordenado pela quantidade:

    +
    git shortlog -sn
    +

    Para incluir todos os branches:

    +
    git shortlog -sn --all
    +
    +

    git describe

    + + + +
    +
    +
    +

    O git describe gera um nome legível para um commit com base na tag anotada mais próxima. Isso é muito útil para identificar versões de builds:

    +
    git describe
    +

    O resultado será algo como v1.0-3-g7a8b9c0, significando 3 commits após a tag v1.0, com o hash abreviado g7a8b9c0.

    +

    Para usar tags leves (não anotadas) também:

    +
    git describe --tags
    +

    Para descrever um commit específico:

    +
    git describe {hash_do_commit}
    +
    +

    @@ -695,153 +839,783 @@

    Pacotes

    git apply

    + + + +
    +
    +
    +

    O comando git apply aplica um patch ao diretório de trabalho. Diferente de git am, ele não cria um commit automaticamente. Para aplicar um patch:

    +
    git apply {arquivo.patch}
    +

    Para verificar se um patch pode ser aplicado sem problemas antes de realmente aplicá-lo:

    +
    git apply --check {arquivo.patch}
    +

    Para ver as estatísticas do que o patch modificaria:

    +
    git apply --stat {arquivo.patch}
    +
    +

    git cherry-pick

    + + + +
    +
    +
    +

    O git cherry-pick permite aplicar as alterações de um commit específico de outro branch no branch atual, criando um novo commit:

    +
    git cherry-pick {hash_do_commit}
    +

    Para aplicar vários commits de uma vez:

    +
    git cherry-pick {hash1} {hash2} {hash3}
    +

    Para aplicar as alterações sem criar o commit automaticamente:

    +
    git cherry-pick --no-commit {hash_do_commit}
    +

    Se ocorrer um conflito durante o cherry-pick, resolva o conflito e continue com:

    +
    git cherry-pick --continue
    +
    +

    git diff

    + + + +
    +
    +
    +

    O git diff pode ser utilizado para gerar arquivos de patch que podem ser compartilhados e aplicados em outros repositórios. Para gerar um patch e salvá-lo em um arquivo:

    +
    git diff > alteracoes.patch
    +

    Para gerar um patch entre dois commits:

    +
    git diff {hash1} {hash2} > alteracoes.patch
    +

    Para gerar um patch apenas dos arquivos no stage:

    +
    git diff --cached > staged.patch
    +
    +
    -
    -

    git rebase

    +
    +

    git rebase

    + + + +
    +
    +
    +

    O git rebase reaplica seus commits em cima de outro branch, criando um histórico linear. É uma alternativa ao merge. Para fazer rebase do seu branch atual sobre o master:

    +
    git rebase master
    +

    Para rebase interativo, que permite editar, reordenar, combinar ou excluir commits:

    +
    git rebase -i HEAD~3
    +

    Se ocorrer um conflito durante o rebase, resolva-o e continue:

    +
    git rebase --continue
    +

    Para cancelar o rebase e voltar ao estado anterior:

    +
    git rebase --abort
    +

    Atenção: nunca faça rebase de commits que já foram enviados para um repositório público compartilhado.

    +
    +
    -
    -

    git revert

    +
    +

    git revert

    + + + +
    +
    +
    +

    O git revert cria um novo commit que desfaz as alterações de um commit anterior. Diferente do git reset, ele é seguro para uso em branches compartilhados pois não reescreve o histórico:

    +
    git revert {hash_do_commit}
    +

    Para reverter sem criar o commit automaticamente (útil para reverter vários commits):

    +
    git revert --no-commit {hash_do_commit}
    +

    Para reverter um merge commit, especifique o parent number:

    +
    git revert -m 1 {hash_do_merge}
    +
    +

    Debugando

    -
    -

    git bisect

    +
    +

    git bisect

    + + + +
    +
    +
    +

    O git bisect usa busca binária para encontrar o commit que introduziu um bug. Inicie o processo de bisect:

    +
    git bisect start
    +

    Marque o commit atual como ruim (contém o bug):

    +
    git bisect bad
    +

    Marque um commit que você sabe que estava funcionando como bom:

    +
    git bisect good {hash_do_commit}
    +

    O Git vai fazer checkout do commit do meio e você testa. Se o bug existir, marque como bad, caso contrário como good. Repita até encontrar o commit exato. Ao finalizar:

    +
    git bisect reset
    +
    +
    -
    -

    git blame

    +
    +

    git blame

    + + + +
    +
    +
    +

    O git blame mostra, para cada linha de um arquivo, qual commit e autor a modificou pela última vez. É útil para rastrear a origem de uma alteração:

    +
    git blame {arquivo}
    +

    Para ver o blame de um intervalo específico de linhas:

    +
    git blame -L 10,20 {arquivo}
    +

    Para ignorar alterações de espaço em branco:

    +
    git blame -w {arquivo}
    +
    +
    -
    -

    git grep

    +
    +

    git grep

    + + + +
    +
    +
    +

    O git grep pesquisa por padrões de texto nos arquivos monitorados pelo Git. É mais rápido que o grep padrão por pesquisar apenas nos arquivos versionados:

    +
    git grep "texto_a_pesquisar"
    +

    Para mostrar o número da linha onde o texto foi encontrado:

    +
    git grep -n "texto_a_pesquisar"
    +

    Para contar o número de ocorrências por arquivo:

    +
    git grep -c "texto_a_pesquisar"
    +

    Para pesquisar em um commit ou branch específico:

    +
    git grep "texto_a_pesquisar" {branch_ou_hash}
    +
    +

    Email

    -
    -

    git am

    +
    +

    git am

    + + + +
    +
    +
    +

    O git am aplica patches recebidos por email que foram gerados com git format-patch. Ele cria commits automaticamente preservando a autoria e a mensagem originais:

    +
    git am {arquivo.patch}
    +

    Para aplicar todos os patches de um diretório de mailbox:

    +
    git am *.patch
    +

    Se ocorrer um conflito, resolva-o e continue:

    +
    git am --continue
    +

    Para pular o patch problemático:

    +
    git am --skip
    +

    Para abortar a operação inteira:

    +
    git am --abort
    +
    +
    -
    -

    git apply

    +
    +

    git apply

    + + + +
    +
    +
    +

    No contexto de email, o git apply é usado para aplicar patches gerados por git diff (em vez de git format-patch). Ele modifica os arquivos mas não cria commits:

    +
    git apply {arquivo.patch}
    +

    A diferença entre git apply e git am é que o git apply não preserva as informações de autoria e não cria commits automaticamente.

    +
    +
    -
    -

    git format-patch

    +
    +

    git format-patch

    + + + +
    +
    +
    +

    O git format-patch gera patches no formato de email, prontos para serem enviados. Para gerar patches dos últimos N commits:

    +
    git format-patch -3
    +

    Para gerar patches de todos os commits de um branch que não estão no master:

    +
    git format-patch master
    +

    Para gerar todos os patches em um único arquivo:

    +
    git format-patch master --stdout > todas_alteracoes.patch
    +
    +
    -
    -

    git send-email

    +
    +

    git send-email

    + + + +
    +
    +
    +

    O git send-email envia patches gerados pelo git format-patch diretamente por email via SMTP. É comumente usado em projetos que aceitam contribuições por email, como o kernel Linux:

    +
    git send-email *.patch
    +

    Para enviar para um destinatário específico:

    +
    git send-email --to=email@exemplo.com *.patch
    +

    Antes de usar, configure o SMTP nas configurações do Git:

    +
    git config --global sendemail.smtpserver smtp.exemplo.com +
    git config --global sendemail.smtpserverport 587
    +
    +
    -
    -

    git request-pull

    +
    +

    git request-pull

    + + + +
    +
    +
    +

    O git request-pull gera um resumo das alterações entre dois commits, formatado para ser enviado a um mantenedor de projeto, solicitando que ele puxe as suas alterações:

    +
    git request-pull {commit_inicial} {url_do_repositorio} {branch}
    +

    Exemplo prático:

    +
    git request-pull v1.0 https://github.com/user/repo master
    +

    O resultado inclui a lista de commits, os arquivos alterados e a URL de onde o mantenedor pode fazer o pull.

    +
    +

    Sistemas Externos

    -
    -

    git svn

    +
    +

    git svn

    + + + +
    +
    +
    +

    O git svn permite usar o Git como cliente para um repositório Subversion (SVN). Para clonar um repositório SVN:

    +
    git svn clone {url_svn}
    +

    Para clonar com o layout padrão do SVN (trunk, branches, tags):

    +
    git svn clone -s {url_svn}
    +

    Para atualizar seu repositório local com as últimas alterações do SVN:

    +
    git svn rebase
    +

    Para enviar seus commits locais de volta para o SVN:

    +
    git svn dcommit
    +
    +
    -
    -

    git fast-import

    +
    +

    git fast-import

    + + + +
    +
    +
    +

    O git fast-import é uma ferramenta de alto desempenho para importar dados de outros sistemas de controle de versão para o Git. Ele lê um fluxo de dados formatado e cria objetos Git rapidamente:

    +
    git fast-import < dados_exportados.txt
    +

    O formato de entrada é específico e geralmente gerado por scripts de migração. Cada entrada define commits, blobs e referências no formato que o Git espera.

    +

    Após a importação, verifique o resultado com:

    +
    git log --oneline --all
    +
    +

    Administração

    -
    -

    git clean

    +
    +

    git clean

    + + + +
    +
    +
    +

    O git clean remove arquivos não monitorados do diretório de trabalho. Para ver quais arquivos seriam removidos sem realmente removê-los:

    +
    git clean -n
    +

    Para remover os arquivos não monitorados (requer o parâmetro -f por segurança):

    +
    git clean -f
    +

    Para remover também diretórios não monitorados:

    +
    git clean -fd
    +

    Para remover inclusive arquivos ignorados pelo .gitignore:

    +
    git clean -fdx
    +
    +
    -
    -

    git gc

    +
    +

    git gc

    + + + +
    +
    +
    +

    O git gc (garbage collection) otimiza o repositório local, compactando objetos soltos e removendo objetos que não são mais acessíveis:

    +
    git gc
    +

    Para uma limpeza mais agressiva:

    +
    git gc --aggressive
    +

    O Git executa o gc automaticamente de tempos em tempos, mas pode ser útil executá-lo manualmente em repositórios muito grandes.

    +
    +
    -
    -

    git fsck

    +
    +

    git fsck

    + + + +
    +
    +
    +

    O git fsck (file system check) verifica a integridade e conectividade dos objetos no banco de dados do Git:

    +
    git fsck
    +

    Para ver também objetos inalcançáveis (dangling objects):

    +
    git fsck --unreachable
    +

    É útil para diagnosticar problemas de corrupção no repositório ou para encontrar objetos perdidos.

    +
    +
    -
    -

    git reflog

    +
    +

    git reflog

    + + + +
    +
    +
    +

    O git reflog registra todas as atualizações do HEAD e das referências de branches locais. É extremamente útil para recuperar commits "perdidos" após um reset ou rebase:

    +
    git reflog
    +

    Para ver o reflog de um branch específico:

    +
    git reflog show {nome_do_branch}
    +

    Para recuperar um commit usando o reflog:

    +
    git checkout HEAD@{2}
    +

    O reflog é mantido localmente e por padrão expira após 90 dias.

    +
    +
    -
    -

    git filter-branch

    +
    +

    git filter-branch

    + + + +
    +
    +
    +

    O git filter-branch reescreve o histórico de commits aplicando filtros. Atenção: este comando é destrutivo e foi substituído pelo git filter-repo (ferramenta externa recomendada).

    +

    Para remover um arquivo de todo o histórico:

    +
    git filter-branch --tree-filter 'rm -f {arquivo}' HEAD
    +

    Para alterar o email do autor em todos os commits:

    +
    git filter-branch --env-filter ' +
    if [ "$GIT_AUTHOR_EMAIL" = "antigo@email.com" ]; then +
      export GIT_AUTHOR_EMAIL="novo@email.com" +
    fi' HEAD
    +

    A alternativa moderna recomendada é o git filter-repo:

    +
    git filter-repo --path {arquivo} --invert-paths
    +
    +
    -
    -

    git instaweb

    +
    +

    git instaweb

    + + + +
    +
    +
    +

    O git instaweb inicia instantaneamente um servidor web para navegar pelo repositório usando o GitWeb:

    +
    git instaweb
    +

    Para especificar o servidor HTTP a ser utilizado:

    +
    git instaweb --httpd=webrick
    +

    Para parar o servidor:

    +
    git instaweb --stop
    +
    +
    -
    -

    git archive

    +
    +

    git archive

    + + + +
    +
    +
    +

    O git archive cria um arquivo compactado (tar ou zip) do conteúdo de uma árvore Git, sem incluir os metadados do Git:

    +
    git archive --format=tar HEAD | gzip > projeto.tar.gz
    +

    Para criar um arquivo zip:

    +
    git archive --format=zip HEAD > projeto.zip
    +

    Para exportar apenas um subdiretório:

    +
    git archive HEAD {caminho/do/diretorio} > subdir.tar
    +

    Para exportar uma tag ou branch específica:

    +
    git archive --format=zip v1.0 > release-v1.0.zip
    +
    +

    Servidor

    -
    -

    git daemon

    +
    +

    git daemon

    + + + +
    +
    +
    +

    O git daemon inicia um servidor Git simples que disponibiliza repositórios via o protocolo git:// (porta 9418). É útil para compartilhamento rápido em redes locais:

    +
    git daemon --reuseaddr --base-path=/caminho/dos/repos /caminho/dos/repos
    +

    Para permitir push anônimo (use com cautela):

    +
    git daemon --reuseaddr --enable=receive-pack --base-path=/caminho/dos/repos
    +

    No repositório que deseja exportar, crie o arquivo que autoriza a exportação:

    +
    touch .git/git-daemon-export-ok
    +
    +
    -
    -

    git update-server-info

    +
    +

    git update-server-info

    + + + +
    +
    +
    +

    O git update-server-info atualiza os arquivos auxiliares necessários para servir um repositório Git via HTTP (protocolo "dumb"). Execute após cada push em repositórios servidos por servidores web estáticos:

    +
    git update-server-info
    +

    Este comando atualiza os arquivos info/refs e objects/info/packs, que são necessários para que clientes possam descobrir as referências e objetos disponíveis.

    +

    Geralmente, este comando é configurado como um hook post-update para ser executado automaticamente.

    +
    +

    Canalização de Código

    -
    -

    git cat-file

    +
    +

    git cat-file

    + +
    +
    +
    +

    O git cat-file exibe o conteúdo, tipo ou tamanho de objetos do Git (blobs, trees, commits, tags). Para ver o tipo de um objeto:

    +
    git cat-file -t {hash}
    +

    Para ver o conteúdo de um objeto:

    +
    git cat-file -p {hash}
    +

    Para ver o tamanho de um objeto:

    +
    git cat-file -s {hash}
    +
    +
    -
    -

    git commit-tree

    +
    +

    git commit-tree

    + +
    +
    +
    +

    O git commit-tree cria um novo objeto de commit a partir de um objeto tree. É o comando de baixo nível que o git commit usa internamente:

    +
    echo "mensagem" | git commit-tree {hash_da_tree}
    +

    Para criar um commit com um parent específico:

    +
    echo "mensagem" | git commit-tree {hash_da_tree} -p {hash_do_parent}
    +
    +
    -
    -

    git count-objects

    +
    +

    git count-objects

    + +
    +
    +
    +

    O git count-objects conta o número de objetos soltos e o espaço em disco que eles ocupam:

    +
    git count-objects
    +

    Para uma saída mais detalhada incluindo objetos empacotados:

    +
    git count-objects -v
    +
    +
    -
    -

    git diff-index

    +
    +

    git diff-index

    + +
    +
    +
    +

    O git diff-index compara uma árvore (tree) com o índice (staging area) ou com o diretório de trabalho. É o comando de baixo nível usado pelo git diff:

    +
    git diff-index HEAD
    +

    Para comparar apenas o índice (sem verificar o diretório de trabalho):

    +
    git diff-index --cached HEAD
    +
    +
    -
    -

    git for-each-ref

    +
    +

    git for-each-ref

    + +
    +
    +
    +

    O git for-each-ref exibe informações sobre cada referência no repositório. É útil para scripts e automação. Para listar todos os branches com seus últimos commits:

    +
    git for-each-ref --format='%(refname:short) %(objectname:short) %(subject)' refs/heads/
    +

    Para listar tags ordenadas por data:

    +
    git for-each-ref --sort=-creatordate --format='%(refname:short)' refs/tags/
    +
    +
    -
    -

    git hash-object

    +
    +

    git hash-object

    + +
    +
    +
    +

    O git hash-object calcula o hash SHA de um objeto e opcionalmente o armazena no banco de dados do Git. Para calcular o hash de um arquivo:

    +
    git hash-object {arquivo}
    +

    Para calcular o hash e armazenar o objeto no banco de dados:

    +
    git hash-object -w {arquivo}
    +

    Para calcular o hash de uma string:

    +
    echo "conteudo" | git hash-object --stdin
    +
    +
    -
    -

    git merge-base

    +
    +

    git merge-base

    + +
    +
    +
    +

    O git merge-base encontra o melhor ancestral comum entre dois commits, que é o ponto de partida para um merge de três vias:

    +
    git merge-base {branch1} {branch2}
    +

    Para verificar se um commit é ancestral de outro:

    +
    git merge-base --is-ancestor {commit1} {commit2}
    +
    +
    -
    -

    git read-tree

    +
    +

    git read-tree

    + +
    +
    +
    +

    O git read-tree lê informações de uma árvore (tree) para o índice (staging area). É o comando de baixo nível usado por git checkout e git merge:

    +
    git read-tree {hash_da_tree}
    +

    Para fazer um merge de três vias no índice:

    +
    git read-tree -m {base} {branch1} {branch2}
    +
    +
    -
    -

    git rev-list

    +
    +

    git rev-list

    + +
    +
    +
    +

    O git rev-list lista objetos de commit em ordem cronológica reversa. É o comando de baixo nível que alimenta o git log:

    +
    git rev-list HEAD
    +

    Para contar o número total de commits:

    +
    git rev-list --count HEAD
    +

    Para listar commits que estão em um branch mas não em outro:

    +
    git rev-list {branch1} ^{branch2}
    +
    +
    -
    -

    git rev-parse

    +
    +

    git rev-parse

    + +
    +
    +
    +

    O git rev-parse traduz nomes de referências em hashes SHA. É amplamente utilizado em scripts:

    +
    git rev-parse HEAD
    +

    Para obter o diretório raiz do repositório:

    +
    git rev-parse --show-toplevel
    +

    Para verificar se está dentro de um repositório Git:

    +
    git rev-parse --is-inside-work-tree
    +

    Para obter o nome abreviado do branch atual:

    +
    git rev-parse --abbrev-ref HEAD
    +
    +
    -
    -

    git show-ref

    +
    +

    git show-ref

    + +
    +
    +
    +

    O git show-ref lista referências (branches e tags) no repositório local junto com seus hashes:

    +
    git show-ref
    +

    Para listar apenas tags:

    +
    git show-ref --tags
    +

    Para verificar se uma referência existe:

    +
    git show-ref --verify refs/heads/{branch}
    +
    +
    -
    -

    git symbolic-ref

    +
    +

    git symbolic-ref

    + +
    +
    +
    +

    O git symbolic-ref lê ou modifica referências simbólicas (como HEAD). Para ver para qual branch o HEAD aponta:

    +
    git symbolic-ref HEAD
    +

    Para obter apenas o nome curto do branch:

    +
    git symbolic-ref --short HEAD
    +

    Para alterar o HEAD para apontar para outro branch:

    +
    git symbolic-ref HEAD refs/heads/{branch}
    +
    +
    -
    -

    git update-index

    +
    +

    git update-index

    + +
    +
    +
    +

    O git update-index modifica o índice (staging area) diretamente. Para marcar um arquivo como "assume unchanged" (útil para ignorar alterações locais de configuração):

    +
    git update-index --assume-unchanged {arquivo}
    +

    Para reverter e voltar a monitorar as alterações:

    +
    git update-index --no-assume-unchanged {arquivo}
    +

    Para adicionar um arquivo ao índice manualmente:

    +
    git update-index --add {arquivo}
    +
    +
    -
    -

    git update-ref

    +
    +

    git update-ref

    + +
    +
    +
    +

    O git update-ref atualiza o hash armazenado em uma referência de forma segura. Para apontar um branch para um commit específico:

    +
    git update-ref refs/heads/{branch} {hash}
    +

    Para deletar uma referência:

    +
    git update-ref -d refs/heads/{branch}
    +
    +
    -
    -

    git verify-pack

    +
    +

    git verify-pack

    + +
    +
    +
    +

    O git verify-pack verifica a validade de um arquivo de pacote Git (.pack). Para verificar um pacote e listar seu conteúdo:

    +
    git verify-pack -v .git/objects/pack/{arquivo}.idx
    +

    É útil para diagnosticar problemas com pacotes corrompidos ou para analisar quais objetos ocupam mais espaço no repositório.

    +
    +
    -
    -

    git write-tree

    +
    +

    git write-tree

    + +
    +
    +
    +

    O git write-tree cria um objeto tree a partir do conteúdo atual do índice (staging area). É o complemento do git read-tree e é usado internamente pelo git commit:

    +
    git write-tree
    +

    O comando retorna o hash SHA-1 da árvore criada, que pode ser usado com git commit-tree para criar um commit manualmente.

    +
    +
    @@ -1022,7 +1796,6 @@

    git write-tree

  • -
  • Servidor