Git 常用命令
核心概念
-
工作区(Working Directory):包含当前代码的本地目录。
-
暂存区(Staging Area 或 Index):一个保存下次将提交的文件列表的区域。
-
仓库(Repository):
Git
维护的项目的历史记录和版本数据。
基本命令
-
安装
Git
访问Git
官方网站下载安装程序,并按照指引完成安装。 -
配置
Git
首次安装Git
后,需要设置用户信息:1
2git config --global user.name "Your Name"
git config --global user.email "your_email@example.com" -
初始化新仓库
创建一个新目录,打开终端,切换到该目录下,并输入:1
git init
这将创建一个新的
.git
目录,包含所有必须的仓库文件。 -
克隆现有仓库
如果要拷贝一个已经存在的Git仓库,例如从GitHub,使用:1
git clone <repository_url>
-
跟踪新文件
使用git add
命令来跟踪新文件或变更:1
2git add <file_or_directory>
git add . # 添加当前目录下的所有变更 -
查看状态
要查看哪些文件在暂存区,哪些有变更等,使用:1
git status
-
提交更改
将暂存区的更改提交到仓库历史中:1
git commit -m "A message describing the commit"
-
查看提交历史
要看你的提交历史,包括每个提交的详细信息:1
2git log
git log --oneline # 简化的提交历史 -
撤销更改
可以使用以下命令撤销更改:1
2
3git checkout -- <file> # 撤销工作目录中的更改
git reset HEAD <file> # 从暂存区中移除文件
git reset --hard # 撤销自上次提交后的所有更改 -
分支
分支是独立进行更改的工作流程。常用分支命令包括:
1
2
3
4git branch # 列出分支
git branch <new_branch> # 创建新分支
git checkout <branch_name> # 切换分支
git merge <branch_name> # 合并分支到当前分支 -
远程仓库
远程仓库是托管在因特网或网络中的仓库。常用命令包括:
1
2
3
4git remote add <remote_name> <remote_url> # 添加远程仓库
git fetch <remote_name> # 从远程获取代码库
git pull <remote_name> <branch_name> # 获取远程仓库的更改并合并到当前分支
git push <remote_name> <branch_name> # 将代码的更改发送到远程仓库 -
解决合并冲突
当不同的分支对同一文件的同一部分做出更改时,合并这些分支可能会出现冲突。
Git
会标记出冲突的文件,需要人工解决这些冲突,然后重新提交。1
2
3# Git标记出的冲突文件需要手动编辑解决冲突,然后:
git add <resolved_file>
git commit -m "Resolved merge conflict by incorporating both suggestions." -
标签
标签用于为特定的提交打上固定的标记,通常用于版本发布。
1
2
3
4git tag # 列出所有标签
git tag <tagname> # 轻量标签
git tag -a <tagname> -m "version 1.0" # 带注释的标签
git push --tags # 推送标签到远程仓库 -
.gitignore文件
.gitignore
文件用于指定不应提交到Git
仓库中的无需跟踪的文件和目录。在该文件中可以添加规则来排除特定的文件或模式。1
2
3
4# .gitignore example
*.log
node_modules/
.DS_Store -
比较仓库
git diff 用于比较文件或仓库之间的差异。通过比较两个仓库之间的不同。
1
git diff <repo1> <repo2>
高级使用
-
交互式暂存(Interactive Staging)
可以使用交互式添加功能来部分暂存文件。1
git add -p
-
撤销提交(Amending Commits)
如果需要修改最后一次提交,可以使用--amend
选项。1
git commit --amend
-
衍合提交(Squashing Commits)
使用rebase
命令的交互模式可以合并多个提交。1
git rebase -i HEAD~<number_of_commits>
-
子模块(Submodules)
当项目中包含外部仓库时,可以使用子模块来管理这些依赖。1
git submodule add <repository> <path>
-
回滚到特定的提交(Reverting Commits)
如果需要撤销之前的提交,并将这次撤销作为新的提交,可以使用revert
命令。1
git revert <commit_hash>
-
Cherry-picking
从其他分支拾取一个特定的提交到当前分支。1
git cherry-pick <commit_hash>
-
stash(暂存工作)
当你需要临时切换分支,但当前分支上的工作尚未完成时,可以使用stash
来保存当前的工作进度,稍后再恢复。1
2
3
4
5git stash # 暂存当前的更改
git stash list # 列出所有的stash
git stash apply # 应用最近的stash
git stash drop # 删除最近的stash
git stash pop # 应用最近的stash并删除 -
Git Hooks
Git 钩子
(hooks)是在特定的重要动作发生时触发的脚本,如在提交前运行测试,或在推送后通知CI/CD系统。钩子脚本通常位于.git/hooks目录下,并且可以自定义。 -
配置别名(Aliases)
如果某个Git命令你使用得非常频繁,可以配置一个别名来缩短命令。1
2
3
4git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status -
交互式Rebase
通过交互式Rebase可以编辑多个提交,如改变提交的顺序,合并提交,修改提交信息等。1
git rebase -i <commit_hash_or_HEAD>
-
查找问题(Blame and Bisect)
使用
git blame
可以查看文件的每一行是谁在什么时候添加的。1
git blame <file>
使用
git bisect
可以通过二分查找的方式快速定位引入bug的提交。1
2
3
4
5git bisect start
git bisect bad # 标记当前版本是坏的
git bisect good <commit_hash> # 标记某个提交之前的版本是好的
# Git会自动检出一个新的提交供你测试,直到找到引入bug的提交
git bisect reset # 结束bisect会话 -
大文件存储(Git LFS)
对于大文件,如视频、图片和其他二进制文件,可以使用
Git Large File Storage(LFS)
来更有效地管理。1
2git lfs install # 首先安装Git LFS
git lfs track "*.psd" git add .gitattributes # 跟踪大文件 -
工作流(Workflows)
了解并选择合适的工作流程对于团队协作来说非常重要。常见的Git工作流包括:
-
Feature Branch Workflow
-
Gitflow Workflow
-
Forking Workflow
-
Centralized Workflow
-