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 进行版本控制,还能有效地协作,无论是在个人项目还是在庞大的团队中。

相关推荐
Fan_web10 分钟前
jQuery——事件委托
开发语言·前端·javascript·css·jquery
安冬的码畜日常11 分钟前
【CSS in Depth 2 精译_044】第七章 响应式设计概述
前端·css·css3·html5·响应式设计·响应式
莹雨潇潇1 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
Jiaberrr1 小时前
Element UI教程:如何将Radio单选框的圆框改为方框
前端·javascript·vue.js·ui·elementui
杨哥带你写代码1 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端
AskHarries2 小时前
读《show your work》的一点感悟
后端
Tiffany_Ho2 小时前
【TypeScript】知识点梳理(三)
前端·typescript
A尘埃2 小时前
SpringBoot的数据访问
java·spring boot·后端
yang-23072 小时前
端口冲突的解决方案以及SpringBoot自动检测可用端口demo
java·spring boot·后端
Marst Code2 小时前
(Django)初步使用
后端·python·django