IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Git基本用法详解 -> 正文阅读

[开发工具]Git基本用法详解

Git是一个开源的分布式版本控制系统,可以高效的解决项目版本管理的问题。

基本概念

Git中的区域划分:

img

  • Workspace:工作区,就是平时进行开发改动的地方,是当前看到最新的内容。开发的过程也就是对工作区的操作。
  • Index:暂存区,暂时存放未提交的内容。当执行 git add 的命令后,工作区的文件就会被移入暂存区,暂存区标记了当前工作区中哪些内容是被 Git 管理的。当完成某个需求或者功能后想要提交代码,第一步就是通过 git add 添加到暂存区。
  • Repository:本地仓库,位于自己的电脑上。通过 git commit 提交暂存区的内容,会进入本地仓库,并生成一个版本。
  • Remote:远程仓库,即用来托管代码的服务器。远程仓库的内容能够被分布在多个地点的处于协作关系的本地仓库修改,本地仓库的代码可以通过 git push 命令同步到远程仓库。

常用命令

注: 相关命令均为在项目根路径(即.git文件夹所在路径)下使用
注:git <命令> --help查看指定命令的帮助文档

基本配置

首次使用,要全局配置用户名及邮箱信息(仅配置一次即可)

  • 配置用户名:git config --global user.name '用户名'
  • 配置用户邮箱:git config --global user.email '邮箱'

注:全局配置文件位置:C:\Users\用户\.gitconfig

git config --list列出所有配置项

本地操作

注:git stash中临时保存的修改工作区、暂存区的修改,以及本地仓库中的内容在电脑关机重启后都仍然存在。它们都是保存在当前项目下,不同的项目之间都是相互独立的。

基本操作

初始化项目

  • git init在项目中初始化Git,让Git管理当前项目

查看状态

  • git status检查当前文件状态
# 工作区新建的文件,还没有被git管理(需要add到暂存区后才被git管理)
Untracked files

# 文件位于工作区
Changes not staged for commit

# 文件位于暂存区
Changes to be committed

# 工作区及暂存区都没有修改后未提交的文件
nothing to commit, working tree clean

git add

  • git add <file1> <file2> ...将工作区的指定文件添加到暂存区
  • git add .将工作区更改的所有文件都添加到暂存区

注:git add后,工作区和暂存区的内容是一致的

git commit

  • git commit提交暂存区的改动到本地仓库,生成版本(会新开编辑器来输入描述信息)
  • git commit -m '描述信息'提交暂存区的改动到本地仓库,生成版本
  • git commit <file1> <file2> ... -m '描述信息'提交暂存区的指定文件到本地仓库,生成版本
  • git commit -am '描述信息'等同于 git add . && git commit -m '描述信息'
  • git commit --amend -m <描述信息>使用一次新的commit,替代上一次提交(如果代码没有任何新变化,则用来改写上一次commit的提交信息)
  • git show <版本号>显示某次提交的内容变化

注:git commit后,暂存区和本地版本库的内容是一致的

查看记录

  • git log查看提交记录
  • git log --oneline以一行的方式查看提交记录
  • git log --oneline --graph以一行、图形化的方式查看提交记录
  • git reflog查看全部历史操作记录(包括被git reset“丢弃”的版本)

差异比较

  • git diff比较当前工作区与暂存区的差异
  • git diff <filename>比较指定文件在工作区与暂存区的差异
  • git diff HEAD比较工作区与当前分支最新commit(即本地库最近一次版本)之间的差异
  • git diff --cached比较暂存区与本地库最近一次版本的差异
  • git diff --cached <filename>比较指定文件在暂存区与本地库最近一次版本的差异

