一、基础配置
git config --global user.name "Your Name"
:设置全局用户名。git config --global user.email "your_email@example.com"
:设置全局用户邮箱。
二、仓库操作
git init
:初始化一个新的 Git 仓库。git clone [repository-url]
:克隆一个远程仓库到本地。
三、工作区和暂存区操作
-
git add [file/directory]:将文件或目录添加到暂存区。
- 可以添加单个文件,如
git add index.html
。 - 也可以添加整个目录,如
git add src/
。
- 可以添加单个文件,如
-
git status:查看工作区和暂存区的状态。
- 显示哪些文件被修改、哪些文件已暂存、哪些文件未被跟踪等信息。
-
git diff:查看工作区与暂存区之间的差异。
git diff [file]
可以查看特定文件的差异。git diff --staged
查看暂存区和上次提交之间的差异。
-
git reset [file]:取消暂存文件。
- 如果不加文件参数,
git reset
可以撤销上一次git add
操作,将暂存区恢复到和工作区一致的状态。
- 如果不加文件参数,
四、提交操作
- git commit -m “Commit message” :提交暂存区的内容到本地仓库。
- 提交信息应该简洁明了地描述本次提交的更改内容。
-
git commit --amend:修改上一次提交。
- 可以修改提交信息,或者添加遗漏的文件到上一次提交中。
五、分支操作
git branch
:列出本地分支。git branch [branch-name]
:创建一个新分支。git checkout [branch-name]
:切换到指定分支。git merge [branch-name]
:将指定分支合并到当前分支。git branch -d [branch-name]
:删除本地分支。
六、远程仓库操作
- git remote add [remote-name] [repository-url] :添加一个远程仓库。
- 通常
remote-name
会设置为origin
,代表原始仓库。
-
git remote -v
:查看远程仓库的详细信息。 -
git push [remote-name] [branch-name]
:将本地分支推送到远程仓库。 -
git pull [remote-name] [branch-name]
:从远程仓库拉取最新的更改并合并到当前分支。 -
git fetch [remote-name]
:从远程仓库获取最新的更改,但不自动合并。
七、查看历史记录
- git log:查看提交历史。
- 可以使用各种参数来定制输出,如
git log --oneline
显示简洁的提交信息,git log --graph
以图形方式显示分支历史。
git show [commit-hash]
:查看特定提交的详细信息。
八、标签操作
git tag [tag-name]
:为当前提交打标签。git tag -a [tag-name] -m "Tag message"
:创建带注释的标签。git push [remote-name] [tag-name]
:将标签推送到远程仓库。
九、撤销操作
git revert [commit-hash]
:创建一个新的提交来撤销指定的提交,这种方式不会修改历史提交,而是在历史基础上新增一个反向操作的提交。git reset --hard [commit-hash]
:将 HEAD 指针强制指向指定的提交,同时重置暂存区和工作区,此操作会丢失指定提交之后的所有未提交的更改。要谨慎使用。
十、暂存特定更改
git stash
:将当前工作区的未提交的更改临时保存起来,以便在需要的时候恢复。可以在处理紧急问题时,先将当前工作状态保存,切换到其他任务,然后再恢复。git stash pop
:恢复最近一次暂存的更改,并从暂存列表中删除。git stash list
:查看暂存列表。
十一、比较分支和提交
git diff [branch1] [branch2]
:比较两个分支之间的差异。git diff [commit1] [commit2]
:比较两个特定提交之间的差异。
十二、子模块操作
git submodule add [repository-url] [path]
:将一个外部仓库作为子模块添加到当前项目中指定的路径下。git submodule update --init --recursive
:初始化并更新所有子模块。
十三、高级合并策略
git merge --squash
:将一个分支的更改合并到当前分支,但不保留其提交历史,而是将所有更改压缩为一个新的提交。git merge --no-ff
:强制创建一个合并提交,即使可以进行快速前向合并。
十四、查看文件历史
git blame [file]
:显示指定文件中每一行的最后修改的提交信息和作者。
十五、清理工作区
git clean -n
:显示哪些文件会被清理,不会实际删除。git clean -f
:删除未跟踪的文件。git clean -df
:删除未跟踪的文件和目录。
十六、搜索操作
git grep "search term"
:在当前仓库的所有文件中搜索指定的字符串。可以指定文件类型、目录等进行更精确的搜索。
十七、配置别名
git config --global alias.[alias-name] [command]
:为常用的 Git 命令设置别名,以提高效率。例如,可以设置git config --global alias.st status
,之后使用git st
就相当于git status
。
十八、处理冲突
- 当合并或拉取操作导致冲突时,Git 会在有冲突的文件中标记出冲突部分。你需要手动编辑这些文件来解决冲突。
- 解决冲突后,使用
git add [file]
将解决冲突后的文件添加到暂存区。 - 然后使用
git commit
提交解决冲突后的更改。
十九、远程仓库管理
git remote rename [old-name] [new-name]
:重命名远程仓库的别名。git remote remove [remote-name]
:删除一个远程仓库的连接。
二十、存储密码
- 如果你的远程仓库需要密码认证,可以使用
git config --global credential.helper store
来让 Git 在第一次输入密码后将密码存储在磁盘上,下次操作时不再需要输入密码。但这种方式不太安全,仅适用于个人开发环境且对安全性要求不高的情况。
二十一、交互式变基
git rebase -i [commit-hash]
:启动交互式变基操作,可以对一系列提交进行修改、合并、删除等操作,以整理提交历史。
二十二、检查仓库状态
git fsck
:检查仓库的完整性,查找丢失或损坏的对象。
二十三、查看分支关系图
git log --graph --oneline --decorate
:以图形化方式显示分支和提交的关系,以及标签和分支的装饰信息。
二十四、查看远程分支跟踪信息
git branch -vv
:显示本地分支与远程分支的跟踪关系以及最后一次提交的信息。
二十五、强制推送(谨慎使用)
git push --force [remote-name] [branch-name]
:强制将本地分支推送到远程分支,这会覆盖远程分支上的历史提交,可能导致其他开发者的工作出现问题,所以要非常谨慎使用。
二十六、设置上游分支
git push -u [remote-name] [branch-name]
:在首次推送分支时设置上游分支,之后可以直接使用git push
和git pull
而无需指定远程分支名。
二十七、查看提交统计信息
git shortlog -sn
:显示提交者的统计信息,包括提交次数和作者。
二十八、将本地标签推送到远程
git push [remote-name] --tags
:将本地的所有标签推送到远程仓库。
二十九、查看 Git 版本
git --version
:显示当前安装的 Git 版本信息。
三十、查看提交的树结构
git log --graph --pretty=oneline --abbrev-commit --decorate --all
:以更详细的图形方式展示提交的树结构和分支关系。
三十一、仅拉取特定分支
git fetch [remote-name] [branch-name]:[local-branch-name]
:从远程仓库拉取特定分支到本地,但不会自动切换到该分支。
三十二、忽略文件
- 在项目根目录创建一个
.gitignore
文件,在其中列出要被 Git 忽略的文件和目录模式。例如,*.log
表示忽略所有以.log
结尾的文件。
三十三、查看远程仓库的 URL
git remote get-url [remote-name]
:显示指定远程仓库的 URL。
三十四、子树合并
git subtree add --prefix=[subdirectory] [repository-url] [branch]
:将一个远程仓库的特定分支作为子树合并到当前项目的指定子目录中。git subtree pull --prefix=[subdirectory] [repository-url] [branch]
:从远程仓库拉取子树的更新。git subtree push --prefix=[subdirectory] [repository-url] [branch]
:将本地子树的更改推送到远程仓库。
三十五、查看文件在不同提交中的变化
git log -p [file]
:显示指定文件在各个提交中的具体变化内容。
三十六、创建和切换到新分支同时基于特定提交
git checkout -b [new-branch-name] [commit-hash]
:创建一个新分支并切换到该分支,新分支基于指定的提交。
三十七、重置暂存区的单个文件
git reset [file]
:将暂存区中的特定文件恢复到与工作区一致的状态,不影响其他文件的暂存状态。
三十八、将提交拆分为多个
git rebase -i --root
:可以对整个提交历史进行交互式变基,包括将一个大的提交拆分为多个小的提交。
三十九、查看 Git 对象信息
git cat-file -p [object-hash]
:查看特定 Git 对象(如提交、树、blob)的详细信息。
四十、在特定提交上运行命令
git checkout [commit-hash] -- [file or directory]
:可以在特定的提交上查看或修改文件或目录,而不影响当前分支的状态。但这种修改是临时的,不能直接提交。
四十一、查看分支的合并基础
git merge-base [branch1] [branch2]
:找出两个分支的共同祖先提交。
四十二、检查文件是否在暂存区或已提交
git ls-files [file]
:显示指定文件的状态,包括是否在暂存区或已提交。
四十三、清理过期的远程追踪分支
git remote prune [remote-name]
:删除远程仓库中已经不存在的分支的本地追踪分支。
四十四、查看提交的 SHA-1 值
git rev-parse [commit-ish]
:可以显示特定提交、分支或标签的 SHA-1 值。
四十五、在不同的 Git 仓库之间复制提交
- 可以使用
git cherry-pick [commit-hash]
将一个提交从一个分支复制到另一个分支。如果要复制一系列连续的提交,可以多次使用这个命令。
四十六、设置 Git 的颜色输出
git config --global color.ui auto
:启用彩色的 Git 输出,使不同类型的信息更容易区分。
四十七、查看分支的上游设置
git rev-parse --symbolic-full-name [branch-name]@{upstream}
:显示特定分支的上游分支设置。
四十八、比较两个不同仓库的差异
- 可以使用第三方工具如
git-diff-all
来比较两个不同的 Git 仓库之间的差异。
四十九、查看提交的日期和作者
git show --format=%cd -s --date=iso [commit-hash]
:显示指定提交的日期。git show --format=%an -s [commit-hash]
:显示指定提交的作者。
五十、设置 Git 的文本编辑器
git config --global core.editor [editor-name]
:设置用于编辑提交消息和其他文本输入的编辑器,例如git config --global core.editor vim
。