Git命令入门版操作指南

Git 常用操作指南:从入门到日常

Git 是现代软件开发中不可或缺的版本控制系统。它强大而灵活,但也可能因为命令繁多而让初学者望而生畏。本指南旨在总结 Git 的常用操作,帮助你快速上手并高效地在日常工作中使用它,作为笔记使用。

一、初始配置 (Global Setup)

在你开始使用 Git 之前,进行一些全局配置是很重要的,这样你的提交就会有正确的身份信息。

# 设置你的用户名 (会被记录在提交历史中)
git config --global user.name "你的名字或昵称"

# 设置你的邮箱 (同样会被记录)
git config --global user.email "你的邮箱@example.com"

# (可选) 设置默认的文本编辑器,用于编辑提交信息等
# 例如使用 VS Code: git config --global core.editor "code --wait"
# 例如使用 Vim: git config --global core.editor "vim"

# 查看当前配置
git config --list

二、创建与克隆仓库 (Repositories)

1. 初始化新仓库

在现有项目目录中创建一个新的 Git 仓库:

cd /path/to/your/project
git init

2. 克隆现有仓库

从远程服务器(如 GitHub, GitLab, Gogs)复制一个项目到本地:

git clone <repository_url>
# 例如: git clone https://github.com/user/repo.git

# 克隆到指定名称的本地目录
git clone <repository_url> <custom_directory_name>

三、核心工作流程:修改、暂存、提交 (The Basic Workflow)

这是 Git 日常使用中最核心的循环。

1. 查看状态

检查工作目录和暂存区的状态,了解哪些文件被修改、新增或待提交:

git status

2. 添加文件到暂存区 (Staging)

将文件的更改“暂存”起来,准备下一次提交。

# 添加指定文件
git add <file_name>
# 例如: git add README.md

# 添加多个文件
git add <file1> <file2>

# 添加当前目录下所有已修改或新创建的文件 (不包括被 .gitignore 忽略的文件)
git add .

# 添加所有已跟踪文件的修改 (包括删除) 以及新文件
git add -A

3. 提交更改 (Committing)

将暂存区的内容永久记录到本地仓库的历史中。

git commit -m "你的提交信息,清晰描述本次更改的内容"
# 例如: git commit -m "Add initial project files"

# 跳过暂存步骤,直接提交所有已跟踪文件的修改 (对新文件无效)
git commit -a -m "快速提交已跟踪文件的修改"

4. 其他快照操作

# 从暂存区移除文件,但保留工作目录的修改
git reset <file_name>
# 或
git reset HEAD <file_name>

# 删除工作目录和暂存区的文件,并记录删除操作
git rm <file_name>

# 停止追踪文件 (从暂存区移除),但保留在本地工作目录
# (常用于将已追踪文件加入 .gitignore)
git rm --cached <file_name>

# 重命名或移动文件,并让 Git 知道
git mv <old_filename> <new_filename>

四、分支管理 (Branching)

分支是 Git 的核心特性,允许多人并行开发或尝试新功能而不影响主线代码。

1. 查看与创建分支

# 列出所有本地分支,当前分支会用 * 标记
git branch

# 列出所有远程分支
git branch -r

# 列出所有本地和远程分支
git branch -a

# 创建一个新分支 (但不切换)
git branch <new_branch_name>
# 例如: git branch feature/user-login

2. 切换分支

# 切换到已存在的分支 (Git 2.23 之前)
git checkout <branch_name>
# 例如: git checkout feature/user-login

# 切换到已存在的分支 (Git 2.23+ 推荐)
git switch <branch_name>

# 创建并立即切换到新分支 (Git 2.23 之前)
git checkout -b <new_branch_name>
# 例如: git checkout -b hotfix/critical-bug

# 创建并立即切换到新分支 (Git 2.23+ 推荐)
git switch -c <new_branch_name>

3. 删除分支

# 删除已合并到当前分支的本地分支
git branch -d <branch_name>