撤销更改&版本重置

  • git checkout .撤销所有工作区的修改,使之与恢复到与暂存区一致的状态
  • git checkout <filename>撤销指定文件在工作区的修改,使之与恢复到与暂存区一致的状态
  • git reset撤回所有暂存区的文件到工作区
  • git reset <filename>撤回指定的暂存区的文件到工作区
  • git reset --soft <版本号>重置本地仓库中的代码到指定版本
  • git reset --mixed <版本号>重置本地仓库和暂存区的代码到指定版本。为默认行为,等价于git reset <版本号>
  • git reset --hard <版本号>重置本地仓库、暂存区和工作目录的代码到指定版本。注意:会覆盖正在开发的代码
    在这里插入图片描述

分支操作

使用多分支可以同时推进任务的开发,提高开发效率;并且即使某一个分支开发出现问题,也不会对其他分支产生影响。如下表示当前处于master分支。
在这里插入图片描述

查看分支

  • git branch查看本地分支
  • git branch -r查看远程分支
  • git branch -a查看本地和远程分支
  • git branch -v查看分支及各个分支最后一个提交对象的信息(同样可以-va-vr等命令连用)

创建&切换&删除分支

  • git branch <分支名>在当前分支的节点上创建新的分支
  • git checkout <分支名>切换到指定分支
  • git switch <分支名>切换到指定分支,v2.23.0版及以后可用
  • git checkout -b <分支名>创建并切换到新建分支
  • git branch -d <分支名>删除指定分支

合并分支

  • git merge <分支名>将指定分支合并到当前分支

注: 合并分支时,要先切换到最终要合并到的分支,再合并。
注: 在两个不同的分支中,如果对同一个文件的同一个部分进行了不同的修改,则合并分支时会产生冲突。此时需要人为解决冲突后再重新提交一次。

stash临时存储
如果当前工作区或暂存区存在未提交的修改,则无法切换分支。所以当我们想把当前修改应用到其他分支时或当我们需要切换到其他分支完成某些任务但又不想立即提交眼前已经修改的代码时,可以先用git stash命令先把工作区及暂存区已经修改的文件临时保存起来,然后再进行分支切换。之后再根据具体情况,在合适的时机从stash中恢复刚刚保存的内容。

  • git stash把本地的改动(工作区或暂存区的改动)临时存储起来
  • git stash pop应用最近一次临时存储的修改,并删除存储记录
  • git stash save "message"执行存储时添加备注
  • git stash list查看stash的存储列表
  • git stash apply应用最近一次存储的修改,但不会把存储从存储列表中删除
  • git stash apply stash@{index}应用stash中标号为index的修改,不会把存储从存储列表中删除
  • git stash clear清空stash缓存

对于分支的推荐使用方式

  • master分支: 在master分支上只保留完全稳定的代码,一般不直接修改其代码;
  • dev分支: 在dev分支上做开发,一般保存最新完成及bug修复后的代码,最终合并到master分支上;
  • hotfix分支: 在hotfix分支上做紧急修复,最终合并到master分支及dev分支上;
  • feature分支: 在feature分支上开发新功能,一般以dev分支为基础创建feature分支;
  • …: 还可以有更多分支。

远程操作

注: 如果还没有远程仓库,则需要先在远程仓库服务器上创建一个远程仓库;常用的远程仓库服务器有GitHub、Gitee。也可以使用开源项目GitLab搭建自己的远程仓库服务器。

git clone
远程操作的第一步,通常是从远程主机克隆一个版本库,这时就要用到git clone命令。

  • git clone <版本库URL>在本地主机生成一个目录,与远程主机的版本库同名
  • git clone <版本库URL> <本地目录名>在本地主机生成一个目录,指定与远程主机的版本库不同的目录名

git remote
为了便于管理,Git可以为远程主机指定主机名。git remote命令就用于管理主机名。
使用git clone命令克隆版本库时的远程主机会默认被Git命名为origin。
主机名与URL的对应关系存储在当前项目的.git/config文件中。

  • git remote列出所有远程主机
  • git remote -v查看远程主机的网址
  • git remote show <主机名>查看指定主机的详细信息
  • git remote add <主机名> <网址>添加远程主机
  • git remote rm <主机名>移除远程主机
  • git remote rename <原主机名> <新主机名>对远程主机进行重命名

