Git是一个功能强大的版本控制系统,它提供了一系列的命令来帮助开发者进行日常的版本控制操作。以下是一些常用的Git命令及其简要介绍:
初始化和配置
git init
: 初始化一个新的Git仓库。git config
: 配置Git的设置,如用户名、邮箱等。
文件更改
git add <file>
: 将指定文件添加到暂存区。git rm <file>
: 从暂存区和工作目录中删除文件。git mv <old> <new>
: 移动或重命名文件。
查看状态和日志
git status
: 查看当前工作目录的状态。git log
: 查看提交历史。git reflog
: 查看所有HEAD的变动记录,用于恢复丢失的提交。git diff
: 查看工作目录和暂存区或HEAD之间的差异。
提交更改
git commit
: 提交暂存区的更改到仓库。git commit -m "message"
: 提交并添加提交信息。git commit --amend
: 修改最后一次提交。
分支和标签
git branch
: 列出所有本地分支。git branch -a
: 列出所有分支(本地和远程)。git checkout <branch>
: 切换到指定分支。git switch <branch>
: (Git 2.23+)切换到指定分支。git branch -d <branch>
: 删除本地分支。git tag
: 列出所有标签。git tag <name>
: 创建一个新的标签。
远程仓库
git clone <url>
: 克隆远程仓库到本地。git remote
: 显示远程仓库的简写名和URL。git remote add <name> <url>
: 添加远程仓库。git fetch
: 从远程仓库获取所有分支的最新状态。git pull
: 拉取远程分支的更改并合并到当前分支。git push
: 推送本地分支的更改到远程仓库。git push -u origin <branch>
: 推送本地分支到远程仓库,并设置上游分支。
合并和衍合
git merge <branch>
: 将指定分支的更改合并到当前分支。git rebase
: 将当前分支的更改移植到另一分支上。
撤销和重置
git reset
: 重置当前HEAD到指定的状态。git reset --hard
: 重置HEAD并丢弃所有更改。git reset --soft
: 重置HEAD,但不更改索引和工作目录。git reset --mixed
: (默认)重置HEAD和索引,但不更改工作目录。git revert <commit>
: 创建一个新的提交,撤销指定提交的更改。
冲突解决
git merge --abort
: 中止当前的合并操作。git rebase --abort
: 中止当前的衍合操作。
子模块
git submodule add <url>
: 添加子模块到仓库。git submodule update
: 更新所有子模块。
其他
git clean
: 清除工作目录中未跟踪的文件。git stash
: 临时存储未提交的更改。git stash pop
: 恢复之前存储的更改。git bisect
: 二分查找引入错误的提交。
高级查看状态
git show
: 显示提交、标签或分支的信息。git diff --staged
或git diff --cached
: 比较暂存区和上一次提交之间的差异。git diff <branchA> <branchB>
: 比较两个分支之间的差异。
忽略文件
.gitignore
: 一个配置文件,用于指定Git应忽略的文件或目录模式。
交互式暂存
git add -i
或git interactive-add
: 进入一个交互式暂存界面,可以逐步添加更改。
补丁管理
git apply <patch>
: 应用一个补丁文件。git am
: 将邮件格式的补丁应用到仓库中。
子命令
git submodule foreach <command>
: 对所有子模块执行指定的命令。
远程分支操作
git push <remote> --delete <branch>
: 删除远程分支。git push <remote> --tags
: 推送所有标签到远程仓库。
远程仓库管理
git remote rename <old> <new>
: 更改远程仓库的名称。git remote remove <remote>
或git remote rm <remote>
: 删除远程仓库的引用。
远程跟踪分支
git branch -r
: 列出所有远程跟踪分支。git branch -vv
: 显示本地分支和远程跟踪分支的最新提交。
工作流支持
git flow
: 一个使用Git的分支工作流工具,帮助管理复杂的开发过程。
配置和帮助
git config --list
: 列出所有配置项。git help <command>
: 显示指定命令的帮助信息。
性能优化
git gc
: 清理仓库,优化性能。git prune
: 修剪未使用的对象,减少仓库大小。
钩子(Hooks)
pre-commit
: 提交前运行的脚本。post-commit
: 提交后运行的脚本。pre-push
: 推送前运行的脚本。post-receive
: 接收推送后运行的脚本。
其他实用命令
git archive <branch> | tar -x
: 从Git仓库中导出特定分支的文件。git shortlog
: 显示提交历史的概要。git whatchanged
: 显示仓库的变更日志。
子模块(Submodules)高级操作
git submodule update --remote
: 更新子模块到其远程仓库的最新状态。git submodule foreach --recursive
: 在所有子模块及其子子模块中递归执行命令。
工作树(Worktrees)
git worktree add
: 添加一个新的工作树,允许在不同分支间轻松切换。git worktree prune
: 清理未使用的工作树。
替代Hashes(替代哈希)
git alternate-refs
: 管理替代引用,用于创建可以合并回来的实验性分支。
引用(References)
git show-ref
: 显示所有引用和它们的目标。git update-ref
: 更新引用到特定的commit。
打包
git bundle
: 创建一个包含多个分支和标签的包,方便传输。
网络操作
git ls-remote <remote>
: 列出远程仓库的引用和它们的哈希值。
清理
git clean -d
: 清除工作目录中的未跟踪目录。git gc --prune=<date>
: 清理老旧的无需打包的对象。
子命令的子命令
git remote show <remote>
: 显示远程仓库的详细信息。git branch -r --sort=-creatordate
: 按创建日期排序显示远程分支。
诊断
git fsck
: 检查数据库的完整性。git count-objects
: 显示对象数据库的统计信息。
邮件
git am -3
: 应用补丁,对每个电子邮件消息创建一个提交。git format-patch
: 生成一系列补丁文件。
合并策略
git merge -s ours
: 合并时采用当前分支作为主分支。git merge -s recursive
: 使用递归策略合并分支。
撤销操作
git reset --soft
: 回退到指定的状态,但不撤销工作目录中的更改。git reset --mixed
: (默认)回退到指定的状态,并重置暂存区,但不改变工作目录。
别名
git config --global alias.<name> <command>
: 创建自定义别名以简化命令。
钩子(Hooks)的使用
- 你可以在
.git/hooks/
目录下创建自定义脚本,这些脚本会在特定的Git事件发生时自动运行。
配置文件
.gitconfig
: 全局配置文件,位于用户的主目录下。.gitmodules
: 管理子模块的配置文件。
交互式变基
git rebase -i <commit>
: 交互式变基,允许你修改、删除、压缩或重新排序commit。
比较和合并
git cherry-pick <commit>
: 应用一个特定的commit到当前分支。git diff-tree <commit1> <commit2>
: 显示两个commit之间的差异。
远程分支的跟踪
git branch -u <remote>/<branch>
: 设置上游分支,使得git pull
和git push
可以直接使用。
撤销暂存区更改
git reset HEAD <file>
: 撤销暂存区的更改,但不改变工作目录。git restore <file>
: 撤销暂存区的更改,恢复工作目录的更改。
这些命令和概念覆盖了从日常使用到高级维护的各个方面,可以帮助你更深入地理解和使用Git。随着你对Git的不断学习和实践,你将能够更加熟练地运用这些工具来优化你的工作流程。