引言
在现代软件开发中,版本控制系统是不可或缺的工具,它们帮助我们有效地管理代码历史,并协调团队成员间的合作。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 时,应设置以下信息:
-
用户信息
在所有 Git 提交中,将使用用户名称与邮箱地址。非常重要,因为提交中的这些信息是不可更改的。
lua
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
如果已设置了 --global
选项,则在该系统上的所有操作都会使用这些信息。如果需要在特定项目上使用不同的信息,则在项目目录下运行命令而不带 --global
选项。
-
查看配置信息
使用
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
可重命名文件或移动文件,相当于执行了 mv
、git rm
、git 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 进行版本控制,还能有效地协作,无论是在个人项目还是在庞大的团队中。