版本库初始化与远程协作 (Clone, Push, Pull, Fetch)
指令 | 场景描述 | 示例用法 |
git clone [地址] | 首次加入团队或初始化项目时,将中央(远程)仓库克隆到本地,同时会在本地创建 .git 目录作为本地仓库。 | git clone https://github.com/rengwuxian/git-practice.git |
git clone [地址] [目录名] | 克隆远程仓库时,手动指定本地仓库根目录的名称(例如模拟同事的本地仓库)。 | git clone https://github.com/rengwuxian/git-practice.git git-practice-another |
git push | 将本地仓库中已提交的改动上传(发布)到远程(中央)仓库。默认情况下,只能上传之前从远端克隆或拉取下来的分支。 | git push |
git push origin [branch_name] | 远程推送本地创建的分支(例如 books),需要手动指定目标仓库(origin)和目标分支。 | git push origin books |
git push origin [branch_name] -f / --force | 在本地对已推送到远程的 commit 进行了修改或删除(例如使用 rebase 后),需要强制推送本地内容覆盖中央仓库的内容。 | git push origin branch1 -f |
git push origin -d [branch_name] | 删除远程仓库上的指定分支(例如 books)。 | git push origin -d books |
git pull | 从远程仓库(GitHub)取回新的提交,并与本地代码合并。该操作的内部实现是先 fetch 再 merge。 | git pull |
git fetch | 作为 git pull 的第一步,用于下载远端仓库的内容,包括远端仓库的 HEAD 和 master 的本地镜像 (origin/HEAD 和 origin/master)。 | (作为内部操作,无需单独示例) |
暂存与提交 (Staging & Committing)
指令 | 场景描述 | 示例用法 |
git status | 查看工作目录的当前状态,包括当前分支、是否领先/落后于远端仓库、已修改但未暂存的文件、以及未追踪(untracked)的文件等信息。 | git status |
git add [文件名] | 让 Git 开始跟踪文件,或将文件改动内容添加到暂存区(staging area),准备进行提交。 | git add shopping\ list.txt |
git add . | 将工作目录下所有改动(包括已修改和未追踪的文件)全部放进暂存区。 | git add . |
git commit | 将暂存区中的所有改动打包成一个版本快照,并记录到本地仓库的版本历史中。 | git commit |
git commit --amend | 修正最新的一条提交(commit)。它将当前的 commit 内容和暂存区(staging area)中的新内容合并起来,生成一个新的 commit 替换掉原来的最新提交。 | git add 笑声.txt<br>git commit --amend |
历史查阅与比较 (Log, Show, Diff, Reflog)
指令 | 场景描述 | 示例用法 |
git log | 列出提交历史(查看版本历史),显示每个 commit 的 ID(SHA-1)、作者、日期和提交信息。 | git log |
git log -p / --patch | 查看提交历史中每个 commit 所包含的详细改动(逐行差异),适用于代码 review。 | git log -p |
git log --stat | 查看提交历史中每个 commit 的简要统计信息,例如哪些文件被修改了,适合大致回顾改动内容。 | git log --stat |
git show | 查看当前 HEAD 所指向的最新 commit 的具体改动内容。 | git show |
git show [SHA-1/引用] | 查看指定 SHA-1 码或引用的任意 commit 的改动内容。 | git show 5e68b0d8 |
git show [SHA-1/引用] [文件名] | 仅查看指定 commit 中特定文件的改动。 | git show 5e68b0d8 shopping\ list.txt |
git diff | 比较工作目录和暂存区之间的差异,显示已修改但未被 add 到暂存区的内容。 | git diff |
git diff --staged / --cached | 比较暂存区和上一次提交(HEAD)之间的差异,显示运行 git commit 将会提交哪些内容。 | git diff --staged |
git diff HEAD | 比较工作目录和上一次提交(HEAD)之间的总差异(不包含未追踪文件)。 | git diff HEAD |
git reflog | 查看 Git 仓库中引用的移动记录,默认显示 HEAD 的移动记录,常用于找回被误删的分支。 | git reflog |
分支管理与切换 (Branch & Checkout)
指令 | 场景描述 | 示例用法 |
git branch [名称] | 在当前 commit 处创建一个新的分支(例如 feature1),但不会自动切换 HEAD。 | git branch feature1 |
git checkout [名称] | 切换到指定的分支(例如 feature1),将 HEAD 移动到该分支,并更新工作目录内容。 | git checkout feature1 |
git checkout -b [名称] | 组合操作:创建一个新的分支并立即切换过去(例如 books),常用于 Feature Branching 工作流。 | git checkout -b books |
git checkout [commit 引用] | 签出指定的 commit,让 HEAD 直接指向该 commit,而不是指向一个 branch。 | git checkout HEAD^^ |
git checkout -- [文件名] | 撤销工作目录中指定文件(例如 shopping list.txt)的修改,使其内容回退到 HEAD 处的状态(即丢弃工作目录中的改动)。 | git checkout -- [文件名] |
git checkout --detach | 让 HEAD 与当前 branch 脱离,直接指向当前 commit,进入“分离头指针”状态,但不移动 HEAD 的位置。 | git checkout --detach |
git branch -d [名称] | 删除一个已经合并到 master 或当前分支的本地分支。若未合并,该操作会失败。 | git branch -d feature1 |
git branch -D [名称] | 强制删除一个尚未合并到 master 的分支(大写 -D 强制删除)。 | (例如 git branch -D feature1) |
历史修改与撤销 (Rebase, Reset, Revert)
指令 | 场景描述 | 示例用法 |
git commit --amend | 修正最新一条本地提交的错误:发现最新提交(commit)有错别字或遗漏了小改动,希望用一个新提交来替换掉这个最新的提交,而不是新增一条修复提交。 | (先修改文件并放入暂存区) git add 笑声.txt git commit --amend |
git rebase [目标基础点] | 重新设置提交序列的基础点:用于将当前分支的一串 commits 重新提交到指定的基点上。通常用于将分支历史记录线性化,避免 merge 导致的分叉结构。 | (例如,在 branch1 上,以 master 为新的基础点) git checkout branch1 git rebase master |
git rebase -i [目标 commit] | 交互式 Rebase:用于修改、合并、删除或重新排序非最新的 commits。例如,修复倒数第二个 commit 的错误。 | (例如,修改倒数第二个 commit) git rebase -i HEAD^^ |
edit | (交互式 Rebase 内部指令)在 rebase -i 过程中,用于指定应用该 commit 后停止 rebase 进程,以便进行修正(通常配合 commit --amend 使用)。 | (在交互式编辑界面中,将 commit 前的 pick 改为 edit) |
pick | (交互式 Rebase 内部指令)在 rebase -i 过程中,表示“直接应用”该 commit。 | (默认操作) |
drop | (交互式 Rebase 内部指令)在 rebase -i 过程中,通过删除对应的 commit 所在行,达到撤销(丢弃)该 commit 的目的。 | (在交互式编辑界面中,删除该 commit 所在行) |
git rebase --continue | 在 rebase -i 暂停(如使用 edit 或解决冲突)并完成修改后,用于继续 rebase 进程。 | git rebase --continue |
git rebase --onto [目标] [起点] [终点] | 高级 Rebase 选项,用于精确指定 rebase 的起点和终点,可用于在 rebase 过程中剔除特定范围内的 commits。 | (例如,撤销倒数第二个 commit,使其路径从 HEAD^ 到 branch1 的 commit 重新提交到 HEAD^^ 上) git rebase --onto HEAD^^ HEAD^ branch1 |
git reset --hard [目标 commit] | 撤销最新的本地提交:将 HEAD 和当前 branch 重置到目标 commit。同时,它会清空工作目录和暂存区的所有未提交改动。 | (例如,撤销最新一次提交) git reset --hard HEAD^ |
git reset --soft [目标 commit] | 保留已暂存的内容:重置 HEAD 和当前 branch。同时,它会保留工作目录和暂存区的内容,并将 HEAD 移动带来的新差异放进暂存区(Changes to be committed)。 | (例如,撤销最新一次提交,并保留其所有更改为已暂存状态) git reset --soft HEAD^ |
git reset [目标 commit] | 保留工作目录,清空暂存区:默认使用 --mixed 参数。它会重置 HEAD 和当前 branch。同时,它会保留工作目录的内容,但会清空暂存区。 | (例如,撤销最新一次提交,并保留其所有更改为未暂存状态) git reset HEAD^ |
git revert [目标 commit] | 撤销已推送到中央仓库的提交:不会抹去历史,而是新增一个提交来反转(抵消)目标 commit 的改动。适用于在 master 分支或共享分支上修正错误。 | (例如,反转倒数第二个提交) git revert HEAD^ |
git push origin [branch_name] -f / --force | 强制推送:当你对本地的 commits 历史(例如在私有分支上)进行了修改或删除(如使用 rebase 或 reset)后,用于忽略冲突,强制用本地修改后的内容覆盖远程仓库的内容。 | (修正本地分支 branch1 历史后) git push origin branch1 -f |
临时存储 (Stashing)
指令 | 场景描述 | 示例用法 |
git stash | 临时存放工作目录的改动:在处理紧急任务或切换分支时,没有时间或必要进行临时 commit,可以将工作目录中已修改但未提交的改动临时保存起来,以便快速清理工作目录。 | git stash |
git stash -u | 包含未跟踪文件:临时存放所有改动,包括那些 Git 尚未跟踪(untracked)的新文件。 -u 是 --include-untracked 的缩写。 | git stash -u |
git stash pop | 恢复存储的改动:从 stash 列表中恢复最近一次存储的改动,并将其从列表中删除。 | git stash pop |
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/22857dfe-0c22-4ddc-b89e-5faa7b20b4d2
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts