Git使用教程

Git简介

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

Git安装

在使用Git前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。
官网下载太慢,我们可以使用淘宝镜像下载。
Git 官方下载地址
淘宝镜像下载地址
安装成功后在开始菜单中会有Git项,菜单下有3个程序:任意文件夹下右键也可以看到对应的程序!
Git Bash:Unix与Linux风格的命令行,最常用。
Git CMD:Windows风格的命令行。
Git GUI:图形界面的Git。

基础操作

Git 完整命令手册地址
以下操作均在Git Bash中完成

Linux常用命令

cd				改变目录
cd				回退到上一个目录,直接cd进入默认目录
pwd				显示当前所在的目录路径
ls或ll			列出当前目录中的所有文件
touch			新建一个文件
rm				删除一个文件
mkdir			新建一个目录
rm -r			删除一个文件夹
rm -rf			切勿在Linux中尝试!删除电脑中全部文件!
mv				移动文件
reset			重新初始化终端/清屏
clear			清屏
history			查看命令历史
help			帮助
exit			退出
#				注释

Git配置

查看配置

#查看系统配置
git config --system --list
  
#查看当前用户(global)配置
git config --global --list

配置文件路径(配置文件可能已隐藏)

系统配置:Git\etc\gitconfig(Git 安装目录下的 gitconfig)
当前用户配置:C:\用户\当前用户名\ .gitconfig

设置用户名与邮箱(必要)
当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。因为每次Git提交都会使用该信息。
可以用文本编辑器直接设置配置文件C:\用户\当前用户名\ .gitconfig,也可通过以下命令设置

git config --global user.name "tuling"  #名称
git config --global user.email 2404771815@qq.com   #邮箱

Git基本概念

当你对任意一个文件夹进行git init后,这个文件夹里面就可以分成三个区。
如果在加上远程的git仓库就可以分为四个工作区域。
工作区

  • 位置:就是这个文件夹。
  • 功能:平时存放项目代码的地方。

版本库

  • 位置:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
  • 功能:安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本。

暂存区

  • 位置:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 功能:用于临时存放你的改动,保存即将提交到文件列表信息。

远程仓库:托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换。

对图片的解释(可跳过,看完后面再回过头来看)

  • 图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage/index),标记为 “master” 的是 master 分支所代表的目录树。
  • 图中我们可以看出此时 “HEAD” 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
  • 图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。
  • 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
  • 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
  • 当执行 git rm --cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。
  • 当执行 git checkout . 或者 git checkout – 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。
  • 当执行 git checkout HEAD . 或者 git checkout HEAD 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

创建Git仓库

创建本地仓库的方法有两种:
一种是创建全新的仓库,另一种是克隆远程仓库。

# 在当前目录新建一个Git仓库
git init
# 指定目录作为Git仓库
git init 目录

# 克隆一个项目和它的整个代码历史(版本信息)到当前目录
git clone <repo>
# 克隆到指定的目录
git clone <repo> <directory>
# <repo>:Git远程仓库,<directory>:本地目录。

Git文件操作

文件的四种状态

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !

查看文件状态

#查看指定文件状态
git status [filename]

#查看所有文件状态
git status

忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立".gitignore"文件,此文件有如下规则:

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。
  2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
#为注释
*.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt     #但lib.txt除外
/temp        #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/       #忽略build/目录下的所有文件
doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

基本操作

说明

  • workspace:工作区
  • staging area:暂存区/缓存区
  • local repository:版本库或本地仓库
  • remote repository:远程仓库
git add						#工作区到暂存区

git commit -m [message]		#暂存区到本地仓库
git commit -a				#设置修改文件后不需要执行 git add,直接来提交

git reflog					#获取版本号
#HEAD 表示当前版本,HEAD^ 上一个版本,HEAD^^ 上上一个版本
#HEAD~0 表示当前版本,HEAD~1 上一个版本,HEAD^2 上上一个版本
git reset HEAD				#本地仓库到暂存区
git reset --soft HEAD		#--soft 参数用于回退到某个版本
git reset --hard HEAD		#--hard 参数将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交

git checkout .				#暂存区全部到工作区
git checkout -- <file>		#暂存区部分到工作区

git checkout HEAD .			#仓库全部到暂存区、工作区
git checkout HEAD <file>	#仓库部分到暂存区、工作区

git clone [url]				#拷贝一个 Git 仓库到本地

Git远程仓库操作

git remote									#查看当前配置有哪些远程仓库
git remote -v								#加上每个别名的实际链接地址
git remote show [remote]					#显示某个远程仓库的信息
git remote add [shortname] [url]			#添加远程版本库
git remote rename old_name new_name			#修改仓库名
git remote rm [shortname]					#删除远程仓库

git fetch									#从远程仓库下载新分支与数据
git merge									#从远端仓库提取数据并尝试合并到当前分支
git pull <远程主机名> <远程分支名>:<本地分支名>#git fetch 和 git merge的简写
git push <远程主机名> <本地分支名>:<远程分支名>#将你的 [branch] 分支推送成为 [alias] 远程仓库上的 [branch] 分支

Git分支操作

