Git 必备技能基础篇

引言

在现代软件开发中,版本控制系统是不可或缺的工具,它们帮助我们有效地管理代码历史,并协调团队成员间的合作。Git,作为一个强大的版本控制系统,可以帮助我们实现这些目的,但对于初学者来说,Git 的复杂性有时会令人望而却步。在这篇指南中,我将带你了解如何进行 Git 的初步设置,创建和管理你的仓库,记录更新,撤销操作,以及如何与远程仓库协作。正如我当初踏入编程世界时的困惑一样,我希望这篇文章能够为你初次使用 Git 时提供清晰的路径,让你快速上手并感受到 Git 的强大功能。

git 初始准备

Git 配置

Git 自带一个 git config 的工具来设置控制 Git 的外观和行为的配置。这些配置变量存储在三个不同的位置:

  • 全局配置 (/etc/gitconfig 文件): 包含系统上每个用户及他们仓库的通用配置。当使用 git config 带有 --system 选项时,它会读写此文件。
  • 用户配置 (~/.gitconfig~/.config/git/config 文件): 只针对当前用户。可以传递 --global 选项让 Git 读写此文件。
  • 仓库配置 :当前仓库的 Git 目录中的 config 文件(即 .git/config),这是针对该仓库的配置。
首次设置

初次使用 Git 时,应设置以下信息:

  1. 用户信息

    在所有 Git 提交中,将使用用户名称与邮箱地址。非常重要,因为提交中的这些信息是不可更改的。

lua 复制代码
   git config --global user.name "John Doe"
   git config --global user.email johndoe@example.com

如果已设置了 --global 选项,则在该系统上的所有操作都会使用这些信息。如果需要在特定项目上使用不同的信息,则在项目目录下运行命令而不带 --global 选项。

  1. 查看配置信息

    使用 git config --list 查看所有配置,可能会发现重复的变量名,因为 Git 可以从不同文件读取相同配置。在这种情况下,Git 会采用找到的最后一个配置。

    通过 git config <key> 可查看特定键的值。

获取仓库

获取 Git 项目仓库的方法有两种:一是本地创建 Git 仓库或将现有文件导入;二是从服务器克隆现有 Git 仓库。

本地创建仓库

对于新项目,首先要初始化仓库,进入项目目录,使用 git init 命令。这会创建 .git 子目录,含有初始化的 Git 仓库的所有必要文件。

如果已有文件,使用 git add 命令跟踪指定文件,并使用 git commit 提交。

克隆远程仓库

使用 git clone [url] 克隆远程仓库。默认情况下,会拉取远程仓库中每个文件的所有版本。Git 支持 https://git:// 协议或 SSH 传输协议。

记录每次更新

仓库内文件有两种状态:已追踪和未追踪。工作目录中除已跟踪文件外的其他文件都是未追踪的,它们既不在上次快照中,也未在暂存区。

查看文件状态

git status 会显示当前仓库中 未被追踪的文件(空文件夹不会显示), 已追踪的文件(add 但是未 commit,暂存状态)。

只要在 Changes to be committed 这行下面的,就说明是已暂存状态。 如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中。 你可能会想起之前我们使用 git init 后就运行了 git add (files) 命令,开始跟踪当前目录下的文件。

git add 命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件。

Changes not staged for commit ,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。 要暂存这次更新,需要运行 git add 命令。

git status -s/--short 输出标记:

  • ?? : 新添加的未跟踪文件
  • A : 新添加到暂存区中的文件
  • M : 修改过的文件
  • MM : 左边的 M 表示文件已修改,右边的 M 表示未暂存
  • AM : 类似 MM , 左边表示新增未跟踪文件, M 表示修改但是未暂存。即 add 之后 有修改但是未再次 add。

查看已暂存和未暂存的修改

git diff 查看未暂存的更改,git diff --staged 查看已暂存的更改。

提交暂存内容

git commit 提交暂存内容,使用 -m 选项可直接添加提交信息。

使用 -a 选项会自动暂存所有已跟踪的文件并提交。

删除文件

