目录
git的四大工作区域
git首次配置
克隆远程仓库
提交代码到远程仓库
查看文件状态(可选)
添加文件到暂存区
将暂存区的内容提交到本地仓库
将本地的提交上传到远程仓库
拉取并合并代码
第一种方式
第二种方式
分支管理
查看与创建分支
切换分支
合并分支
删除分支
撤销与修改
修改最后一次提交
版本回退 (本地)
撤销提交
临时储藏(好用)
追溯代码
git blame
git log
git show
git的四大工作区域
在开始介绍git常用操作之前,我们先对git四大工作区域进行介绍,方便后续理解。
1、工作区
是什么:工作区就是我们在电脑上能直接看到的项目文件夹,包含所有源代码、图片等文件,也就是我们直接用编译器进行修改的地方。
文件状态:文件可能处于“已修改”或者“未跟踪”状态。
2、暂存区
是什么:一个位于.git目录中、看不见的特殊文件,它像一个购物车或者待提交清单。
作用:我们如果在工作区做了很多修改,但是我们只想提交其中两个,这时,把这两个文件的快照添加(git add)到暂存区,暂存区能够让我们精确的控制下一次提交要包含哪些内容。
3、本地仓库
是什么: 位于 .git 目录中的另一个部分,它保存了项目所有版本(提交)的完整历史记录。可以把它想象成一个个人电脑上的“版本档案馆”。
作用: 当我们执行 git commit 时,Git 会把 暂存区 里的所有内容,打包成一个永久性的版本快照(一个 commit 对象),并存入本地仓库。这个过程完全在本地电脑上完成,不需要联网。
4、远程仓库
是什么: 托管在网络服务器上的项目仓库(例如 Gitee、GitHub)。
作用: 这是团队成员之间共享代码、同步进度的“中央服务器”。我们可以把本地仓库的提交“推送 (push)”到远程仓库,也可以从远程仓库“拉取 (pull)”别人的提交。
git首次配置
在我们提交前,需要先署名,这个签名会嵌入后续的每一次提交中,方便后期代码追溯。
# 设置你的用户名 (这个名字会显示在提交历史里)
git config --global user.name "名字或昵称"# 设置你的邮箱 (最好和 Gitee/GitHub 账号邮箱一致)
git config --global user.email "your.email@example.com"#查看当前 Git 的所有配置信息
git config --list
这个操作只要在刚开始执行一次就好了,效果如下:
克隆远程仓库
在一开始,我们通常需要从远程服务器完整地复制一个项目代码文件以及所有历史到本地电脑上。
命令如下:
git clone <url>
示例:
git clone https://github.com/example/project.git
这个url,我们去git项目目录下获取即可,如下:
提交代码到远程仓库
查看文件状态(可选)
查看状态,以此可以看到当前每个文件处于哪个区域
git status
添加文件到暂存区
将工作区地修改“快照”并添加到待提交清单中
# 添加一个指定文件
git add main.cpp# 添加一个指定目录
git add src/# 添加所有当前目录下的已修改或新创建的文件
git add .
将暂存区的内容提交到本地仓库
将暂存区的所有内容生成一个永久性的快照,并保存到本地仓库的版本历史中。
# 提交并打开默认编辑器来填写提交信息
git commit# 提交并直接在命令行中附带提交信息 (最常用)
git commit -m "修复了用户登录的bug"# 将 add 和 commit 合并为一步 (仅对已跟踪过的文件有效)
git commit -am "更新了文档说明"
将本地的提交上传到远程仓库
将本地仓库的修改上传到远程仓库。
# 将本地的 main 分支推送到名为 origin 的远程仓库
git push origin main
但是在多人协作的时候,可能会存在其他人对远程仓库进行了新的提交,那么此时,我们本地仓库代码就和远程仓库代码产生了冲突,此时就需要拉取最新的代码到本地,进行合并后在提交到远程仓库。
如果合并过程中,两个分支修改了同一个文件的同一行,就会产生 合并冲突。Git 会在文件里标记出冲突,需要你手动编辑文件,解决冲突后,再 add 和 commit 来完成合并。
拉取并合并代码
第一种方式
1、获取远程仓库最新信息
# 从名为 origin 的远程仓库获取所有更新
git fetch origin
从远程仓库下载最新的历史记录和信息(比如新的提交、新的分支),并更新你本地的远程跟踪分支,不会修改本地工作区里的任何文件。
2、检查更新内容
看看新获取的更新,修改了什么
# 比较你本地的 main 和刚刚更新的远程 main 有什么不同
git log main..origin/main# 或者,如果你想看具体的文件差异
git diff main origin/main
3、合并代码
# 确保你当前在自己的 main 分支上
git switch main# 将远程 main 分支的修改,合并到你本地的 main 分支
git merge origin/main
第二种方式
拉取并合并 从远程仓库获取最新版本,并自动与你的本地分支合并。它相当于 git fetch + git merge 。
# 拉取远程仓库名为origin的 main 分支,并与本地当前分支合并
git pull origin main
分支管理
分支是 Git 的精髓,它允许我们创建一条独立的开发线,去开发新功能或修复bug,而不会弄乱主线。
查看与创建分支
# 列出所有本地分支,并高亮当前分支
git branch# 创建一个名为 feature/new-login 的新分支
git branch feature/new-login
切换分支
git checkout <branch> 或 git switch <branch>,切换分支,工作区文件会瞬间变成那个分支所指向的状态
# 切换到已存在的分支
git switch feature/new-login# 创建并立即切换到新分支 (复合命令,非常常用)
git switch -c hotfix/bug-123
合并分支
将一个分支的修改,合并到当前所在的分支。
# 1. 首先,切换到接受合并的目标分支 (如主分支)
git switch main# 2. 然后,执行合并,将 feature 分支合入
git merge feature/new-login
删除分支
# 删除一个已经合并过的本地分支
git branch -d hotfix/bug-123
撤销与修改
修改最后一次提交
git commit --amend修改最后一次提交 如果提交后发现有小错误(比如注释写错了),可以用它来修正。
git commit --amend "bug修改"
git commit --amend --no-edit # --no-edit 表示不修改上次的提交信息
版本回退 (本地)
移动分支指针,回到过去某个版本。 警告:如果提交已推送到远程,请不要使用,因为它会重写历史,给团队带来麻烦。
常用选项
- - --soft : 仅移动 HEAD 指针,你的工作区和暂存区不变。
- - --mixed (默认): 移动 HEAD,并重置暂存区,但工作区不变。
- - --hard : (极度危险) 移动 HEAD,并 彻底重置 暂存区和 工作区 ,所有未提交的修改都会 永久丢失 。
# 彻底回退到上一个版本,工作区和暂存区都恢复 (危险!)
git reset --hard HEAD~1
撤销提交
创建一个新的提交 ,其内容刚好是指定提交的 反向操作 。这是推荐的撤销方式 ,因为它不重写历史,适合用于撤销已经推送到远程的提交。
git revert <commit_hash_of_bad_commit>
临时储藏(好用)
当你手头工作没做完,但需要紧急切换到别的分支时,用它来保存当前工作区和暂存区的修改。
# 保存当前修改
git stash save "temp message"# 处理完别的事情后,回来恢复
git stash pop#查看所有暂存的更改
git stash list#应用最近一次暂存的更改
git stash apply#删除指定的暂存记录
git stash drop
追溯代码
-
想知道某一行代码是谁写的? 用 git blame 。
-
想知道某个文件/项目的演变过程? 用 git log 。
-
想看某次提交到底干了什么? 先用 git log 找到它,再用 git show 查看它。
git blame
如果想知道某一行代码是谁、在哪个版本、什么时候修改的,可以使用git blame,他会按行显示文件的每一行最后是被哪个提交修改的。
# 查看指定文件的每一行代码的“身世”
git blame [文件路径]
git log
git log 是一个功能极其丰富的历史浏览器,可以让我们查看一个分支、一个文件甚至一个函数的完整演变历史。
常用选项:
- git log --oneline : 单行显示,更紧凑。
- git log --graph : 以图形方式展示分支的合并与分叉。
- git log -p <文件名> : 显示指定文件的历史,并附带每次提交的具体代码差异。
- git log --author="作者名" : 只看某个特定成员的提交。
a)查看整个项目的历史
# 查看所有提交记录
git log# 查看简化的单行历史,并带上分支图
git log --oneline --graph --decorate
b)查看单个文件的所有修改记录
git log [文件路径]
c)查看单个文件内容的具体的变化记录
如果我们不仅想看提交记录,还想看每次提交具体改了什么代码 ,可以加上 -p 参数
git log -p [文件路径]
这会把每一次涉及该文件的修改,用 diff 的格式全部展示出来。
git show
当我们通过 git log 或 git blame 找到了一个可疑的提交哈希码(比如 c4d2a8f ),可以用 git show 来查看这次提交的所有细节,比如(作者、日期、提交信息)和它所做的所有代码改动。
git show [提交哈希码]