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 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 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 (合并) | 保留完整的历史记录,安全,是默认和推荐的操作。 | 提交历史图上会有额外的合并提交。 | 推荐 在集成长期分支(如 main 或 develop)时使用。 |
| 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),它们不会被 reset 或 checkout 删掉。
-
查看将被删除的新文件:
git clean -n -
强制删除所有新文件/文件夹:
git clean -fd
📝 总结建议
| 您的需求 | 命令 |
|---|---|
| 只想撤销某些文件的改动 | git checkout -- <file> |
| 想把所有改乱的代码重来 | git checkout . |
| 彻底回滚到当前节点(包含 add 过的) | git reset --hard HEAD |
| 想把误添加的文件移出暂存区 | git restore --staged . |