# 强制删除本地分支 (即使未合并,慎用!)
git branch -D <branch_name>

4. 重命名分支

# 如果当前在要重命名的分支上
git branch -m <new_branch_name>

# 如果当前不在要重命名的分支上
git branch -m <old_branch_name> <new_branch_name>

五、合并与变基 (Merging & Rebasing)

将不同分支的工作整合到一起。

1. 合并 (Merge)

将指定分支的历史合并到当前分支,通常会创建一个新的“合并提交”。

# 切换到接收更改的分支 (例如 main 或 master)
git switch main

# 合并 feature 分支到 main
git merge <feature_branch_name>
# 例如: git merge feature/user-login

如果出现冲突,你需要手动解决冲突文件,然后 git add <resolved_file>,最后 git commit
如果想中止合并:git merge --abort

2. 变基 (Rebase)

将当前分支的提交“重新播放”在目标分支的最新提交之上,使提交历史更线性、更整洁。

# 切换到要变基的分支 (例如 feature 分支)
git switch feature/user-login

# 将 feature/user-login 变基到 main 分支上
git rebase main

变基也可能产生冲突,解决方式类似合并,但解决后使用 git rebase --continue
如果想中止变基:git rebase --abort

注意: 不要在已经推送到公共远程仓库并被他人使用的分支上执行 rebase,因为它会改写历史。

六、与远程仓库协作 (Remotes)

1. 查看与管理远程仓库

# 列出所有配置的远程仓库及其 URL
git remote -v

# 添加一个新的远程仓库 (通常命名为 origin)
git remote add <remote_name> <repository_url>
# 例如: git remote add origin https://github.com/your_username/your_project.git

# 移除指定的远程仓库
git remote rm <remote_name>

# 重命名远程仓库
git remote rename <old_name> <new_name>

2. 从远程仓库获取更新

# 下载远程仓库的所有分支和对象的最新信息,但不会自动合并到本地分支
git fetch <remote_name>
# 例如: git fetch origin

# 下载所有远程仓库的更新
git fetch --all

3. 拉取并合并更新 (Pull)

git pull 实际上是 git fetch 紧跟着一个 git merge (或 git rebase,取决于配置)。

# 从远程仓库的指定分支拉取更新并合并到当前本地分支
git pull <remote_name> <branch_name>
# 例如: git pull origin main

# 如果当前本地分支已设置了上游跟踪分支,可以简化为:
git pull

4. 推送本地更改到远程仓库 (Push)

# 将本地指定分支的提交推送到远程仓库的对应分支
git push <remote_name> <local_branch_name>:<remote_branch_name>
# 例如: git push origin main:main (如果本地和远程分支名相同,可简写)
git push origin main

# 推送并设置上游跟踪分支 (下次可直接用 git push)
git push -u <remote_name> <branch_name>
# 例如: git push -u origin feature/new-feature

# 删除远程分支 (两种方式)
git push <remote_name> --delete <remote_branch_name>
git push <remote_name> :<remote_branch_name> # 冒号前为空

# 强制推送 (会覆盖远程历史,非常危险,仅在确知后果时使用!)
git push --force <remote_name> <branch_name>

七、查看历史与状态 (Inspecting History)

1. 查看提交历史 (Log)

# 显示当前分支的提交历史
git log

# 单行简洁显示
git log --oneline

# 图形化显示分支和合并历史
git log --graph

# 自定义格式
git log --pretty=format:"%h - %an, %ar : %s"

# 查看特定文件的提交历史
git log <file_name>

# 查看特定文件的详细修改历史 (包括 diff)
git log -p <file_name>

2. 查看更改详情 (Diff)

# 显示工作目录中相对于暂存区的更改
git diff

# 显示暂存区相对于上次提交的更改
git diff --staged
# 或
git diff --cached

# 显示两次提交之间的差异
git diff <commit_hash1> <commit_hash2>

# 显示两个分支之间的差异
git diff <branch1>..<branch2>

