Git 操作简单总结:廖雪峰教程

article/2025/11/10 9:10:29

 廖雪峰Git教程:Git教程 - 廖雪峰的官方网站

命令总结:

git add a.txt:添加工作区内容到暂存区
git commit -m "first commit":将暂存区内容提交到版本库rm a.txt:删除工作区的a.txt
git rm a.txt:删除暂存区的a.txt
git commit -m "remove a.txt":删除版本库中的a.txt

1.设置、查询user name, email

  • 设置user name,email
    git config --global user.name "user name"
    git config --global user.email "email"

  • 查询user name,email
    git config --global user.name
    git config --global user.email

2. 创建版本库

首先,选择一个合适的地方,创建一个空目录;第二步,通过git init命令把这个目录变成Git可以管理的仓库,瞬间Git就把仓库建好了。

(1)初始化一个Git仓库,使用git init命令。

(2)添加文件到Git仓库,分两步:

  1. 使用命令git add <file>,注意,可反复多次使用,添加多个文件;
  2. 使用命令git commit -m <message>,完成。

3. 修改与版本回退

3.1 修改文件

提交修改和提交新文件是一样的两步。

  • 要随时掌握工作区的状态,使用git status命令。

  • 如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

3.2 版本回退

命令:git reset --hard commit_id

 回退到上一个版本:首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

$ git reset --hard HEAD^
HEAD is now at e475afc add distributed$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL

(1)HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

(2)穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

git log命令用于查看历史记录,命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数

  • git log 
  • git log --pretty=oneline 

(3)要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

git refloge475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file

3.3 撤销修改

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file,如:

git checkout -- readme.txt

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

git reset HEAD readme.txt
git checkout -- readme.txt

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

3.4 删除文件

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

$ rm test.txt

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了。

现在你有两个选择:

(1)一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

$ git rm test.txt
rm 'test.txt'$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt1 file changed, 1 deletion(-)delete mode 100644 test.txt

现在,文件就从版本库中被删除了。

(2)二是删错了,因为版本库里还有,所以可以很轻松地把误删的文件恢复到最新版本

$ git checkout -- test.txt

git checkout其实是用版本库里的版本替换工作区的版本无论工作区是修改还是删除,都可以“一键还原”

 注意:从来没有被添加到版本库就被删除的文件,是无法恢复的!

4.远程仓库

注册GitHub账号,由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

(1)第1步:创建SSH Key。在你电脑用户主目录下(C:\Users\10***\.ssh),看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"

需要把邮件地址换成自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

(2)第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

        然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,点“Add Key”,你就应该看到已经添加的Key。

        为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

        GitHub允许添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

4.1 添加远程库

先有本地库,后有远程库的时候,如何关联远程库?

(1)要关联一个远程库,使用命令:

方式1:git协议
$ git remote add origin git@github.com:your-github-name/repo-name.git方式2:http协议
$git remote add origin https://github.com/your-github-name/repo-name.git

你也许还注意到,GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议

使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https

(2)关联后,第一次推送master分支的所有内容,使用命令:

git push -u origin master

加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。 

(3)此后,每次本地提交后,只要有必要,就可以使用命令推送最新修改:

git push origin master

        分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!

4.2 从远程库克隆

假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。

(1)首先,登陆GitHub,创建一个新的仓库,名字叫gitskills。勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件。

(2)现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:

$ git clone git@github.com:michaelliao/gitskills.git

注意把Git库的地址换成你自己的,然后进入gitskills目录看看,已经有README.md文件了:

$ cd gitskills
$ ls
README.md

4.3 删除远程仓库 

  • git remote -v查看远程库信息

git remote -v
origin	git@github.com:michaelliao/learngit.git (fetch)
origin	git@github.com:michaelliao/learngit.git (push)

可以看到,本地库已经关联了origin的远程库,并且,该远程库指向GitHub

  • 删除已有的GitHub远程库
git remote rm origin

小结

  • 要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
  • Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

5.分支管理

5.1 创建与合并分支

Git鼓励大量使用分支:

  • 查看分支:git branch
  • 创建分支:git branch <name>
  • 切换分支:git checkout <name> 或者 git switch <name>
  • 创建+切换分支:git checkout -b <name> 或者 git switch -c <name>
  • 合并某分支到当前分支:git merge <name>  “快进模式”:Fast-forward
  • 删除分支:git branch -d <name>            git branch -D <name> 强行删除

     

5.2 解决冲突

当master分支和feature1分支各自都分别有新的提交,即变成了下图这样,这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突。

                                               

此时,直接查看readme.txt的内容:

                             

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

                                         

