-
1. Pagsisimula
-
2. Mga Pangunahing Kaalaman sa Git
-
3. Pag-branch ng Git
-
4. Git sa Server
- 4.1 Ang Mga Protokol
- 4.2 Pagkuha ng Git sa isang Server
- 4.3 Ang paglikha ng iyong Pampublikong Susi ng SSH
- 4.4 Pag-Setup ng Server
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Mga Opsyon ng Naka-host sa Third Party
- 4.10 Buod
-
5. Distributed Git
- 5.1 Distributed Workflows
- 5.2 Contributing to a Project
- 5.3 Maintaining a Project
- 5.4 Summary
-
6. GitHub
-
7. Mga Git na Kasangkapan
- 7.1 Pagpipili ng Rebisyon
- 7.2 Staging na Interactive
- 7.3 Pag-stash at Paglilinis
- 7.4 Pag-sign sa Iyong Trabaho
- 7.5 Paghahanap
- 7.6 Pagsulat muli ng Kasaysayan
- 7.7 Ang Reset Demystified
- 7.8 Advanced na Pag-merge
- 7.9 Ang Rerere
- 7.10 Pagdebug gamit ang Git
- 7.11 Mga Submodule
- 7.12 Pagbibigkis
- 7.13 Pagpapalit
- 7.14 Kredensyal na ImbakanCredential Storage
- 7.15 Buod
-
8. Pag-aangkop sa Sariling Pangangailagan ng Git
- 8.1 Kompigurasyon ng Git
- 8.2 Mga Katangian ng Git
- 8.3 Mga Hook ng Git
- 8.4 An Example Git-Enforced Policy
- 8.5 Buod
-
9. Ang Git at iba pang mga Sistema
- 9.1 Git bilang isang Kliyente
- 9.2 Paglilipat sa Git
- 9.3 Buod
-
10. Mga Panloob ng GIT
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 Ang Refspec
- 10.6 Transfer Protocols
- 10.7 Pagpapanatili At Pagbalik ng Datos
- 10.8 Mga Variable sa Kapaligiran
- 10.9 Buod
-
A1. Appendix A: Git in Other Environments
- A1.1 Grapikal Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git sa Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git sa Powershell
- A1.7 Summary
-
A2. Appendix B: Pag-embed ng Git sa iyong Mga Aplikasyon
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Mga Kautusan ng Git
- A3.1 Setup at Config
- A3.2 Pagkuha at Paglikha ng Mga Proyekto
- A3.3 Pangunahing Snapshotting
- A3.4 Branching at Merging
- A3.5 Pagbabahagi at Pagbabago ng mga Proyekto
- A3.6 Pagsisiyasat at Paghahambing
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Pagtutuberong mga Utos
2.3 Mga Pangunahing Kaalaman sa Git - Pagtitingin sa Kasaysayan ng Commit
Pagtitingin sa Kasaysayan ng Commit
Pagkatapos mong gumawa ng iilang mga commit, o kung na-clone mo ang isang repositoryo na may umiiral na kasaysayan ng commit, malamang na gusto mong tumingin pabalik kung ano ang nangyari.
Ang pinaka pangunahin at malakas na kagamitan upang gawin ito ay ang git log
na utos.
Ang mga halimbawang ito ay gumagamit ng pinaka simpleng proyekto na tinatawag na “simplegit”. Upang makuha ang proyekto, patakbuhin ang
$ git clone https://github.com/schacon/simplegit-progit
Kapag ikaw ay nagpatakbo ng git log
sa proyektong ito, dapat kang makakuha ng output na parang kagaya nito:
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
Bilang default, na may walang mga argumento,ang git log
ay naglilista ng mga commit na ginawa sa repositoryo na iyon sa baliktad na pagkasunod-sunod — yan ay, ang pinaka-kamakailang mga commit lang ipinapakita muna.
Tulad ng iyong nakikita, ang utos na ito ay naglilista sa bawat commit na kasama ang SHA-1 checksum nito, ang pangalan ng may-akda at email, ang petsa ng pagkasulat, at ang mensahe ng commit.
Isang malaking bilang at iba’t ibang mga opsyon sa git log
na utos ay magagamit para ipakita sayo ang eksakto na kung ano ang iyong hinahanap.
Dito, ipapakita namin sa iyo ang ilang mga pinaka sikat.
Isa sa maraming nakakatulong na mga opsyon ay ang -p
o --patch
, na nagpapakita ng pagkakaiba (ang tapal na output) ay ipinakilala sa bawat commit.
Maaari mo ring limitahan ang bilang ng iyong ng mga log entry na ipinapakita, tulad ng paggamit ng -2
upang ipakita lamang ang huling dalawang entry.
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = "simplegit"
- s.version = "0.1.0"
+ s.version = "0.1.1"
s.author = "Scott Chacon"
s.email = "schacon@gee-mail.com"
s.summary = "A simple gem for using Git in Ruby code."
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
end
end
-
-if $0 == __FILE__
- git = SimpleGit.new
- puts git.show
-end
Ang opsyon na ito ay nagpapakita ng parehong impormasyon ngunit may direktang diff na sumusunod na bawat entry.
Ito ay kapaki-pakinabang para sa pagsusuri ng code o upang mabilis ang pag-browse kung ano ang nangyari sa panahon ng isang serye ng mga commit na naidagdag sa isang tagatulong.
Maaari ka ring gumamit ng isang serye ng pagsasama ng mga opsyon sa git log
.
Halimbawa, kung nais mong makita ang ilang pinaliit na mga stat para sa bawat commit, maaari mong gamitin ang --stat
na opsyon:
$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
Rakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
lib/simplegit.rb | 5 -----
1 file changed, 5 deletions(-)
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
README | 6 ++++++
Rakefile | 23 +++++++++++++++++++++++
lib/simplegit.rb | 25 +++++++++++++++++++++++++
3 files changed, 54 insertions(+)
Tulad ng iyong nakikita, ang --stat
na opsyon ay nagpapakita sa ibabaw sa bawat commit na entry sa listahan ng mga binagong mga file, kung gaano karaming mga file ang binago, at gaano karami ang mga linya sa mga file ang idinagdag at inalis.
Naglalagay din ito ng buod ng impormasyon sa dulo.
Ang isa pang talagang kapaki-pakinabang na opsyon ay ang --pretty
.
Ang opsyon na ito ay nagbabago ng log output para i-format maliban sa nakatakda.
Ang kaunting prebuilt na mga opsyon ay magagamit para gamitin mo.
Ang oneline
na opsyon ay nagpapakita ng bawat commit sa isang solong linya, na kung saan ay kapaki-pakinabang kung ikaw ay naghahanap ng maraming mga commit.
At saka, ang short
, full
, at fuller
ang mga opsyon ay nagpapakita ng halos lahat na parehong format ngunit may mas kaunti o higit pang impormasyon, ayon sa pagkakabangit:
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
Ang pinakawili-wili na opsyon ay ang format
, na nagbibigay-daan upang tukuyin ang iyong sariling log output na format.
Ito ay lalong magagamit kapag ikaw ay bumubuo ng output para sa pag-parse ng makina — dahil ikaw ay tumukoy sa format ng malinaw, alam mo na hindi ito magbabago kahit na may mga update sa Git:
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit
Mga kapaki-pakinabang na mga opsyon para sa git log --pretty=format
ay naglilista ng ilan sa maraming kapaki-pakinabang na mga opsyon na makukuha sa format
.
Opsyon | Paglalarawan ng Output |
---|---|
|
Commit hash |
|
Pinaiksing commit hash |
|
Tree hash |
|
Pinaiksing tree hash |
|
Magulang na mga hash |
|
Pinaiksing magulang na mga hash |
|
Pangalan ng may-akda |
|
Email ng may-akda |
|
Petsa ng may-akda (ang format ay gumagalang sa --date=option) |
|
Petsa ng may-akda, kaugnay |
|
Pangalan ng nag-commit |
|
Email ng nag-commit |
|
Petsa ng nag-commit |
|
Petsa ng nag-commit , kaugnay |
|
Paksa |
Maaaring ikaw ay nagtataka kung ano ang pagkakaiba na nasa pagitan ng may-akda at ang nag-commit. Ang may-akda ay isang tao na orihinal na sumulat sa trabaho, samantala ang nag-commit ay isang tao na huling inilapat ang trabaho. Kaya, kung magpadala ka sa isang tapal sa isang proyekto at isa sa mga pangunahing miyembro na naglalapat ng patch, kapwa kayo ay makakuha ng credit — ikaw bilang ang may-akda, at ang core na miyembro bilang ang nag-commit. Isali natin ang pagkakaiba nito na mas kaunti pa sa Distributed Git.
Ang oneline
at format
na mga opsyon ay patikular na kapaki-pakinabang sa ibang log
na opsyon na tinatawag na --graph
.
Ang opsyon na ito ay nagdaragdag ng magandang maliit na ASCII graph na nagpapakita sa iyong branch at merge na kasaysayan:
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch 'defunkt' into local
Ang tipo ng output na ito ay magiging mas kawili-wili habang tayo ay gumagamit ng pag-branching at pag-merging sa susunod na kabanata.
Iyan ay ilan lamang sa simple na output-formatting na mga opsyon sa git log
— marami pang iba.
Pangkaraniwang mga opsyon sa git log
Naglilista ng mga opsyon na sinali natin kamakailan lang, pati na rin ang ilan pang ibang mga pangkaraniwang formatting na mga opsyon na maaaring kapaki-pakinabang, kasama ng kung papaano sila nagbabago sa output ng log command.
Option | Paglalarawan |
---|---|
|
Nagpapakita sa ipinapakitang tapal sa bawat commit. |
|
Nagpapakita ng mga istatistika para sa mga file na nabago sa bawat commit. |
|
Nagpakita lamang ang nabago/mga ipinasok/mga binura na linya mula sa --stat na utos. |
|
Nagpakita ng listahan ng mga file na nabago pagkatapos ng impormasyon ng commit. |
|
Nagpakita ng listahan ng mga file na apektado na may idinagdag/binago/binura na impormasyon din. |
|
Nagpakita lamang ang unang ilang mga karakter ng SHA-1 checksum sa halip na lahat 40. |
|
Nagpakita ng petsa sa isang kaugnay na format (halimbawa, “2 linggong nakaraan”) sa halip na gamitin ang buong format ng petsa. |
|
Nagpakita ng ASCII graph sa branch at merge na kasaysayan bukod sa output ng log. |
|
Nagpapakita ng mga commit sa isang humahalili na format. Mga opsyon na kasama ay oneline, short, full, fuller, at format (kung saan ikaw ay tumutukoy ng iyong sariling format). |
|
Shorthand para sa |
Paglilimit ng Log Output
Sa karagdagan sa output-formatting na mga opsyon, ang git log
ay kumukuha ng isang bilang ng kapaki-pakinabang na paglilimit na mga opsyon — yan ay, ang mga opsyon na nagpapakita sa iyo lamang ng subset ng mga commit.
Nakita mo na ang opsyon na iyon — ang -2
na opsyon, na nagpapakita lamang sa huling dalawang commit.
Sa katunayan, maaari mong gawin -<n>
, kung saan n
ang anumang integer na ipinakita sa huling n
na mga commit.
Sa totoo, ikaw ay malamang hindi ka gumagamit niyan ng madalas, dahil ang Git sa pamamagitan ng default na mga pipe sa lahat ng output sa pamamagitan ng isang pager kaya nakikita lamang ang isang pahina sa log output sa isang pagkakataon.
Gayunpaman, ang oras na naglilimita na mga opsyon tulad ng --since
at --until
ay lubhang nakakatulong.
For example, this command gets the list of commits made in the last two weeks:
$ git log --since=2.weeks
Ang utos na ito ay gumagana sa maraming mga format — maaari mong tukuyin ang tiyak na petsa tulad ng "2008-01-15"
, o isang kaugnay na petsa tulad ng "2 years 1 day 3 minutes ago"
.
Maaari mo ring i-filter ang listahan ng mga nai-commit na tumugma sa ilang pamantayan sa paghahanap.
Ang --author
na opsyon ay nagpapahintulot sayo na i-filter sa isang tiyak na may-akda, at ang --grep
na opsyon na hinahayaan kang maghanap para sa mga keyword na nasa commit na mga mensahe.
Maaari mong tukuyin ang higit pa sa isang instance sa parehong --author
at --grep
na pamantayan sa paghahanap , kung saan
ay naglilimita sa output ng commit upang ang mga commit na tumugma sa anuman sa --author
na mga palatandaan at anuman
sa --grep
na mga palatandaan; gayunpaman, pagdagdag sa --all-match
na opsyon sa karagdagang mga limitasyon sa output sa
mga nai-commit lang na tumutugma _sa lahat _ --grep
ng mga palatandaan.
Isa pang nakakatulong talaga na filter ay ang -S
na opsyon (ang pananalita ay tinutukoy bilang Git’s “pickaxe” na opsyon), na kung saan kay kumukuha ng isang string at nagpapakita lamang sa mga commit na iyon na nagbago ang bilang ng mga pangyayari ng string na iyon.
Halimbawa, kung gusto mong humanap sa huling commit na nagdagdag o nag-alis ng isang reperensiya sa tiyak na pag-andar, maaari kang tumawag:
$ git log -S function_name
Ang huling talagang kapaki-pakinabang na opsyon na maipasa sa git log
bilang isang fitler ay ang path.
Kung ikaw ay tumukoy ng direktoryo o pangalan ng file, maaari mong limitahan ang log output para i-commit ang ipinakilala na pagbago ng mga file na iyon.
Ito ay laging huling opsyon at sa pangkalahatan ay nauna ng dobleng mga gitling (--
) upang ihiwalay ang mga path mula sa mga opsyon.
Sa Mga opsyon upang limitahan ang output sa git log
kami ay maglista nito at ilan pang iba na pangkaraniwang mga opsyon para sa iyong reperensiya.
Opsyon | Paglalarawan |
---|---|
|
Ipinakita lamang ang huling n na mga commit |
|
Limitahan ang mga commit sa mga ginawa pagkatapos sa tinutukoy na petsa. |
|
Limitahan ang mga commit sa mga ginawa bago ang tinutukoy na petsa. |
|
Ipinapakita lamang ang mga commit na kung saan ang entry ng may-akda ay tumugma sa tinutukoy na string. |
|
Ipinapakita lamang ang mga commit na kung saan ang entry ng taga-commit ay tumugma sa tinutukoy na string. |
|
Ipinapakita lamang ang mga commit na may isang mensahe ng commit na naglalaman ng string |
|
Ipinapakita lamang ang mga commit na pagdaragdag o pag-alis sa code na tumutugma sa string |
Halimbawa, kung gusto mong tingnan kung saan ang mga commit na nagbago sa mga test files sa loob ng kasaysayan ng Git source code na nai-commit ni Junio Hamano sa buwan ng Oktubre 2008 at hindi mga merge na commit, maaari kang magpatakbo sa isang bagay na tulad nito:
$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attributes are in use
acd3b9e - Enhance hold_lock_file_for_{update,append}() API
f563754 - demonstrate breakage of detached checkout with symbolic link HEAD
d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths
51a94af - Fix "checkout --track -b newbranch" on detached HEAD
b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch
Na nasa halos 40,000 na mga commit sa Git source code na kasaysayan, itong utos ay nagpapakita ng 6 na tumugma sa pamantayan na iyon.
Tip
|
Pag-iwas sa pagpakita sa pinagsamang mga commit
Depende sa workflow na ginagamit sa iyong repositoryo, ito’y posible na ang malaking porsyento sa mga commit sa iyong kasaysayan ng log ay pinagsama lamang ng mga commit, na karaniwang hindi masyadong makabuluhan. Upang iwasan ang pagpakita sa pinagsamang mga commit na gumugulo sa iyong kasaysayan ng log, idagdag lamang ang opsyon ng log`--no-merges`. |