3. 显示单次提交详情

git show <commit_hash_or_branch_name>

八、撤销操作 (Undoing Changes)

Git 提供了多种撤销操作的方式,务必小心使用。

1. 撤销工作目录的修改

# 丢弃工作目录中对指定文件的修改 (恢复到上次提交或暂存的状态)
# 注意:此操作不可逆,会丢失未保存的修改!
git checkout -- <file_name>

2. 取消暂存

见上文 git reset <file_name>

3. 重置提交 (Reset)

git reset 可以将 HEAD(当前分支的顶端)移动到不同的提交。

# --soft: 移动 HEAD,保留暂存区和工作目录的更改。之前的提交会变成未暂存。
git reset --soft <commit_hash_or_HEAD~N>
# 例如回退到上一个提交: git reset --soft HEAD~1

# --mixed (默认): 移动 HEAD,重置暂存区,保留工作目录的更改。
git reset <commit_hash_or_HEAD~N>
# 例如回退到上一个提交,并将更改放入工作目录: git reset HEAD~1

# --hard: 移动 HEAD,重置暂存区和工作目录到指定提交的状态。
# 注意:此操作会丢失目标提交之后的所有提交以及未提交的本地更改,非常危险!
git reset --hard <commit_hash_or_HEAD~N>
# 例如彻底回退到上一个提交: git reset --hard HEAD~1

4. 反转提交 (Revert)

git revert 会创建一个新的提交,其内容是指定提交的“反向”操作。这是一种安全的撤销方式,因为它不改变现有历史。

git revert <commit_hash_to_revert>
# 例如: git revert abc1234

5. 清理未追踪文件

# 预览将要删除的未追踪文件和目录
git clean -fdn

# 实际删除工作目录中未被追踪的文件和目录
# 注意:此操作会删除文件,不可逆!
git clean -fd

九、标签 (Tagging)

标签用于标记项目历史中的重要节点,如版本发布。

# 列出所有标签
git tag

# 创建一个轻量标签 (指向当前提交)
git tag <tag_name>
# 例如: git tag v1.0.0

# 创建一个附注标签 (包含作者、日期、消息等信息)
git tag -a <tag_name> -m "标签描述信息"
# 例如: git tag -a v1.0.1 -m "Version 1.0.1 release"

# 查看特定标签的信息
git show <tag_name>

# 删除本地标签
git tag -d <tag_name>

# 推送指定标签到远程仓库
git push <remote_name> <tag_name>
# 例如: git push origin v1.0.1

# 推送所有本地标签到远程仓库
git push <remote_name> --tags

十、其他实用技巧

1. .gitignore 文件

在项目根目录创建一个名为 .gitignore 的文件,列出你希望 Git 忽略(不追踪)的文件或目录模式。例如:

# 编译产物
*.o
*.class
target/

# 日志文件
*.log

# 操作系统生成的文件
.DS_Store
Thumbs.db

# 依赖目录
node_modules/
vendor/

# IDE 配置文件
.idea/
*.iml
.vscode/

2. 储藏 (Stash)

当你正在一个分支上工作,但需要临时切换到另一个分支处理紧急事务,又不想提交当前未完成的工作时,git stash 非常有用。

# 保存当前工作目录和暂存区的更改,并将工作目录恢复到干净状态
git stash
# 或带描述信息
git stash save "My temporary work on feature X"

# 列出所有保存的储藏
git stash list

# 应用最新的储藏 (但不从储藏列表中删除)
git stash apply
# 应用指定的储藏: git stash apply stash@{N}

# 应用最新的储藏并从储藏列表中删除
git stash pop
# 应用指定的储藏并删除: git stash pop stash@{N}

# 删除指定的储藏
git stash drop stash@{N}

# 清空所有储藏
git stash clear

3. 追溯文件修改 (Blame)

查看文件中每一行是谁在哪个提交中最后修改的:

git blame <file_name>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值