2. Git 基礎
- 2.1 取得一個 Git 倉儲
- 2.2 紀錄變更到版本庫中
- 2.3 檢視提交的歷史記錄
- 2.4 復原
- 2.5 與遠端協同工作
- 2.6 標籤
- 2.7 Git Aliases
- 2.8 總結
3. 使用 Git 分支
4. 伺服器上的 Git
- 4.1 通訊協定
- 4.2 在伺服器上佈署 Git
- 4.3 產生你的 SSH 公鑰
- 4.4 設定伺服器
- 4.5 Git 常駐程式
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 第3方 Git 託管方案
- 4.10 總結
5. 分散式的 Git
- 6.1 建立帳戶及設定
- 6.2 參與一個專案
- 6.3 維護專案
- 6.4 Managing an organization
- 6.5 Scripting GitHub
- 6.6 總結
7. Git 工具
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugging with Git
- 7.11 Submodules
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 總結
8. Customizing Git
- 8.1 Git Configuration
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Summary
9. Git and Other Systems
- 9.1 Git as a Client
- 9.2 Migrating to Git
- 9.3 Summary
10. Git Internals
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 The Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Summary
A1. 附錄 A: Git in Other Environments
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in Powershell
- A1.7 Summary
A2. 附錄 B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
A3. 附錄 C: Git Commands
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
A3.4 附錄 C: Git Commands - Branching and Merging
Branching and Merging
There are just a handful of commands that implement most of the branching and merging functionality in Git.
git branch command is actually something of a branch management tool.
It can list the branches you have, create a new branch, delete branches and rename branches.
Most of [ch03-git-branching] is dedicated to the
branch command and it’s used throughout the entire chapter.
We first introduce it in 建立一個新的分支 and we go through most of its other features (listing and deleting) in 分支管理.
In Tracking Branches we use the
git branch -u option to set up a tracking branch.
Finally, we go through some of what it does in the background in Git References.
git checkout command is used to switch branches and check content out into your working directory.
We first encounter the command in 在分支之間切換 along with the
git branch command.
We see how to use it to start tracking branches with the
--track flag in Tracking Branches.
We use it to reintroduce file conflicts with
--conflict=diff3 in Checking Out Conflicts.
We go into closer detail on its relationship with
git reset in Reset Demystified.
Finally, we go into some implementation detail in The HEAD.
git merge tool is used to merge one or more branches into the branch you have checked out.
It will then advance the current branch to the result of the merge.
git merge command was first introduced in 分支的基本用法.
Though it is used in various places in the book, there are very few variations of the
merge command — generally just
git merge <branch> with the name of the single branch you want to merge in.
We covered how to do a squashed merge (where Git merges the work but pretends like it’s just a new commit without recording the history of the branch you’re merging in) at the very end of Fork 公眾專案.
We went over a lot about the merge process and command, including the
-Xignore-space-change command and the
--abort flag to abort a problem merge in Advanced Merging.
We learned how to verify signatures before merging if your project is using GPG signing in Signing Commits.
Finally, we learned about Subtree merging in Subtree Merging.
git mergetool command simply launches an external merge helper in case you have issues with a merge in Git.
We mention it quickly in 合併衝突的基本解法 and go into detail on how to implement your own external merge tool in External Merge and Diff Tools.
git log command is used to show the reachable recorded history of a project from the most recent commit snapshot backwards.
By default it will only show the history of the branch you’re currently on, but can be given different or even multiple heads or branches from which to traverse.
It is also often used to show differences between two or more branches at the commit level.
This command is used in nearly every chapter of the book to demonstrate the history of a project.
We introduce the command and cover it in some depth in 檢視提交的歷史記錄.
There we look at the
--stat option to get an idea of what was introduced in each commit and the
--oneline options to view the history more concisely, along with some simple date and author filtering options.
In 建立一個新的分支 we use it with the
--decorate option to easily visualize where our branch pointers are located and we also use the
--graph option to see what divergent histories look like.
In 私有的小團隊 and Commit Ranges we cover the
branchA..branchB syntax to use the
git log command to see what commits are unique to a branch relative to another branch.
In Commit Ranges we go through this fairly extensively.
In Merge Log and Triple Dot we cover using the
branchA...branchB format and the
--left-right syntax to see what is in one branch or the other but not in both.
In Merge Log we also look at how to use the
--merge option to help with merge conflict debugging as well as using the
--cc option to look at merge commit conflicts in your history.
In RefLog Shortnames we use the
-g option to view the Git reflog through this tool instead of doing branch traversal.
In Searching we look at using the
-L options to do fairly sophisticated searches for something that happened historically in the code such as seeing the history of a function.
In Signing Commits we see how to use
--show-signature to add a validation string to each commit in the
git log output based on if it was validly signed or not.
git stash command is used to temporarily store uncommitted work in order to clean out your working directory without having to commit unfinished work on a branch.
This is basically entirely covered in Stashing and Cleaning.
git tag command is used to give a permanent bookmark to a specific point in the code history.
Generally this is used for things like releases.
This command is introduced and covered in detail in 標籤 and we use it in practice in 為釋出的版本加上標籤.
We also cover how to create a GPG signed tag with the
-s flag and verify one with the
-v flag in Signing Your Work.