如果要删除 git 中某个文件,使用 git rm 暂存区的文件, 改命令还会删除 本地的文件。

如果要保留本地文件,但是要删除 git 中的该文件使用 git rm --cached , 之后使用 git status 你可以看见本地文件处于未跟踪状态而仓库中该文件已经删除。

移动文件

git mv 可重命名文件或移动文件,相当于执行了 mvgit rmgit add

查看提交历史

git log 会按时间列出所有更新,-p -n 可显示最近 n 次提交的差异。

撤销操作

撤销提交

git commit --amend 重新对上一次提交进行提交, 如果上一次提交后没有修改则直接修改 commit 信息,如果上一次后有修改的内容需要先暂存,改命令会提交暂存内容并修改commit 信息。

如果你 add * 暂存了错误的文件并且已经 commit 了, 可以使用 git rm + git commit --amend 来删除 git 中的错误文件,因为 rm 删除了暂存区的文件,amend 重新提交会提交暂存区的内容,所以就会覆盖上次 commit。

撤销暂存的文件

git reset HEAD <file> 可撤销暂存的文件。

撤销文件修改

git checkout -- <file> 撤销文件修改,但无法恢复之前的修改。

远程仓库

添加远程仓库

git remote add <remote-name> <url> 添加新的远程仓库。仓库可能会有多个,一般第一次新增的为origin。添加了远程仓库可以拉取数据。

拉取数据

git fetch [remote-name] 从远程仓库拉取数据,获取所有分支的最新更新。

推送到远程仓库

git push [remote-name] [branch-name] 推送到远程仓库,需有写入权限且之前无其他推送。

查看远程仓库

git remote show [remote-name] 查看远程仓库信息。

删除或重命名远程仓库

git remote rename <old_name> <new_name> 重命名。
git remote rm [remote-name] 删除远程仓库。

标签管理

创建标签

轻量标签是简单的,指向特定提交。附注标签包含更多信息。

git tag <tag-name> 创建轻量标签。
git tag -a <tag-name> -m <message> 创建带有说明的附注标签。

推送标签

通过 git push origin <tagname> 显式推送标签到远程仓库。

删除标签

git tag -d <tag-name> 删除标签。

一般情况下,我们不应该直接检出标签,git checkout tag-name 检出标签之后,如果进行了一些修改并且提交,标签不会发生变化,但你的新提交将不属于任何分支,并且将无法访问,除非确切的提交哈希。 因此,如果你需要进行更改通常需要创建一个新分支git checkout tag-name -b .

设置命令别名

git config --global alias.co checkout 设置 checkout 别名为 co , git co 效果与 git checkout 一样。 对于一些常用的命令,我们可以进行简写,对于一些命令可以进行语义化的书写,如:

  • 取消暂存文件 git config --global alias.unstage 'reset HEAD --'

如果要执行外部命令,而不是一个 Git 子命令。 如果是那样的话,可以在命令前面加入 ! 符号。 如果你自己要写一些与 Git 仓库协作的工具的话,那会很有用。

总结

通过本文的介绍,我们了解了 Git 初始配置的基础,涵盖了用户信息的设置、不同级别的配置文件、本地和远程仓库的创建与克隆、文件状态的查看、更改的提交、记录的撤销以及标签的管理。我们也探索了如何优化我们的工作流程,通过设置命令别名来简化命令输入。Git 的学习曲线可能会令人生畏,但一旦你开始使用并逐渐深入了解,你会发现它是一个极其有力的工具,能够支持你的开发工作并提升你的工作效率。记住,实践是学习 Git 的最佳方式。因此,不要害怕去试错,因为每个错误都是通向精通的一步。随着时间的推移,你将不仅能够熟练地使用 Git 进行版本控制,还能有效地协作,无论是在个人项目还是在庞大的团队中。

相关推荐
崔庆才丨静觅16 分钟前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60611 小时前
完成前端时间处理的另一块版图
前端·github·web components
KYGALYX1 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了1 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅1 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅2 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
爬山算法2 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
李少兄2 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
崔庆才丨静觅2 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment2 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端