一个分支代表一条独立的开发线。
使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

git branch								#列出所有本地分支
git branch -r							#列出所有远程分支
git branch [branch-name]				#新建一个分支,但依然停留在当前分支
git checkout (branchname)				#切换分支
git checkout -b [branch]				#新建一个分支,并切换到该分支
git merge [branch]						#合并指定分支到当前分支
git branch -d [branch-name]				#删除分支
git push origin --delete [branch-name]	#删除远程分支
git branch -dr [remote/branch]			#删除远程分支

标签操作

git tag							#查看所有标签
git tag -a v1.0					#给最新一次提交HEAD打上"v1.0"的标签
git tag -a v0.9 85fc7e7			#给85fc7e7追加标签"v0.9"
git tag -a <tagname> -m '标签名'	#指定标签信息命令
git tag -s <tagname> -m '标签名'	#PGP签名标签命令

举例

打开Git Bash,按照linux的操作选择一个文件夹作为工作区并初始化。
我这里选择的是E盘下的Gitlibrary/test文件夹。
初始化后出现master说明当前分支是主分支。
在这里插入图片描述
新建五个test.c文件并查看状态,为untracked
在这里插入图片描述
把后四个test文件保存在暂存区,查看状态为new file

把后两个test文件上传到本地仓库,查看状态发现不见了
在这里插入图片描述
我们再对test3.c和test5.c进行修改,都写入123,查看状态,发现修改的文件变成modified

使用git status -s进行简短查看状态
可知??表示未跟踪,第一位为A表示保存在暂存区,无则表示保存在本地仓库,第二位为M表示修改过,无则表示没修改过,若保存在本地仓库且未修改过则不显示。

现在让我们进行回退,使用git chechout,发现上次修改过的痕迹不见了

让我们删除掉所有文件再回退,发现只有之前保存到暂存区的回来,这说明git checkout .是把暂存区的文件回退到工作区
)
让我们删除掉所有文件再使用git checkout master .回退,发现只有之前保存到本地仓库的回来,这说明git checkout master .是把本地仓库的文件回退到工作区且没有影响到暂存区
在这里插入图片描述
让我们删掉一切重新再来一次,新建test.c,输入num:1,保存到本地仓库,修改test.c为num:2,再保存到本地仓库,再回退到上一次保存,新建并切换到新分支new,修改test.c为num:new,保存到本地仓库。使用git log --oneline可以看到每次提交,前面是版本号,后面是提交信息,可以根据版本号回退到任一版本。

在这里插入图片描述
现在我们来对第二次提交打上标签v1.0(第一次打上标签无效是因为需要对这个标签进行解释,即在输入命令后打开的界面写入任意东西再退出)

远程仓库的例子下次再讲

常用命令汇总

常用Linux命令

cd				改变目录
cd				回退到上一个目录,直接cd进入默认目录
pwd				显示当前所在的目录路径
ls或ll			列出当前目录中的所有文件
touch			新建一个文件
rm				删除一个文件
mkdir			新建一个目录
rm -r			删除一个文件夹
rm -rf			切勿在Linux中尝试!删除电脑中全部文件!
mv				移动文件
reset			重新初始化终端/清屏
clear			清屏
history			查看命令历史
help			帮助
exit			退出
#				注释

基本操作

git config --global user.name 'runoob'	
git config --global user.email test@runoob.com#设置用户信息
(去掉 --global 参数只对当前仓库有效)

git init					#初始化仓库
git status					#查看仓库当前的状态,显示有变更的文件
git diff					#比较文件的不同,即暂存区和工作区的差异

git mv [file] [newfile]		#用于移动或重命名一个文件、目录或软连接
git mv -f [file] [newfile]	#新文件名已经存在,但还是要重命名它

git rm <file>				#将文件从暂存区和工作区中删除
git rm -f <file>			#强行从暂存区和工作区中删除修改后的文件
git rm --cached <file>		#把文件从暂存区域移除

git log						#查看历史提交记录
git log --oneline			#选项来查看历史记录的简洁的版本
git log --graph				#选项,查看历史中什么时候出现了分支、合并
git log --reverse			#参数来逆向显示所有日志
git blame <file>			#以列表形式查看指定文件的历史修改记录

转移操作

git add						#工作区到暂存区

git commit -m [message]		#暂存区到本地仓库
git commit -a				#设置修改文件后不需要执行 git add,直接来提交

git reflog					#获取版本号
#HEAD 表示当前版本,HEAD^ 上一个版本,HEAD^^ 上上一个版本
#HEAD~0 表示当前版本,HEAD~1 上一个版本,HEAD^2 上上一个版本
git reset HEAD				#本地仓库到暂存区
git reset --soft HEAD		#--soft 参数用于回退到某个版本
git reset --hard HEAD		#--hard 参数将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交

git checkout .				#暂存区全部到工作区
git checkout -- <file>		#暂存区部分到工作区

git checkout HEAD .			#仓库全部到暂存区、工作区
git checkout HEAD <file>	#仓库部分到暂存区、工作区

git clone [url]				#拷贝一个 Git 仓库到本地

分支操作