git fetch
一旦远程主机的版本库有了更新,需要将这些更新取回本地,这时就要用到git fetch命令。git fetch命令通常用来查看其他人的进度,因为它取回的代码对你本地的开发代码没有影响。

  • git fetch <远程主机名>将某个远程主机的所有更新,全部取回本地。
  • git fetch <远程主机名> <分支名>取回某个远程主机的指定分支的更新

git fetch取回的更新,在本地主机上要用远程主机名/分支名的形式读取。比如origin主机的master分支,就要用origin/master读取。

$ git branch -r
origin/master
$ git branch -a
* master
  remotes/origin/master
# 以上结果表示:本地主机的当前分支是master,远程分支是origin/master。

$ git checkout -b newBrach origin/master
# 在远程分支origin/master的基础上,创建一个新的本地分支newBranch

$ git merge origin/master
# 在当前分支上,合并远程分支origin/master

git pull
git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。

  • git pull <远程主机名> <远程分支名>:<本地分支名>取回远程主机某个分支的更新,再与本地的指定分支合并。比如git pull origin next:master表示 取回origin主机的next分支,与本地的master分支合并。如果远程分支是与当前分支合并,则冒号后面的部分可以省略,写成git pull origin next

实质上,git pull等同于先做git fetch,再做git merge。比如git pull origin next相当于git fetch origin next && git merge origin/next
注:没有本地仓库的时候,用git clone;已经有本地仓库,更新的时候用git pull

git push
git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相仿。

  • git push <远程主机名> <本地分支名>:<远程分支名>将本地指定分支的更新,推送到远程主机指定分支
  • git push <主机名> --delete <远程分支名>删除指定主机的指定分支

注:将本地仓库推送到远程仓库需要权限。仓库创始人默认有权限,其他人需要先加入团队,才能推送。

  • 注意:如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,
  • 注意:分支推送顺序的写法是<来源地>:<目的地>,所以git pull<远程分支>:<本地分支>,而git push<本地分支>:<远程分支>

追踪关系
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支建立追踪关系,比如本地的master分支自动追踪origin/master分支。

如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。
比如git pull origin 表示本地的当前分支与origin主机上相对应的"追踪分支"(remote-tracking branch)进行合并。

git push如果省略远程分支名,则表示将本地分支推送至与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
比如git push origin master 表示将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用--all选项。
比如git push --all origin表示,将所有本地分支都推送到origin主机。

推荐做法

  • 每天开始工作时,都应该从远程仓库拉取最新的代码
  • 每天工作完,都应该把代码推送到远程仓库
  • 如果使多人协作开发,则每次推送前需要先拉取

为他人的项目贡献代码

  • 把想贡献代码的仓库fork到自己的远程仓库;
  • 在自己的远程仓库做提交;
  • 完成后通过Pull Request向对方贡献代码(需对方审核)

.gitignore文件

.gitignore文件是一个用于指定哪些文件不需要Git管理(即Git要忽略哪些文件)的文件。示例如下。

# 此为注释

# 忽略指定文件,不让Git管理
test.html

# 忽略所有文件名是test的文件,不管后缀是什么
test.*

# 忽略所有后缀名为.a的文件
*.a

# 但lib.a除外
!lib.a

# 忽略node_modules目录下的所有文件
node_modules/

# 忽略doc/目录下的所有后缀名为.a的文件(会忽略doc/abc.txt但不忽略doc/server/abc.txt)
doc/*.txt

# 仅仅忽略项目根目录下的abc.def文件,不包括subdir/abc.def
/abc.def

# 注:Git管理的是文件,空目录会自动被Git忽略掉
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:56:36  更:2022-05-09 12:58:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 1:29:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码