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 checkout -b <new-branch> 创建并立即切换到新分支(常用)。
git merge <branch-name> 将指定分支的修改合并到当前分支。

5. 远程操作 (Remote)

用于和远程仓库(如 GitHub, GitLab)进行数据交换。

命令 作用
git remote -v 查看远程仓库的详细信息(URL)。
git push <remote> <branch> 推送本地分支的提交到远程仓库。
git pull <remote> <branch> 从远程仓库拉取(获取并合并)最新修改。

🚀 将所有修改推送到远程仓库的步骤

如果您想把本地的所有修改和新增(包括您已经完成的多次 commit)推送到远程仓库,您需要遵循以下三个主要步骤:

步骤 1: 确保所有修改都已提交(Commit)

您需要使用 git addgit commit 将工作区和暂存区的所有修改都保存到本地仓库的历史记录中。

  1. 添加所有修改到暂存区:

    复制代码
    git add .
  2. 提交暂存区的修改到本地仓库:

    复制代码
    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 main
  • origin 通常是您的远程仓库的默认别名。

  • <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 (合并) 保留完整的历史记录,安全,是默认和推荐的操作。 提交历史图上会有额外的合并提交。 推荐 在集成长期分支(如 maindevelop)时使用。
Rebase (变基) 历史记录更简洁、线性。 会重写历史,不安全,可能需要强制推送。 不推荐在公共分支上使用;适用于在推送到远程前整理自己的私有分支提交。

如果您只是想简单地获取其他分支的最新代码,使用 git merge 是最好的选择。


撤销工作区的所有修改(最常用)

如果您改乱了代码,想放弃自上次提交以来的所有本地修改(还没执行过 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),它们不会被 resetcheckout 删掉。

  • 查看将被删除的新文件: git clean -n

  • 强制删除所有新文件/文件夹: git clean -fd


📝 总结建议

您的需求 命令
只想撤销某些文件的改动 git checkout -- <file>
想把所有改乱的代码重来 git checkout .
彻底回滚到当前节点(包含 add 过的) git reset --hard HEAD
想把误添加的文件移出暂存区 git restore --staged .
相关推荐
我有酒两杯2 小时前
记录一次git使用
git
caz283 小时前
git bash突然ssh不能用了
git·ssh·bash
Remember_9933 小时前
【JavaSE】一站式掌握Java面向对象编程:从类与对象到继承、多态、抽象与接口
java·开发语言·数据结构·ide·git·leetcode·eclipse
移远通信3 小时前
短信的应用
java·git·python
论迹4 小时前
【Git】-- 分支管理
git·ubuntu·版本控制
在下小孙4 小时前
Git与SVN常用指令
git·svn
H Journey18 小时前
Git 教程
git
蜜汁小强1 天前
macOS 上的git代理配置在哪里
git·macos·代理模式·proxy模式
钟佩颖1 天前
Git .
git