git branch								#列出所有本地分支
git branch -r							#列出所有远程分支
git branch [branch-name]				#新建一个分支,但依然停留在当前分支
git checkout (branchname)				#切换分支
git checkout -b [branch]				#新建一个分支,并切换到该分支
git merge [branch]						#合并指定分支到当前分支
git branch -d [branch-name]				#删除分支
git push origin --delete [branch-name]	#删除远程分支
git branch -dr [remote/branch]			#删除远程分支

标签操作

git tag							#查看所有标签
git tag -a v1.0					#给最新一次提交HEAD打上"v1.0"的标签
git tag -a v0.9 85fc7e7			#给85fc7e7追加标签"v0.9"
git tag -a <tagname> -m '标签名'	#指定标签信息命令
git tag -s <tagname> -m '标签名'	#PGP签名标签命令

远程仓库操作

git remote									#查看当前配置有哪些远程仓库
git remote -v								#加上每个别名的实际链接地址
git remote show [remote]					#显示某个远程仓库的信息
git remote add [shortname] [url]			#添加远程版本库
git remote rename old_name new_name			#修改仓库名
git remote rm [shortname]					#删除远程仓库

git fetch									#从远程仓库下载新分支与数据
git merge									#从远端仓库提取数据并尝试合并到当前分支
git pull <远程主机名> <远程分支名>:<本地分支名>#git fetch 和 git merge的简写
git push <远程主机名> <本地分支名>:<远程分支名>#将你的 [branch] 分支推送成为 [alias] 远程仓库上的 [branch] 分支
<think>嗯,用户想查找关于Git使用教程,特别是入门教程和完整指南。首先,我需要根据用户提供的引用内容来组织回答。用户引用了三个来源,其中第一个和第三个提到了Git的基础操作、安装、常用命令和工作流程,第二个引用则列出了具体的教程内容,包括安装、常用命令、原理、工作流程、代码审查和工蜂文档。 首先,我应该按照用户的要求,结构清晰地分步骤讲解Git的入门使用。可能需要从安装开始,然后介绍基本概念,再讲解常用命令,最后提到工作流程和进阶建议。需要确保每个部分都包含具体的例子,比如命令示例,并且正确使用LaTeX格式的行内公式,不过这里可能用不上数学公式,但要注意代码块的格式。 接下来,用户的问题生成部分需要生成相关问题。我需要确保问题与Git入门相关,可能涉及安装、基本命令、分支管理、撤销操作、解决冲突、远程仓库等。要避免重复,并且覆盖用户可能关心的方面。 还要注意引用标识,比如在提到版本控制系统时引用[^1],在安装步骤引用[^2],在基础操作部分引用[^3]。需要自然地插入引用,而不是生硬地添加。 另外,用户示例中的快速排序部分有代码块,所以在Git教程中也应该包含代码示例,比如git init、git add等命令的使用示例,用代码块展示,这样用户更清楚如何操作。 还要检查是否有遗漏的部分,比如是否提到了分布式版本控制系统的优势,或者Git与其他系统的区别,但根据引用内容,可能不需要深入这些,保持入门级即可。 最后,确保回答使用中文,语言流畅,结构清晰,分步骤讲解,并且相关问题部分有针对性。可能需要提醒用户注意常见问题,如冲突解决,或者推荐进一步的学习资源,如Pro Git书籍。</think>### Git使用入门教程完整指南 Git作为分布式版本控制系统,其核心功能是追踪文件变更并支持多人协作开发。以下是入门Git的完整学习路径: #### 一、环境准备 1. **安装Git** - Windows系统访问[Git官网](https://git-scm.com/)下载安装包,勾选`Add to PATH`选项[^2] - Linux系统使用命令安装: ```bash sudo apt-get install git # Debian/Ubuntu sudo yum install git # CentOS ``` 2. **初始配置** ```bash git config --global user.name "YourName" git config --global user.email "your@email.com" ``` #### 二、核心概念 - **仓库(Repository)**:项目的版本库,包含完整历史记录 - **工作区(Working Directory)**:本地修改文件的区域 - **暂存区(Staging Area)**:准备提交的修改暂存区域 - **提交(Commit)**:包含文件变更记录的快照 #### 三、基础操作流程 ```bash # 初始化新仓库 git init my-project cd my-project # 创建新文件 echo "# My Project" > README.md # 添加文件到暂存区 git add README.md # 提交变更 git commit -m "Initial commit" # 查看提交历史 git log ``` #### 四、分支管理 ```bash # 创建新分支 git branch feature-login # 切换分支 git checkout feature-login # 合并分支到main git checkout main git merge feature-login ``` #### 五、远程协作 ```bash # 关联远程仓库 git remote add origin https://github.com/user/repo.git # 推送本地分支 git push -u origin main # 获取远程更新 git pull origin main ``` #### 六、常见问题处理 - **撤销修改**: ```bash git checkout -- filename # 撤销工作区修改 git reset HEAD filename # 取消暂存状态 ``` - **冲突解决**:编辑标记`<<<<<<< HEAD`和`>>>>>>>`冲突区域后重新提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值