一文带你吃透Git常用命令与使用场景
yuyutoo 2025-01-27 01:06 1 浏览 0 评论
一、Git 初印象
在软件开发的广袤天地里,Git 堪称一款极为重要的工具,它是分布式版本控制系统的杰出代表。简单来说,Git 能够精准记录你对代码所做的每一次更改,让你随时回溯到过往任意一个版本,就如同拥有一台时光机,穿梭于代码的历史长河之中。
想象一下,你正精心创作一部小说,在创作过程中,不断地修改情节、调整语句。倘若没有一个有效的记录方式,当你突然想要回到之前某个满意的章节,重新审视或者继续拓展时,将会无比棘手。Git 之于代码,就如同精心的版本记录之于小说创作,它为开发者提供了强大的代码管理能力。
在多人协作开发的场景中,Git 的重要性更是不言而喻。就好比一场大型的交响乐演出,每个乐手都各司其职,演奏着不同的旋律。Git 能够确保每个开发者的代码改动都能有条不紊地融合在一起,避免冲突的发生,或者在冲突出现时,提供有效的解决办法,让整个开发团队如同默契十足的乐团,共同奏响和谐的代码乐章。
如今,几乎在所有的软件开发项目中,Git 都扮演着不可或缺的角色。无论是小型的个人项目,还是大型的企业级项目,都离不开 Git 的助力。如果你渴望成为一名优秀的开发者,那么掌握 Git 这门技能,无疑是你踏上成功之路的关键一步。接下来,就让我们一同深入探索 Git 的常用命令及其丰富多样的使用场景 。
二、安装与配置
2.1 安装 Git
Git 的安装步骤会因操作系统的不同而略有差异,下面为大家详细介绍在 Windows、Mac OS 和 Linux 系统中安装 Git 的方法。
- Windows 系统:首先,访问 Git 官方网站(https://git-scm.com/downloads ),在官网页面中,系统会自动识别您使用的是 Windows 系统,并提供对应的下载链接,点击下载名为 “Git-xx.xx.xx-64-bit.exe”(xx.xx.xx 为版本号)的安装程序。下载完成后,双击该安装程序,进入安装向导界面。在安装过程中,大部分选项保持默认设置即可,您只需按照向导提示,依次点击 “Next” 按钮。例如,在选择安装路径时,如果您没有特殊需求,可使用默认路径;在选择组件时,默认勾选的组件通常能满足大多数用户的需求。安装完成后,在任意文件夹中点击鼠标右键,若菜单中出现 “Git Bash Here” 和 “Git GUI Here” 选项,这就表明 Git 已经成功安装在您的 Windows 系统中 。
- Mac OS 系统:Mac 系统安装 Git 也较为简便。同样前往 Git 官方网站,网站会自动匹配 Mac 系统的下载链接,点击下载后缀为 “.dmg” 的文件。下载完毕后,双击该文件,将弹出一个包含 Git 安装包的窗口,再将 Git 安装包拖动到 “Applications” 文件夹中,即可完成安装。安装完成后,打开 “终端” 应用程序,输入 “git --version” 命令,如果显示出 Git 的版本号,那就说明 Git 已经成功安装在您的 Mac 系统上了 。
- Linux 系统:Linux 系统由于其开源特性,许多发行版都默认预装了 Git。您可以打开终端,输入 “git --version” 命令来检查系统是否已经安装了 Git。如果系统提示 “command not found”,则表示尚未安装。以 Ubuntu 系统为例,在终端中输入 “sudo apt update” 命令,更新软件包列表,然后再输入 “sudo apt install git” 命令,系统将自动下载并安装 Git。对于 CentOS 系统,在终端中输入 “sudo yum install git” 命令,按照提示进行操作,即可完成 Git 的安装 。安装完成后,同样通过输入 “git --version” 命令来验证安装是否成功。
2.2 配置用户信息
在成功安装 Git 之后,紧接着需要配置您的用户名和邮箱信息。这一步至关重要,因为在进行代码提交时,这些信息将被记录在每一次的提交记录中,用于明确代码的提交者身份,方便团队成员之间追溯代码的修改历史和责任人。
配置用户名和邮箱的方法非常简单,您只需在 Git Bash(Windows 系统)或终端(Mac OS 和 Linux 系统)中输入相应的命令即可。
配置全局用户名,在终端中输入:
git config --global user.name "你的用户名"
将 “你的用户名” 替换为您实际想要使用的用户名,例如 “JohnDoe” 。
配置全局邮箱,在终端中输入:
git config --global user.email "你的邮箱地址"
将 “你的邮箱地址” 替换为您常用的邮箱,例如 “john.doe@example.com” 。
通过使用 “--global” 参数,这两个配置将应用到您系统中的所有 Git 仓库。这样,无论您在哪个项目中进行代码提交,提交记录中都会准确显示您配置的用户名和邮箱信息 。
倘若您希望针对特定的仓库设置不同的用户名和邮箱,可以在该仓库的根目录下打开终端,输入不带 “--global” 参数的命令,例如:
git config user.name "特定仓库用户名"
git config user.email "特定仓库邮箱地址"
这些配置信息仅对当前所在的仓库生效,不会影响其他仓库的配置 。
完成配置后,您可以通过以下命令来查看配置是否生效:
git config --global user.name
git config --global user.email
如果需要修改已配置的用户名或邮箱,只需再次执行相应的配置命令,新的配置信息将覆盖旧的信息 。
三、常用命令及场景
3.1 初始化仓库
当你开启一个全新的项目,首要任务便是在项目目录中初始化一个 Git 仓库。这就如同为你的项目打造一个专属的 “代码保险箱”,用于精心保管代码的所有历史版本。
执行git init命令,即可轻松创建一个新的 Git 仓库。该命令会在当前目录下默默生成一个名为.git的隐藏文件夹,这个神秘的文件夹宛如仓库的 “核心大脑”,存储着版本控制所需的全部元数据和对象 。
假设你正在着手一个名为 “my - project” 的项目,首先通过命令行进入该项目的目录:
mkdir my - project
cd my - project
接着,执行git init命令,初始化 Git 仓库:
git init
执行完毕后,你可以使用ls -a命令查看,便会发现多了一个名为.git的隐藏文件夹 。此时,你的项目已经成功配备了一个基本的 Git 仓库,随时准备记录你的代码变更 。
3.2 克隆远程仓库
倘若你期望获取远程服务器上已有的项目代码,git clone命令便是你的得力助手。这个命令能够将远程仓库的完整代码及其丰富的历史记录一股脑地复制到本地,让你能够在本地环境中随心所欲地进行开发和研究。
git clone的使用方法相当简单,只需在命令后紧跟远程仓库的 URL 即可。例如,若要克隆 GitHub 上的一个名为 “example - repo” 的仓库,其 URL 为 “https://github.com/username/example - repo.git”,那么执行以下命令:
git clone https://github.com/username/example - repo.git
Git 会迅速开始工作,将远程仓库的所有文件和目录精准无误地下载到本地,并自动建立与远程仓库的连接,方便后续的同步和更新操作 。
3.3 文件操作
在日常的开发进程中,你会频繁对文件进行各式各样的操作,诸如添加、修改、删除和移动文件等。在 Git 的世界里,有一系列专门的命令来高效管理这些操作。
- 添加文件到暂存区:当你在本地工作区对文件进行了修改,若希望将这些修改纳入本次提交的范围,就需要使用git add命令,将文件添加到暂存区。暂存区恰似一个临时的 “待提交文件中转站”,用于存放即将被提交到本地仓库的文件修改 。
例如,你修改了一个名为 “main.c” 的文件,想要将其添加到暂存区,可以执行:
git add main.c
倘若你一次性修改了多个文件,或者希望将当前目录下的所有修改文件都添加到暂存区,可使用以下命令:
git add.
这里的 “.” 代表当前目录下的所有文件 。
- 提交暂存区的更改:在将需要提交的文件成功添加到暂存区后,下一步便是使用git commit命令,将暂存区的更改正式提交到本地仓库。每次提交都应当附上清晰、准确的提交信息,以简要描述本次提交所做的更改,这对于后续追溯代码的修改历史至关重要 。
执行提交命令的格式如下:
git commit -m "提交信息"
其中,“提交信息” 需替换为你对本次提交内容的具体描述,例如 “修复了登录功能的一个漏洞”“添加了用户注册模块的代码” 等 。这样,当其他团队成员或未来的你查看提交历史时,便能迅速了解本次提交的核心内容 。
- 删除文件:若你不再需要某个文件,并打算从项目中彻底移除它,同时将这个删除操作记录到 Git 的版本历史中,可以使用git rm命令 。
假设要删除名为 “old_file.txt” 的文件,执行以下命令:
git rm old_file.txt
执行该命令后,文件不仅会从工作区中被删除,同时这个删除操作也会被记录到暂存区,等待你使用git commit命令将其提交到本地仓库 。
倘若你只是希望停止跟踪某个文件,但并不想将其从工作区中删除,可以使用git rm --cached命令 。例如,对于一个已经被 Git 跟踪的文件 “temp_file.txt”,若你不想再让 Git 跟踪它,但仍想保留在工作区中,可执行:
git rm --cached temp_file.txt
- 移动或重命名文件:在项目开发过程中,有时需要对文件进行移动或重命名操作。在 Git 中,使用git mv命令能够便捷地完成这一任务,并且该命令会自动将文件的移动或重命名操作记录到暂存区 。
例如,将文件 “src_file.txt” 重命名为 “dst_file.txt”,执行以下命令:
git mv src_file.txt dst_file.txt
这一操作等同于先在操作系统中手动重命名文件,然后使用git add命令将重命名后的文件添加到暂存区 。随后,通过git commit命令提交更改,即可将文件的重命名操作永久记录到 Git 仓库中 。
3.4 分支管理
分支管理是 Git 最为强大且重要的功能之一,它允许你在不影响主代码的前提下,并行开展多个开发任务,如开发新功能、修复漏洞等。通过合理运用分支,团队成员之间能够高效协作,避免相互干扰,极大地提升开发效率 。
- 创建分支:使用git branch命令可以创建新的分支。例如,当你要为一个新功能的开发创建一个分支,命名为 “feature - new - functionality”,执行以下命令:
git branch feature - new - functionality
此时,你仍处于当前所在的分支(通常为master分支或其他默认分支),新创建的分支与当前分支在创建时的代码状态完全相同 。
- 切换分支:创建分支后,若要切换到刚创建的分支进行开发工作,需使用git checkout命令 。例如,切换到名为 “feature - new - functionality” 的分支,执行:
git checkout feature - new - functionality
执行该命令后,你的工作目录会立即切换到该分支的代码状态,你所做的任何修改都将只影响这个分支,而不会对其他分支产生干扰 。
为了更加便捷地创建并同时切换到新分支,还可以使用git checkout -b命令。例如,一步到位创建并切换到名为 “bug - fix - branch” 的分支,执行:
git checkout -b bug - fix - branch
- 合并分支:当你在某个分支上完成了开发任务,如新功能开发完毕或漏洞修复完成,通常需要将该分支合并到主分支(如master分支)或其他目标分支上 。使用git merge命令即可实现分支的合并 。
假设你在 “feature - new - functionality” 分支上完成了新功能的开发,现在要将其合并到master分支。首先,切换到master分支:
git checkout master
然后,执行合并命令:
git merge feature - new - functionality
Git 会自动将 “feature - new - functionality” 分支的更改融入到master分支中。倘若在合并过程中出现冲突(即两个分支对同一部分代码进行了不同的修改),Git 会提示你手动解决冲突,确保合并的顺利进行 。
3.5 查看状态与日志
在开发过程中,随时了解当前项目的状态以及代码的历史变更情况是非常重要的。Git 提供了git status和git log命令,帮助你轻松获取这些关键信息 。
- 查看仓库状态:git status命令用于查看当前 Git 仓库的状态,包括哪些文件被修改、哪些文件已被添加到暂存区、哪些文件尚未被跟踪等。执行该命令后,你会得到一个清晰的状态报告,让你对项目的当前情况一目了然 。
在项目目录下执行git status,输出结果可能类似如下:
On branch master
Your branch is up - to - date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: main.c
Untracked files:
(use "git add <file>..." to include in what will be committed)
new_file.txt
no changes added to commit (use "git add" and/or "git commit -a")
上述输出表明,当前位于master分支,该分支与远程的origin/master分支保持同步。在工作区中,main.c文件被修改但尚未添加到暂存区,同时存在一个未被 Git 跟踪的新文件 “new_file.txt” 。
- 查看提交日志:git log命令用于查看项目的提交历史记录,包括每次提交的作者、提交时间、提交信息以及提交的具体内容(通过-p选项可以查看详细的代码更改)。通过查看提交日志,你可以清晰地追溯代码的演变过程,了解每个版本的变更情况 。
执行git log命令,输出结果可能如下:
commit 654321abcdef
Author: John Doe <john.doe@example.com>
Date: Mon Aug 1 10:00:00 2023 +0800
Added new feature to the application
commit 123456abcdef
Author: Jane Smith <jane.smith@example.com>
Date: Sun Jul 31 15:30:00 2023 +0800
Fixed a bug in the login functionality
上述输出展示了两次提交记录,包括提交的哈希值、作者、日期以及提交信息 。你可以通过这些信息快速了解项目的开发历程和每个阶段的主要工作 。
为了更简洁地查看提交日志,还可以使用git log --pretty=oneline命令,该命令会将每条提交记录以一行的形式展示,方便快速浏览 。
3.6 远程协作
在多人协作开发项目中,与远程仓库进行高效的交互至关重要。Git 提供了一系列命令,如git push、git pull和git fetch,让你能够轻松地与远程仓库同步代码,分享自己的工作成果,并获取其他团队成员的最新更改 。
- 推送本地更改到远程仓库:当你在本地完成了一系列的开发工作,并将更改提交到本地仓库后,若希望将这些更改同步到远程仓库,以便其他团队成员能够获取和使用,就需要使用git push命令 。
假设你要将本地master分支的更改推送到远程仓库的master分支(通常远程仓库的默认别名是 “origin”),执行以下命令:
git push origin master
执行该命令后,Git 会将本地master分支上的所有新提交发送到远程仓库的master分支。如果远程仓库的master分支与你的本地分支存在差异(例如其他团队成员已经推送了新的更改),可能会提示你先进行git pull操作,以避免冲突 。
- 从远程仓库拉取最新更改:在开发过程中,为了确保你的本地代码始终与远程仓库保持同步,需要定期从远程仓库拉取其他团队成员推送的最新更改。使用git pull命令可以实现这一目的,它会自动从远程仓库获取最新的代码,并将其合并到你的本地分支中 。
例如,要从远程仓库的master分支拉取最新更改到本地的master分支,执行:
git pull origin master
git pull命令实际上相当于先执行git fetch命令从远程仓库获取最新的代码,然后再执行git merge命令将获取到的代码合并到本地分支 。
- 获取远程仓库的最新代码:git fetch命令用于从远程仓库获取最新的代码,但不会自动将其合并到本地分支。这意味着你可以在获取远程代码后,先查看差异,再决定是否进行合并操作,从而更好地控制代码的集成过程 。
例如,执行git fetch origin命令,会从远程仓库 “origin” 获取所有分支的最新更改,但这些更改不会立即应用到你的本地分支 。你可以通过git log -p origin/master..master命令查看远程master分支与本地master分支的差异,然后再决定是否使用git merge origin/master命令进行合并 。
四、实战演练
为了让大家更加清晰地理解 Git 命令的实际运用,我们来模拟一个简单的项目开发流程。假设我们正在开发一个名为 “my - awesome - project” 的 Web 应用程序。
首先,在本地创建一个新目录,并初始化 Git 仓库:
mkdir my - awesome - project
cd my - awesome - project
git init
接着,创建一个简单的 HTML 文件 “index.html”,并添加一些初始内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial - scale = 1.0">
<title>My Awesome Project</title>
</head>
<body>
<h1>Welcome to My Awesome Project!</h1>
</body>
</html>
将 “index.html” 文件添加到暂存区并提交:
git add index.html
git commit -m "Initial commit: added index.html"
此时,我们发现需要添加一个新功能,即在页面中显示当前日期。为了不影响主分支的稳定性,我们创建一个新的功能分支 “feature - add - date”:
git checkout -b feature - add - date
在 “index.html” 文件中添加显示日期的 JavaScript 代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial - scale = 1.0">
<title>My Awesome Project</title>
</head>
<body>
<h1>Welcome to My Awesome Project!</h1>
<p id="date - display"></p>
<script>
const dateDisplay = document.getElementById('date - display');
const currentDate = new Date();
dateDisplay.textContent = 'Today is'+ currentDate.toDateString();
</script>
</body>
</html>
将修改后的文件添加到暂存区并提交:
git add index.html
git commit -m "Added code to display current date"
在功能分支上完成开发后,切换回主分支,并将功能分支合并到主分支:
git checkout master
git merge feature - add - date
假设在合并过程中,主分支也有了一些其他的修改,导致出现了冲突。我们需要手动解决冲突。打开 “index.html” 文件,Git 会用特殊的标记指示冲突的部分:
<<<<<<< HEAD
<h1>Welcome to My Awesome Project!</h1>
=======
<h1>Welcome to the New and Improved My Awesome Project!</h1>
>>>>>>> feature - add - date
我们根据实际情况决定保留哪部分内容,或者进行适当的调整。例如,我们可以将标题修改为:
<h1>Welcome to the New and Improved My Awesome Project! - Today is <span id="date - display"></span></h1>
解决冲突后,将文件重新添加到暂存区并提交:
git add index.html
git commit -m "Resolved merge conflict and merged feature - add - date branch"
最后,假设我们的项目已经部署到了远程服务器,我们需要将本地的最新更改推送到远程仓库:
git remote add origin https://github.com/your - username/my - awesome - project.git
git push -u origin master
通过这个实战演练,我们可以看到在一个完整的项目开发过程中,如何灵活运用 Git 的各种命令来管理代码版本、进行分支开发以及解决合并冲突等问题 。
五、总结与拓展
通过本文的详细阐述,我们对 Git 这款强大的分布式版本控制系统有了较为全面的认识,深入了解了诸多常用 Git 命令及其丰富的使用场景。从最初的安装配置,到初始化仓库、克隆远程仓库,再到对文件的增删改查、分支管理、查看状态与日志,以及远程协作等各个环节,Git 都提供了相应的高效命令,为我们的软件开发工作提供了坚实的保障 。
在实际项目开发中,灵活运用这些 Git 命令,能够极大地提升我们的工作效率,有效减少代码管理的复杂性,让团队协作更加顺畅。然而,Git 的功能远不止于此,它还拥有许多高级特性和用法等待着我们去深入探索 。
为了进一步提升 Git 技能,大家可以通过阅读官方文档,深入学习 Git 的底层原理和高级功能,如变基操作、标签管理等;还可以利用一些在线学习资源,如 Interactive Guide to Git Branching,通过有趣的互动练习,加深对 Git 命令的理解和运用能力;同时,积极参与开源项目也是一个绝佳的学习途径,在实际的协作开发中,积累经验,学习他人优秀的代码管理方式 。
希望大家在今后的开发旅程中,能够熟练驾驭 Git 这一强大工具,为项目的成功贡献自己的力量。如果你在学习和使用 Git 的过程中有任何心得体会或疑问,欢迎在评论区留言分享,让我们一起共同进步 。
相关推荐
- java高级用法之:绑定CPU的线程Thread-Affinity
-
简介在现代计算机系统中,可以有多个CPU,每个CPU又可以有多核。为了充分利用现代CPU的功能,JAVA中引入了多线程,不同的线程可以同时在不同CPU或者不同CPU核中运行。但是对于JAVA程序猿来说...
- 迁移至最新版?Oracle结束Java7生命周期
-
据国外报道,Oracle于2015年4月停止发布Java7安全补丁和升级包,促使用户迁移至Java8或购买Java7的长期商业支持服务。未来或可能有其它第三方机构为其提供公共更新。(图片来源ho...
- 配置Java环境变量:(WIN7为例)(配置java 环境变量)
-
1.JAVA_HOME变量的设置2.Path变量的设置3.ClassPath变量的设置...
- Java中的CPU占用高和内存占用高的问题排查
-
作者|归去来兮辞...
- Java 8:一文掌握 Lambda 表达式 | CSDN 博文精选
-
作者|Android大强哥责编|郭芮出品|CSDN博客本文将介绍Java8新增的Lambda表达式,包括Lambda表达式的常见用法以及方法引用的用法,并对Lambda...
- Mongodb centos7安装(mongodb4.4安装)
-
下载官方下载地址:MongoDBCommunityDownloads下载并解压...
- Java常用的7大排序算法汇总(java排序总结)
-
这段时间闲了下来,就抽了点时间总结了下java中常用的七大排序算法,希望以后可以回顾!1.插入排序算法插入排序的基本思想是在遍历数组的过程中,假设在序号i之前的元素即[0..i-1]都已经排好...
- Linux新手入门系列:Linux下jdk安装配置
-
本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。...
- PowerDesigner在64位JDK填坑记.md
-
系统环境利用powerdesigner反向生成表结构时报:**connectiontestfailed**胖先生使用的JDBC方式连接,无法连接到MySQL,前段时间我选择了逃避操作系统:...
- 2015年新春win7系统64位装机驱动加强版下载
-
软件格式:NTFS软件语言:简体中文软件大小:4.21G适用环境:适合于台式电脑-笔记本电脑!MD5校检:5349DAA96D86FF9AE06BC4D6C0438C5F系统特色:釆用最齐全的驱动,优...
- win7旗舰版64位系统还原网络设置方法
-
有一位深度技术...
- 我们必须要了解的Java位运算(不仅限于Java)
-
我们必须要了解的Java位运算(不仅限于Java)-陈咬金-博客园...
- 二进制数值数据的运算方法(二进制的数值计算)
-
补码加法与减法的运算规则加减法运算是计算机中最基本的运算,通常选用补码实现,实现的算法是:...
- 西门子S7-300PLC的数据类型介绍(西门子300plc数据类型转换)
-
之前我们说了PLC的数据类型分为三类,基本数据类型、复杂数据类型、参数类型数数据类型。我们只介绍了三类:位、字节、字、双字。下面我们再介绍另外几种:整数(INT)、双精度整数(DINT),它们是有符号...
- 源码,反码,补码其实真的很简单(源码 补码反码)
-
1、计算机在任何情况下都只能识别二进制2、计算机在底层存储数据的时候,一律存储的是“二进制的补码形式”,计算机采用补码形式存储数据的原因是:补码形式效率最高。3、记住:...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)