Git命令详解与使用指南

Git 是一个分布式版本控制系统,是软件开发中不可或缺的工具。下面我将从基础到高级,详细讲解最常用和最重要的 Git 命令。

核心概念理解

在开始命令之前,先理解四个关键区域,你的文件就存在于这些区域中:

  1. 工作目录 (Working Directory):你正在编辑的本地文件。
  2. 暂存区 (Staging Area / Index):一个中间区域,存放你准备提交的文件变更。
  3. 本地仓库 (Local Repository):存储所有提交历史的地方,位于 .git 目录。
  4. 远程仓库 (Remote Repository):托管在服务器(如 GitHub, GitLab)上的共享仓库。

文件的状态变化流程:工作目录 --(git add)--> 暂存区 --(git commit)--> 本地仓库 --(git push)--> 远程仓库

一、配置与初始化

这些命令通常只需设置一次。

git config --global user.name "Your Name"

设置全局用户名

git config --global user.name "John Doe"

git config --global user.email "email@example.com"

设置全局邮箱

git config --global user.email "john@example.com"

git config --list

查看所有配置

git config --list

git init

将当前目录初始化为一个新的 Git 仓库

git init

git clone <url>

克隆(下载)一个远程仓库到本地

git clone https://github.com/user/repo.git

二、基础工作流命令

这是你最日常使用的命令。

git status

查看工作目录和暂存区的状态

(哪些文件被修改了、哪些已暂存)。这是最常用的命令之一。

git status

git add <file>

将工作目录中的

文件变更添加到暂存区

git add index.html

(添加特定文件)

git add .

添加当前目录下的

所有变更

到暂存区。

git add .

git add -A

添加仓库中的所有变更(包括新文件、修改的文件和删除的文件)。

git add -A

git commit -m "message"

将暂存区的内容提交到本地仓库

,并附上提交信息。

git commit -m "Fix login bug"

git commit -a -m "message"

跳过

git add

步骤,直接提交所有

已跟踪文件

的修改(

不包括新文件

)。

git commit -a -m "Update docs"

git push <remote> <branch>

将本地仓库的提交

推送到远程仓库

git push origin main

git pull <remote> <branch>

从远程仓库拉取更新并合并到当前分支

(=

git fetch

+

git merge

)。

git pull origin main

三、查看与比较历史

git log

查看提交历史。

git log

git log --oneline

以简洁的单行模式查看历史。

git log --oneline

git log --graph --oneline

以图形化方式查看分支合并历史。

git log --graph --oneline

git diff

比较工作目录和暂存区的差异

git diff

git diff --staged

比较暂存区和最后一次提交的差异

git diff --staged

git diff <commit1> <commit2>

比较两次提交之间的差异。

git diff abc123 def456

git show <commit>

显示某次提交的具体内容变更。

git show HEAD

四、分支管理

分支是 Git 的超级功能。

git branch

列出所有本地分支。当前分支前有

*

号。

git branch

git branch -a

列出所有本地和远程分支。

git branch -a

git branch <branch-name>

创建一个新分支

git branch feature-auth

git checkout <branch-name>

切换到指定分支

git checkout feature-auth

git switch <branch-name>

(Git 2.23+)

切换到指定分支

,比

checkout

更语义化。

git switch main

git checkout -b <new-branch>

创建并立即切换到新分支

(经典组合技)。

git checkout -b hotfix

git switch -c <new-branch>

(Git 2.23+)

创建并立即切换到新分支

git switch -c hotfix

git merge <branch-name>

将指定分支合并到当前分支

git switch main

git merge feature-auth

git branch -d <branch-name>

删除一个已合并的分支

(安全删除)。

git branch -d feature-auth

git branch -D <branch-name>

强制删除一个分支

(即使它未合并)。

git branch -D experiment

五、撤销与回退

谨慎使用! 理解后再操作。

git restore <file>

丢弃工作目录中文件的修改

,恢复到最后一次提交的状态。

改乱了文件,想重新开始。

git restore --staged <file>

将文件从暂存区撤出

,但保留工作目录的修改。

git add

了不该add的文件。

git commit --amend

修改最后一次提交

(可以修改信息或加入漏掉的文件)。

提交信息写错了,或漏了文件。

git reset --soft <commit>

回退到某个提交,

保留工作目录和暂存区的内容

将多次提交合并成一次。

git reset --mixed <commit>

(默认)

回退到某个提交,

保留工作目录的修改,但清空暂存区

想撤销提交和

git add

,但保留代码修改。

git reset --hard <commit>

彻底回退到某个提交

,丢弃所有工作目录和暂存区的修改。

非常危险!

想彻底抛弃最近的所有代码。

git revert <commit>

创建一个新的提交来撤销某次提交的更改

。这是

安全

的撤销方式,因为它不重写历史。

要撤销一个已推送到远程仓库的提交。

reset vs revert 重要区别

  • reset移动 HEAD 指针,会改变历史,只适合在本地分支操作。
  • revert新增一个提交不会改变原有历史,适合撤销已公开的提交。

六、远程仓库协作

git remote -v

查看已配置的远程仓库地址。

git remote -v

git remote add <name> <url>

添加一个新的远程仓库。

git remote add upstream https://...

git fetch <remote>

从远程仓库下载所有更新

,但

不自动合并

到当前分支。

git fetch origin

git push -u <remote> <branch>

首次推送分支时,使用

-u

建立追踪,之后可以直接

git push

git push -u origin feature

git push --force

--force-with-lease

强制推送

非常危险!

会覆盖远程历史,仅在绝对必要时使用。

git push --force-with-lease

七、高级实用命令

git stash

将当前工作目录和暂存区的修改临时储藏起来

急需修复bug,但当前代码没写完。

git stash pop

恢复最近储藏的修改并删除储藏记录。

git stash pop

git stash list

查看所有储藏列表。

git stash list

.gitignore

不是一个命令,而是一个文件

。在其中写入文件名或模式,Git 会自动忽略这些文件。

忽略

node_modules/

,

.log

文件等。

总结与最佳实践

  1. 勤提交:提交粒度要小,每次提交只做一件事,写清晰的提交信息。
  2. 多分支:为新功能、修复bug创建独立的分支,保持主分支(如 main)的稳定。
  3. 先拉再推:在 push 之前,先 pull 一下远程的最新代码,避免冲突。
  4. 慎用强制推送:除非你百分之百确定,否则不要使用 git push --force
  5. 善用 .gitignore:一开始就设置好,避免提交无关文件(如日志、依赖包、系统文件)。
全部评论

相关推荐

评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务