git log --graph命令可以看到分支合并图:

$ git log --graph
$ git log --graph --pretty=oneline --abbrev-commit

                                                 

                                      

5.3 分支管理策略

  • 快进模式合并:通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息,看不出来曾经做过合并。
  • 普通模式合并:如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
$ git merge --no-ff -m "merge with no-ff" dev

 可以看到,不使用Fast forward模式,merge后就像这样:

分支策略

在实际开发中,我们应该按照几个基本原则进行分支管理:

  • 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
  • 那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
  • 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

所以,团队合作的分支看起来就像这样:

git-br-policy

5.4 Bug分支

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;

在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

5.5 Feature分支

添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

  • 开发一个新feature,最好新建一个分支;
  • 如果要丢弃一个没有被合并过的分支,可以通过:git branch -D <name> 强行删除。

5.6 多人协作

(1)查看远程库的信息

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin

要查看远程库的信息,用git remote

$ git remote
origin用git remote -v显示更详细的信息:
$ git remote -v
origin  git@github.com:michaelliao/learngit.git (fetch)
origin  git@github.com:michaelliao/learngit.git (push)

(2)推送分支

推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上,如果要推送其他分支,比如dev,就改成:

$ git push origin dev

并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

  • master分支:是主分支,因此要时刻与远程同步;

  • dev分支:是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

  • bug分支:只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

  • feature分支:是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

(3)抓取分支

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

小结

  • 查看远程库信息,使用git remote -v

  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;

  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。


http://chatgpt.dhexx.cn/article/NEXg0SGk.shtml

相关文章

廖雪峰Git教程学习笔记

目录 概要 一、Git 和 SVN 的区别 二、Git 安装 三、本地仓库操作 1. 查看Git 版本号 2. git config 3. 初始化本地仓库 4. 添加文件到仓库 5. 查看仓库当前状态 6. 查看修改内容 7. 查看提交日志 8. 版本回退 9. git revert 10. 查看命令历史 11. 撤销修改 1…

Git学习笔记之廖雪峰Git教程

一、Git安装与卸载 1、安装 ​ 官网下载太慢&#xff0c;我们可以使用淘宝镜像下载&#xff1a;http://npm.taobao.org/mirrors/git-for-windowsl ​ 下载对应的版本即可安装&#xff01;安装:无脑下一步即可! ​ 环境变量配了&#xff0c;就可以全局使用命令 ​ 右键git …

Git教程--基于廖雪峰的教程,最通俗易懂

本篇教程基于廖雪峰教程进行的&#xff0c;感谢原作者&#xff0c;写的是目前Git教程中最优秀的 Git教程 介绍工作流程基本概念基本操作常见命令创建仓库提交与修改提交日志远程操作 1、 Git配置安装&#xff08;windows&#xff09;2、创建版本库3、关联远程仓库推送SSH警告删…

Git教程(一)Git简介——廖雪峰的官方网站

目录 一、git简介 1.git的诞生 2.集中式vs分布式 3.安装git 4.创建版本库 笔记学习的内容来自-->链接Git简介—廖雪峰的官方网站 一、git简介 1.git的诞生 Git是目前世界上最先进的分布式版本控制系统&#xff08;没有之一&#xff09;。 Git是用C语言写的。 git…

Git 图解、常用命令和廖雪峰教程笔记总结

概述 先用一幅图&#xff0c;从总体上描述主要git命令的工作流程 workspace: 本地的工作目录。&#xff08;记作A&#xff09; index/stage&#xff1a;暂存区域&#xff0c;临时保存本地改动。 &#xff08;记作B&#xff09;local repository: 本地仓库&#xff0c;只想最后一…

小程序测试之微信开发者工具

一、为什么要使用微信开发者工具&#xff1f; 小程序的测试方法有很多种&#xff0c;直接用真实测试机扫码体验版就可以测试&#xff0c;那为什么还要选择使用工具呢&#xff1f; 使用微信开发者工具的优势&#xff1a; 1、相比真机测试&#xff0c;使用工具可以节省资源&…

微信测试号-介绍

https://mp.weixin.qq.com/debug/cgi-bin/sandbox?tsandbox/login 大部分在企业上手微信公众号开发的都是直接用企业的账号&#xff0c;而我这里主要教学。所以使用的是微信测试号。 我们先要知道我们的入口&#xff08;下面链接就是&#xff09; 微信测试号入口&#xff1a…

微信小程序测试点

