Git版本控制常用命令 ai生成仅记录⚙️ Git 常用命令以下是一些日常使用中最常用和最核心的 Git 命令1.初始化与克隆 (Setup)命令作用git init在当前目录创建一个新的 Git 仓库初始化。git clone url克隆远程仓库到本地。2.查看状态与历史 (Status History)命令作用git status查看工作区、暂存区的文件状态哪些文件被修改、新增或删除。git log查看提交历史记录。git diff查看工作区和暂存区或者暂存区和最新提交之间的差异。3.暂存与提交 (Stage Commit)这三个步骤是您将本地修改保存到 Git 历史记录中的核心流程。命令作用git add file将工作区的指定文件或修改添加到暂存区(Staging Area)。git add .将所有修改和新增的文件添加到暂存区。git commit -m commit message将暂存区的文件正式提交到本地仓库并记录一条提交信息。4.分支操作 (Branching)分支是 Git 的强大功能之一用于隔离开发工作。命令作用git branch列出所有本地分支。git branch branch-name创建一个新分支。git checkout branch-name/git switch branch-name切换到指定分支。git checkout -b new-branch/git switch -c new-branch创建并立即切换到新分支常用。git merge branch-name将指定分支的修改合并到当前分支。5.远程操作 (Remote)用于和远程仓库如 GitHub, GitLab进行数据交换。命令作用git remote -v查看远程仓库的详细信息URL。git push remote branch推送本地分支的提交到远程仓库。git pull remote branch从远程仓库拉取获取并合并最新修改。建立与远程仓库的连接如果你本地已经有代码想关联到一个新创建的 GitHub 仓库添加远程地址git remote add origin 仓库URL注意origin是约定俗成的远程仓库别名你也可以起别的名字但通常建议用origin。验证连接情况git remote -v这会列出你目前关联的所有远程地址。如果输出为空说明还没连上。 将所有修改推送到远程仓库的步骤如果您想把本地的所有修改和新增包括您已经完成的多次commit推送到远程仓库您需要遵循以下三个主要步骤步骤 1: 确保所有修改都已提交Commit您需要使用git add和git commit将工作区和暂存区的所有修改都保存到本地仓库的历史记录中。添加所有修改到暂存区git add .提交暂存区的修改到本地仓库git commit -m 完成了本次所有的功能开发和修改提示运行git status确认没有未提交的修改工作区是干净的。步骤 2: 拉取远程仓库最新代码Pull在推送之前强烈建议先拉取一次远程仓库的最新代码以避免冲突。这是因为在您开发的过程中可能有其他同事也推送了新的代码。git pull origin your-branch-name # 示例如果您在 main 分支通常是 # git pull origin main如果远程有新的提交Git 会尝试自动合并。如果发生冲突 (Conflict)您需要手动解决冲突解决后再次git add .和git commit -m 解决冲突。步骤 3: 推送本地提交到远程仓库Push最后将您本地分支上新的提交推送到远程仓库。git push origin your-branch-name # 示例 # git push origin mainorigin通常是您的远程仓库的默认别名。your-branch-name是您当前所在的分支名称比如main,master, 或您的功能分支。执行完git push后您的所有本地修改就成功同步到远程仓库了 拉取其他分支代码的方法假设您当前在feature-A分支上工作但您需要获取main分支上的最新代码。1. 切换到目标分支然后合并Merge - 推荐使用这是最常用且最安全的方式它会将两个分支的修改历史都保留下来并创建一个新的“合并提交”来记录这次整合。步骤命令作用a. 切换到你的分支git checkout feature-A确保您位于想要接收代码的那个分支。b. 拉取并合并git merge main将main分支上的所有提交合并到当前的feature-A分支。执行git merge后的结果如果feature-A没有在main之后做任何修改Git 会执行快进式合并(Fast-Forward)。如果两个分支都有新的提交Git 会创建一个新的合并提交将两者的历史连接起来。如果遇到冲突您需要手动解决冲突然后使用git add .和git commit来完成合并。2. 变基Rebase - 适用于清理历史变基操作会将您当前分支的提交“移动”到目标分支的最新提交之后让您的历史看起来像是在目标分支的最新点上直接开始的。这会创建一个更线性的提交历史。步骤命令作用a. 切换到你的分支git checkout feature-A确保您位于想要接收代码的那个分支。b. 执行变基操作git rebase main将feature-A的所有提交重新应用到main分支的最新提交之上。执行git rebase后的结果feature-A上的提交会获得新的 SHA-1 ID。如果遇到冲突Git 会停下来您解决冲突后使用git rebase --continue继续变基过程。变基后由于历史被重写当您推送到远程仓库时可能需要使用强制推送(git push -f)但这非常危险仅当您完全理解其风险并且您的分支是私有分支时才推荐使用。⚠️注意不要对已经被推送到远程仓库且被多人共享的分支执行rebase操作。 总结与推荐操作优点缺点/注意点适用场景Merge (合并)保留完整的历史记录安全是默认和推荐的操作。提交历史图上会有额外的合并提交。推荐在集成长期分支如main或develop时使用。Rebase (变基)历史记录更简洁、线性。会重写历史不安全可能需要强制推送。不推荐在公共分支上使用适用于在推送到远程前整理自己的私有分支提交。如果您只是想简单地获取其他分支的最新代码使用git merge是最好的选择。Git撤销更改撤销工作区的所有修改最常用如果您改乱了代码想放弃自上次提交以来的所有本地修改还没执行过git add的部分命令git checkout .或者Git 新版本推荐git restore .作用将当前目录下所有受版本控制的文件恢复到上次提交时的状态。注意这个操作是不可逆的您本地还没提交的代码会直接消失。撤销已暂存的修改Unstage如果您已经运行了git add但还没git commit想把文件从暂存区拉回到工作区变成“已修改但未暂存”的状态命令git reset HEAD 文件名或者Git 新版本推荐git restore --staged 文件名作用撤销git add的效果但保留您在文件里写的代码修改。彻底重置放弃所有修改 放弃暂存Hard Reset如果您想一步到位把暂存区和工作区的修改全部删掉让它们跟当前节点一模一样命令git reset --hard HEAD作用强制将当前分支重置为HEAD。这会抹除所有未提交的记录。清理新增的文件Untracked Files上述命令只能处理“已被 Git 追踪”的文件。如果您新建了文件Untracked它们不会被reset或checkout删掉。查看将被删除的新文件git clean -n强制删除所有新文件/文件夹git clean -fd 总结建议您的需求命令只想撤销某些文件的改动git checkout -- file想把所有改乱的代码重来git checkout .彻底回滚到当前节点包含 add 过的git reset --hard HEAD想把误添加的文件移出暂存区git restore --staged .Git删除分支在 Git 中删除分支分为两种情况删除本地分支和删除远程仓库中的分支。1. 删除本地分支如果您已经完成了在该分支上的工作并将其合并到了主分支可以使用以下命令安全删除推荐git branch -d 分支名注意如果该分支包含尚未合并的修改Git 会报错以防止您丢失代码。强制删除慎用如果您确定不再需要该分支无论它是否合并都可以强制删除。git branch -D 分支名2. 删除远程分支如果您想从 GitHub 或 GitLab 等服务器上彻底删除某个分支需要使用push命令配合--delete参数。命令格式git push origin --delete 分支名origin是远程仓库的默认名称。执行后远程服务器上的该分支将被移除。 常见问题与提示不能删除当前所在的分支如果您正处于要删除的分支上Git 会报错。您必须先切换到其他分支如 master 或 maingit checkout master git branch -d 要删除的分支名清理本地残留的远程追踪有时候远程分支删除了但本地运行 git branch -a 还能看到。可以使用以下命令同步清理git fetch origin --prune.gitignore# 忽略所有的 .a 文件 *.a # 但追踪 lib.a尽管上面忽略了 .a 文件 !lib.a # 只忽略当前目录下的 TODO 文件不包含 subdir/TODO /TODO # 忽略 build/ 目录下的所有文件 build/ # 忽略 doc/notes.txt但不忽略 doc/server/arch.txt doc/*.txt # 忽略所有 .pdf 文件无论在哪个目录下 **/pdf/*.pdf克隆仓库时对子模块更新git submodule update --init --recursive改用户名和邮件# 一次性配置全局用户信息 git config --global user.name Zhang San git config --global user.email zhangsanexample.com # 为特定项目使用不同身份如工作/个人 cd /path/to/work-project git config user.name Zhang San (Work) git config user.email zhangsancompany.com只取几个提交想取任意几个提交直接输分支名就行git cherry-pick c1 c3 c4查看所有分支图git log --all --graph --oneline --decorate--all显示所有分支包括远程分支不仅仅是当前分支。--graph以图形化ASCII 字符显示提交历史树。--oneline每个提交只显示一行简化的 Hash 值和提交信息更紧凑。--decorate显示分支名、标签名如HEAD,origin/main方便识别。临时保存将未提交的修改“藏起来”清空工作区以便切分支或拉代码# 1. 保存当前修改压栈 git stash # 保存已追踪文件的修改 暂存区内容 git stash -u # 同时保存新增但未追踪的文件✅ 推荐 git stash push -m 修复登录页样式 # 添加描述方便后续识别 # 2. 查看已保存的列表 git stash list # 输出示例 # stash{0}: WIP on main: a1b2c3d 修复登录页样式 # stash{1}: WIP on dev: e4f5g6h 临时保存 # 3. 恢复修改出栈/应用 git stash pop # 恢复最近一次 stash并从列表中删除 git stash apply # 恢复最近一次 stash但保留在列表中可重复应用 git stash pop stash{2} # 恢复指定编号的 stash # 4. 删除 stash git stash drop stash{0} # 删除指定条目 git stash clear # 清空所有 stash使用场景开发到一半突然要切分支修 Buggit stash -u # 藏起当前工作 git checkout hotfix # 切换分支 # 修完切回后 git stash pop # 恢复之前进度Pull 前本地有冲突/未提交修改git stash -u git pull origin main git stash pop # 若冲突Git 会保留 stash解决后手动 git stash drop临时对比原始文件状态stash会清空工作区方便你直接git diff或查看干净版本。git回退到旧版本从旧版本拉出一个新分支的操作# 找旧提交 git log --oneline找要回退的commit id复制 # 回到旧提交 git checkout abc1234要回退的commit id) # 从这里创建新分支 git checkout -b my-new-branch # 提交你的修改 git add . git commit -m 基于旧版本修复用这个创建新分支也可以git switch -c 新分支名