测试范围 1.权限测试 1&#xff09;未授权 未授权时&#xff0c;首次进入小程序弹出提醒授权登录 未授权进入小程序后提交数据时&#xff0c;提示授权补充信息才可提交 2&#xff09;已授权 已授权微信登录后可被小程序管理方所获取信息&#xff0c;自动以微信的身份操作业务 …

【微信测试号实战——01】注册一个属于你自己的微信测试号

系列文章目录 微信测试号系列文章&#xff0c;快速进入 【微信测试号实战——01】注册一个属于你自己的微信测试号 文章目录 系列文章目录前言一、打开微信测试号官网二、使用步骤1.打开手机端微信2.扫码登录3.注册成功 三、关注测试号总结 前言 发现微信公众号有很多有意思的…

微信朋友圈测试用例

这里写目录标题 功能测试发朋友圈只发送文本只发送图片只发送视频以上模式搭配使用&#xff0c;是否可以正常使用所在的位置谁可以看提醒谁看是否同步到QQ空间发送 浏览朋友圈文本查看图片查看视频查看分享朋友圈点赞评论删除朋友圈屏蔽朋友圈刷新朋友圈微信朋友圈的封面&#…

微信小程序测试(简单项目测试)

Flex布局简介 布局的传统解决方案&#xff0c;基于盒状模型&#xff0c;依赖 display属性 position属性 float属性 什么是flex布局&#xff1f; Flex是Flexible Box的缩写&#xff0c;意为”弹性布局”&#xff0c;用来为盒状模型提供最大的灵活性。 任何一个容器都可以指…

微信小程序的测试方法

https://developers.weixin.qq.com/miniprogram/design/ 微信小程序的定义 依附于微信而无需再次下载安装的移动端应用程序 微信小程序的特点 无需下载&#xff0c;即用即走 功能丰富&#xff0c;清爽体验 流量大、易裂变 微信小程序的局限性 数量:每个应用最大支持页面层…

如何测试微信小程序

什么是小程序 一种不需要下载、安装&#xff0c;运行在微信里可以直接使用的应用。 怎样测试小程序 功能测试 功能测试可以参考APP的测试方法 输入、输出&#xff1a;用户上传的材料、描述&#xff0c;登录时输入的用户名、密码等&#xff1b; 边界值测试&#xff1a;黑盒测…

微信小程序性能测试——启动性能专项测试

微信小程序性能测试主要可以分为两个方面&#xff0c;启动性能 和 运行时的性能。 其中 小程序启动 是用户体验中极为重要的一环&#xff0c;启动耗时过长会直接造成小程序用户流失&#xff0c;影响用户体验。一般来说用户等待时间超过3秒&#xff0c;用户就有很大概率放弃等待…

微信小程序该如何测试?

今天大湿给大家带来了小程序该如何测试。 全文共2115字,阅读需要13分钟 1.什么是小程序 英文名 Mini Program 是一种不需要下载安装即可使用的应用,是内嵌在微信 APP 里面的一款新形态软件。 它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了…

微信小程序怎么测试

一、什么是小程序&#xff1f; 小程序是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用“触手可及”的梦想&#xff0c;用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念&#xff0c;用户不用关心是否安装太多应用的问题。应用将无处不在&#xff0…

微信支付测试

二、微信验收公众平台验收&#xff08;为微信点赞&#xff09; https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter23_1&index2 支付验收指引 阅读对象 本文阅读对象为&#xff1a;商户自有系统&#xff08;包括但不限于&#xff1a;在线购物平台、人工收银系统、…

微信小程序测试点汇总

Hi&#xff0c;大家好。小程序自诞生以来&#xff0c;凭借“即用即走&#xff0c;不占内存。”的优势一直独领风骚&#xff0c;在帮助各行各业连接、服务用户方面扮演了更加重要的角色。截止到2020年底&#xff0c;小程序DAU突破4亿&#xff0c;全年交易额同比增长超过100%。技…

TOPSIS法(熵权法)(模型+MATLAB代码)

TOPSIS可翻译为逼近理想解排序法&#xff0c;国内简称为优劣解距离法 TOPSIS法是一种常用的综合评价方法&#xff0c;其能充分利用原始数据的信息&#xff0c;其结果能精确地反映各评价方案之间的距离 一、模型介绍 极大型指标&#xff08;效益型指标&#xff09; &#xff…

数学建模常用算法—熵权法(EWM)

解决问题 建模比赛中最基础的模型之一&#xff0c;其主要用于解决评价类问题&#xff08;例如&#xff1a;选择哪种方案最好、哪位运动员或者员工表现的更优秀&#xff09;&#xff0c;用于确定每个指标所占权重&#xff0c;权重用于计算最终得分。 优点 层次分析法最大的缺…