当前位置: 首页 > news >正文

做个购物网站一单一结手机兼职

做个购物网站,一单一结手机兼职,建筑工程教育网,两学一做 知识竞赛网站01、认识一下Git#xff01;—简介 Git是当前最先进、最主流的分布式版本控制系统#xff0c;免费、开源#xff01;核心能力就是版本控制。再具体一点#xff0c;就是面向代码文件的版本控制#xff0c;代码的任何修改历史都会被记录管理起来#xff0c;意味着可以恢复…01、认识一下Git—简介 Git是当前最先进、最主流的分布式版本控制系统免费、开源核心能力就是版本控制。再具体一点就是面向代码文件的版本控制代码的任何修改历史都会被记录管理起来意味着可以恢复到到以前的任意时刻状态。支持跨区域多人协作编辑是团队项目开发的必备基础所以Git也就成了程序员的必备技能。 主要特点 开源免费使用广泛。强大的文档代码的历史版本管理直接记录完整快照完整内容而非差异支持回滚、对比。分布式多人协作的的代码协同开发几乎所有操作都是本地执行的支持代码合并、代码同步。简单易用的分支管理支持高效的创建分支、合并分支。 Git是Linux之父被迫开发的为了解决Linux混乱的代码管理而开发的。Linux和Git之父 李纳斯·托沃兹Linus Benedic Torvalds来自1969年的芬兰。 02、Git是干什么的—基础概念 先了解下Git的基本概念及基本框架、工作流程。 2.1、Git概念汇总 概念名称描述工作区Workspace就是在电脑里能看到的代码库目录是我们搬砖的地方新增、修改的文件会提交到暂存区暂存区stage 或 index用于临时存放文件的修改实际上上它只是一个文件.git/index保存待提交的文件列表信息。版本库/仓库RepositoryGit的管理仓库管理版本的数据库记录文件/目录状态的地方所有内容的修改记录版本都在这里。服务端/远程仓库origin 或 remote服务端的版本库专用的Git服务器为多人共享提供服务承担中心服务器的角色。本地版本库通过push指令把代码推送到服务端版本库。本地仓库用户机器上直接使用的的的版本库分支Branch分支是从主线分离出去的“副本”可以独立操作而互不干扰仓库初始化就有一个默认主分支master。头HEADHEAD类似一个“指针”指向当前活动 分支 的 最新版本。提交Commit把暂存区的所有变更的内容提交到当前仓库的活动分支。推送Push将本地仓库的版本推送到服务端远程仓库与他人共享。拉取Pull从服务端远程仓库获取更新到本地仓库获取他人共享的更新。获取Fetch从服务端远程仓库更新作用同拉取Pull区别是不会自动合并。冲突Conflict多人对同一文件的工作副本进行更改并将这些更改合并到仓库时就会面临冲突需要人工合并处理。合并Merge对有冲突的文件进行合并操作Git会自动合并变更内容无法自动处理的冲突内容会提示人工处理。标签Tags标签指的是某个分支某个特定时间点的状态可以理解为提交记录的别名常用来标记版本。master或main仓库的“master”分支默认的主分支初始化仓库就有了。Github上创建的仓库默认名字为“main”origin/master表示远程仓库origin的“master”分支origin/HEAD表示远程仓库origin的最新提交的位置一般情况等于“origin/master” 2.2、工作区/暂存区/仓库 工作区、暂存区、版本库是Git最基本的概念关系如下图 工作区Workspace就是在电脑里能看到的代码库目录是我们搬砖的地方新增、修改的文件会提交到暂存区。 在这里新增文件、修改文件内容或删除文件。 暂存区stage或index 用于临时存放文件的修改实际上上它只是一个文件.git/index保存待提交的文件列表信息。 用git add 命令将工作区的修改保存到暂存区。 版本库/仓库Repository /rɪˈpɑːzətɔːri/ 仓库Git的管理仓库管理版本的数据库记录文件/目录状态的地方所有内容的修改记录版本都在这里。就是工作区目录下的隐藏文件夹.git包含暂存区、分支、历史记录等信息。 用git commit 命令将暂存区的内容正式提交到版本库。master 为仓库的默认分支masterHEAD是一个“指针”指向当前分支的最新提交默认指向最新的master。 如上图为对应本地仓库目录的结构关系。 KWebNote为项目目录也就是Git工作区。项目根目录下隐藏的.git目录就是Git仓库目录了存放了所有Git管理的信息。.git/config为该仓库的配置文件可通过指令修改或直接修改。index文件就是存放的暂存区内容。 2.3、Git基本流程图 Git的工作流程核心就下面几个步骤掌握了就可以开始写Bug了。 0、准备仓库创建或从服务端克隆一个仓库。1、搬砖在工作目录中添加、修改代码。2、暂存git add将需要进行版本管理的文件放入暂存区域。3、提交git commit将暂存区域的文件提交到Git仓库。4、推送git push将本地仓库推送到远程仓库同步版本库。5、获取更新fetch/pull从服务端更新到本地获取他人推送的更新与他人协作、共享。 git commit -a指令省略了add到暂存区的步骤直接提交工作区的修改内容到版本库不包括新增的文件。git fetch、git pull 都是从远程服务端获取最新记录区别是git pull多了一个步骤就是自动合并更新工作区。git checkout .、git checkout [file] 会清除工作区中未添加到暂存区的修改用暂存区内容替换工作区。git checkout HEAD .、 git checkout HEAD [file] 会清除工作区、暂存区的修改用HEAD指向的当前分支最新版本替换暂存区、工作区。git diff 用来对比不同部分之间的区别如暂存区、工作区最新版本与未提交内容不同版本之间等。git reset是专门用来撤销修改、回退版本的指令替代上面checkout的撤销功能。 2.4、Git状态图 Git在执行提交的时候不是直接将工作区的修改保存到仓库而是将暂存区域的修改保存到仓库。要提交文件首先需要把文件加入到暂存区域中。因此Git管理的文件有三2种状态 未跟踪untracked新添加的文件或被移除跟踪的文件未建立跟踪通过git add添加暂存并建立跟踪。未修改从仓库签出的文件默认状态修改后就是“已修改”状态了。已修改modified文件被修改后的状态。已暂存staged修改、新增的文件添加到暂存区后的状态。已提交(committed)从暂存区提交到版本库。 03、起步Git安装配置 Git官网www.git-scm.com/ 下载安装包进行安装。Git的使用有两种方式 命令行Git的命令通过系统命令行工具或Git提供的命令行工具运行C:\Program Files\Git\git-bash.exeGUI工具Windows(GUI)、Mac(GUI)工具需单独安装使用更简单、更易上手。 指令git --version查看安装版本号 $ git --version git version 2.33.0.windows.2本文是在Windows 平台上完成的不过这个对学习Git没什么影响。 3.1、Git的配置文件 Git有三个主要的配置文件三个配置文件的优先级是① ② ③ ① 系统全局配置(--system)包含了适用于系统所有用户和所有仓库项目的配置信息存放在Git安装目录下C:\Program Files\Git\etc\gitconfig。② 用户全局配置(--global)当前系统用户的全局配置存放用户目录C:\Users\[系统用户名]\.gitconfig。③ 仓库/项目配置(--local)仓库项目的特定配置存放在项目目录下.git/config #查看git配置 git config --list git config -l#查看系统配置 git config --system --list#查看当前用户global全局配置 git config --list --global#查看当前仓库配置信息 git config --local --list仓库的配置是上面多个配置的集合 $ git config --list $ git config -l diff.astextplain.textconvastextplain http.sslbackendopenssl http.sslcainfoC:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt core.autocrlftrue core.fscachetrue core.symlinksfalse pull.rebasefalse credential.helpermanager-core credential.https://dev.azure.com.usehttppathtrue init.defaultbranchmaster user.nameKanding user.email123anding163.com3.2、配置-初始化用户 当安装Git后首先要做的事情是配置你的用户信息—— 告诉Git你是谁配置 用户名、邮箱地址每次提交文件时都会带上这个用户信息查看历史记录时就知道是谁干的了。 配置用户信息 $ git config --global user.name Your Name $ git config --global user.email emailexample.com # 配置完后看看用户配置文件 $ cat C:\Users\Kwongad\.gitconfig [user]name Kandingemail 123anding163.comuser.name为用户名user.email为邮箱。--globalconfig的参数表示用户全局配置。如果要给特定仓库配置用户信息则用参数--local配置即可或直接在仓库配置文件.git/config里修改。 3.3、配置-忽略.gitignore 工作目录中的文件并不是全都需要纳入版本管理如日志、临时文件、私有配置文件等不需要也不能纳入版本管理那该怎么办呢 在工作区根目录下创建“.gitignore”文件文件中配置不需要进行版本管理的文件、文件夹。“.gitignore”文件本身是被纳入版本管理的可以共享。有如下规则 #符号开头为注释。可以使用Linux通配符。 星号*代表任意多个字符问号代表一个字符方括号[abc]代表可选字符范围大括号{string1,string2,...}代表可选的字符串等。感叹号!开头表示例外规则将不被忽略。路径分隔符/f开头表示要忽略根目录下的文件f。路径分隔符f/结尾表示要忽略文件夹f下面的所有文件。 #为注释 *.txt #忽略所有“.txt”结尾的文件 !lib.txt #lib.txt除外 /temp #仅忽略项目根目录下的temp文件,不包括其它目录下的temp如不包括“src/temp” build/ #忽略build/目录下的所有文件 doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt各种语言项目的常用.gitignore文件配置github.com/github/giti… 04、Git的GUI工具们 如果不想用命令行工具完全可以安装一个Git的GUI工具用的更简单、更舒服。不用记那么多命令了极易上手不过Git基础还是需要学习了解一下的。 ❓对于Git建议用命令行这样你才能真的理解Git的思想 ✔️其实都只是工具而已适合自己的就是最好的没必要纠结多写点Bug更重要 TortoiseGit小乌龟SVN时代就很流行的代码管理GUI利器。 只有Windows版本支持中文需要单独下载安装中文语言包。✔️开源免费与文件管理器的良好集成。✔️内置冲突对比解决工具。SourcetreeSourceTree是老牌的Git GUI管理工具了也号称是最好用的Git GUI工具。 ✔️适用于 Windows 和 Mac 系统内置中文版自动识别语言。✔️免费、功能强大使用简单。✔️功能丰富基本操作和高级操作都设计得非常流畅适合初学者上手支持Git Flow。无冲突对比工具支持配置第三方组件。GitHub DesktopGithub官方出品的Git管理工具。GitKrakenGitKraken是一个跨平台GUI Git客户端有免费版专业版和企业版这些版本启用了不同的功能。 4.1、SourceTree SourceTree的官网 下载安装包支持Window、Mac系统按照提示完成安装。 SourceTree支持管理多个仓库通过按钮可选择多种方式添加仓库。 然后就是可视化的仓库管理了不用记住繁琐的指令参数了可视化操作。 4.2、TortoiseGit TortoiseGit 官网下载安装包及中文语言包按照提示完成安装。小乌龟的Git是集成到操作系统里的直接右键文件夹就可以进行Git操作了。 先进入设置右键文件夹菜单 -- TortoiseGit -- Settings 进入设置设置中文语言。小乌龟的各种Git操作都在右键菜单了深度集成到了操作系统的资源管理器中了文件图标也是有Git状态的比较容易分辨。 4.3、VSCode中的Git VSCode自带的Git工具基本已经可以满足日常使用了既有可视化功能也能敲命令习惯了不就不用安装其他GUI工具了。不过还是可以再安装一些VSCode插件来增强Git功能。 GitLens 在团队项目开发中非常实用必备用于快速查看代码提交历史记录在代码上会显示最近的修改信息包括提交者只就这一点就值得推荐了。 Git History可以轻松快速浏览Git文件操作历史记录的工具可视化展示操作简单。 05、Git使用入门 5.1、创建仓库 创建本地仓库的方法有两种 一种是创建全新的仓库git init会在当前目录初始化创建仓库。另一种是克隆远程仓库git clone [url] # 准备一个文件夹“KwebNote”作为仓库目录命令行进入该文件夹 KwongadKwongad-T14 MINGW64 ~ $ cd d: KwongadKwongad-T14 MINGW64 /d $ cd Project_Files KwongadKwongad-T14 MINGW64 /d/Project_Files # 多次cd指令进入到仓库目录KwebNote“cd 目录名称”指令进入目录“cd ..”返回上级目录有空格 KwongadKwongad-T14 MINGW64 /d/Project_Files/github.kwong/KwebNote# 开始初始化项目也可指定目录git init [文件目录] $ git init Initialized empty Git repository in D:/Project_Files/github.Kwong/KwebNote/.git/注意Git指令的执行都需在仓库目录下。 创建完多出了一个被隐藏的.git目录这就是本地仓库Git的工作场所。 克隆远程仓库如在github上创建的仓库“https://github.com/kwonganding/KWebNote.git” $ git clone https://github.com/kwonganding/KWebNote.git Cloning into KWebNote... remote: Enumerating objects: 108, done. remote: Counting objects: 100% (108/108), done. remote: Compressing objects: 100% (60/60), done. remote: Total 108 (delta 48), reused 88 (delta 34), pack-reused 0 Receiving objects: 100% (108/108), 9.36 KiB | 736.00 KiB/s, done. Resolving deltas: 100% (48/48), done.会在当前目录下创建“KWebNote”项目目录。 5.2、暂存区add 可以简单理解为git add命令就是把要提交的所有修改放到暂存区Stage然后执行git commit就可以一次性把暂存区的所有修改提交到仓库。 指令描述git add [file1] [file2]添加文件到暂存区包括修改的文件、新增的文件git add [dir]同上添加目录到暂存区包括子目录git add .同上添加所有修改、新增文件未跟踪到暂存区git rm [file]删除工作区文件并且将这次删除放入暂存区 # 添加指定文件到暂存区包括被修改的文件 $ git add [file1] [file2] ...# 添加当前目录的所有文件到暂存区 $ git add .# 删除工作区文件并且将这次删除放入暂存区 $ git rm [file1] [file2] ...# 改名文件并且将这个改名放入暂存区 $ git mv [file-original] [file-renamed]修改文件“R.md”未暂存 执行git add .暂存 5.3、提交commit-记录 git commit提交是以时间顺序排列被保存到数据库中的就如游戏关卡一样每一次提交commit就会产生一条记录id 描述 快照内容。 commit id根据修改的文件内容采用摘要算法SHA1计算出不重复的40位字符这么长是因为Git是分布式的要保证唯一性、完整性一般本地指令中可以只用前几位6。即使多年以后依然可通过id找到曾经的任何内容和变动再也不用担心丢失了。描述针对本次提交的描述说明建议准确填写就跟代码中的注释一样很重要。快照就是完整的版本文件以对象树的结构存在仓库下\.git\objects目录里这也是Git效率高的秘诀之一。 SHA1 是一种哈希算法可以用来生成数据摘要Git不适合大的非文本文件会影响计算摘要、快照的性能。 多个提交就形成了一条时间线每次提交完会移动当前分支master、HEAD的“指针”位置。 Sourcetree上的历史记录 一般情况每完成一个小功能、一个Bu就可以提交一次这样会形成比较清晰的历史记录。 指令 指令描述git commit -m 说明提交变更参数-m设置提交的描述信息应该正确提交不带该参数会进入说明编辑模式git commit -a参数-a表示直接从工作区提交到版本库略过了git add步骤不包括新增的文件git commit [file]提交暂存区的指定文件到仓库区git commit --amend -m使用一次新的commit替代上一次提交会修改commit的hash值idgit log -n20查看日志(最近20条)不带参数-n则显示所有日志git log -n20 --oneline参数“--oneline”可以让日志输出更简洁一行git log -n20 --graph参数“--graph”可视化显示分支关系git log --follow [file]显示某个文件的版本历史git blame [file]以列表形式显示指定文件的修改记录git reflog查看所有可用的历史版本记录实际是HEAD变更记录包含被回退的记录重要git status查看本地仓库状态比较常用的指令加参数-s简洁模式 通过git log指令可以查看提交记录日志可以很方便的查看每次提交修改了哪些文件改了哪些内容从而进行恢复等操作。 # 提交暂存区到仓库区 $ git commit -m [message] # 提交所有修改到仓库 $ git commit -a -m修改README的版权信息# 提交暂存区的指定文件到仓库区 $ git commit [file1] [file2] ... -m [message]# 使用一次新的commit替代上一次提交 # 如果代码没有任何新变化则用来改写上一次commit的提交信息 $ git commit --amend -m [message]$ git log -n2 commit 412b56448568ff362ef312507e78797befcf2846 (HEAD - main) Author: Kanding 123anding163.com Date: Thu Dec 1 19:02:22 2022 0800commit c0ef58e3738f7d54545d8c13d603cddeee328fcb Author: Kanding 123anding163.com Date: Thu Dec 1 16:52:56 2022 0800# 用参数“--oneline”可以让日志输出更简洁一行 $ git log -n2 --oneline 5444126 (HEAD - main, origin/main, origin/HEAD) Update README.md 228362e Merge branch main of github.com:kwonganding/KWebNote5.4、Git的“指针”引用们 Git中最重要的就是提交记录了其他如标签、分支、HEAD 都对提交记录的“指针”引用指向这些提交记录理解这一点很重要。 提交记录之间也存在“指针”引用每个提交会指向其上一个提交。标签 就是对某一个提交记录的的 固定 “指针”引用取一个别名更容易记忆一些关键节点。存储在工作区根目录下.git\refs\tags。分支 也是指向某一个提交记录的“指针”引用“指针”位置可变如提交、更新、回滚。存储在工作区根目录下.git\refs\heads。HEAD指向当前活动分支最新提交的一个“指针”引用存在在“.git/HEAD”文件中存储的内容为“ref: refs/heads/master”。 上图中 HEAD始终指向当前活动分支多个分支只能有一个处于活动状态。标签t1在某一个提交上创建后就不会变了。而分支、HEAD的位置会改变。 打开这些文件内容看看就更容易理解这些“指针”的真面目了。 # tag $ git tag -a v1 -mv1版本 $ cat .git/refs/tags/v1 a2e2c9caea35e176cf61e96ad9d5a929cfb82461# main分支指向最新的提交 $ cat .git/refs/heads/main 8f4244550c2b6c23a543b741c362b13768442090# HEAD指向当前活动分支 $ cat .git/HEAD ref: refs/heads/main# 切换到dev分支HEAD指向了dev $ git switch dev Switched to branch dev $ cat .git/HEAD ref: refs/heads/dev这里的主分支名字为“main”是因为该仓库是从Github上克隆的Github上创建的仓库默认主分支名字就是“main”本地创建的仓库默认主分支名字为“master”。 “指针”引用之所以用引号的“指针”是为了便于统一和理解。和指针原理类似都是一个指向只是实际上可能更复杂一点且不同的“指针”引用会有区别。 5.5、提交的唯一标识idHEAD~n是什么意思 每一个提交都有一个唯一标识主要就是提交的hash值commit id在很多指令中会用到如版本回退、拣选提交等需要指定一个提交。那标识唯一提交有两种方式 首先就是commit id一个40位编码指令中使用的时候可以只输入前几位6位即可。还有一种就是HEAD~n是基于当前HEAD位置的一个相对坐标。 HEAD 表示当前分支的最新版本是比较常用的参数。HEAD^上一个版本HEAD^^ 上上一个版本。HEAD~ 或HEAD~1 表示上一个版本以此类推HEAD^10 为最近第10个版本。HEAD{2}在git reflog日志中标记的提交记录索引。 通过git log、git reflog可以查看历史日志可以看每次提交的唯一编号hash。区别是git reflog可以查看所有操作的记录实际是HEAD变更记录包括被撤销回退的提交记录。 $ git reflog -n10 5acc914 (HEAD - main) HEAD{0}: reset: moving to HEAD~ 738748b (dev) HEAD{1}: reset: moving to HEAD~ 9312c3e HEAD{2}: reset: moving to HEAD~ db03fcb HEAD{3}: reset: moving to HEAD~ 1b81fb3 HEAD{4}: reset: moving to HEAD~ 41ea423 HEAD{5}: reset: moving to HEAD~ d3e15f9 HEAD{6}: reset: moving to d3e15f9 1b81fb3 HEAD{7}: reset: moving to HEAD~1 41ea423 HEAD{8}: reset: moving to HEAD~ d3e15f9 HEAD{9}: reset: moving to HEAD~5.6、比较diff git diff用来比较不同文件版本之间的差异。 指令描述git diff查看暂存区和工作区的差异git diff [file]同上指定文件git diff --cached查看已暂存的改动就是暂存区与新版本HEAD进行比较git diff --staged同上git diff --cached [file]同上指定文件git diff HEAD查看已暂存的未暂存的所有改动就是与最新版本HEAD进行比较git diff HEAD~同上与上一个版本比较。HEAD~表示上一个版本HEAD~10为最近第10个版本git diff [id] [id]查看两次提交之间的差异git diff [branch]查看工作区和分支直接的差异 ☘️画个图更清晰些 # 查看文件的修改 $ git diff README.md# 查看两次提交的差异 $ git diff 8f4244 1da22# 显示今天你写了多少行代码工作区暂存区 $ git diff --shortstat {0 day ago}06、远程仓库 Git作为分布式的版本管理系统每个终端都有自己的Git仓库。但团队协作还需一个中间仓库作为中心同步各个仓库。于是服务端远程仓库就来承担这个职责服务端不仅有仓库还配套相关管理功能。 可以用公共的Git服务器也可以自己搭建一套Git服务器。 公共Git服务器如Github、Gitlab、码云Gitee、腾讯Coding等。搭建私有Git服务器如开源的Gitlab、Gitea、等。 6.1、远程用户登录 Git服务器一般提供两种登录验证方式 HTTS基于HTTPS连接使用用户名、密码身份验证。 每次都要输入用户名、密码当然可以记住。地址形式https://github.com/kwonganding/KWebNote.gitSSL采用SSL通信协议基于公私钥进行身份验证所以需要额外配置公私秘钥。 不用每次输入用户名、密码比较推荐的方法。地址形式gitgithub.com:kwonganding/KWebNote.git #查看当前远程仓库使用的那种协议连接 $ git remote -v origin gitgithub.com:kwonganding/KWebNote.git (fetch) origin https://github.com/kwonganding/KWebNote.git (push)# 更改为https地址即可切换连接模式。还需要禁用掉SSL, 才能正常使用https管理git git config --global http.sslVerify false远程用户登录HTTS 基于HTTPS的地址连接远程仓库Github的共有仓库克隆、拉取pull是不需要验证的。 $ git clone https://github.com/kwonganding/KWebNote.git Cloning into KWebNote...# 仓库配置文件“.git/config” [remote origin]url https://github.com/kwonganding/KWebNote.gitfetch refs/heads/*:refs/remotes/origin/*pushurl https://github.com/kwonganding/KWebNote.git推送push代码的时候就会提示输入用户名、密码了否则无法提交。记住用户密码的方式有两种 URL地址配置在原本URL地址上加上用户名、密码https://后加用户名:密码 # 直接修改仓库的配置文件“.git/config” [remote origin]url https://用户名:密码github.com/kwonganding/KWebNote.gitfetch refs/heads/*:refs/remotes/origin/*pushurl https://github.com/kwonganding/KWebNote.git本地缓存会创建一个缓存文件.git-credentials存储输入的用户名、密码。 # 参数“--global”全局有效也可以针对仓库设置“--local” # store 表示永久存储也可以设置临时存储 git config --global credential.helper store# 存储内容如下打开文件“仓库\.git\.git-credentials” https://kwonganding:[加密内容付费可见]github.com远程用户登录SSH SSHSecure Shell安全外壳是一种网络安全协议通过加密和认证机制实现安全的访问和文件传输等业务多用来进行远程登录、数据传输。SSH通过公钥、私钥非对称加密数据所以SSH需要生成一个公私钥对公钥放服务器上私有自己留着进行认证。 ① 生成公私钥通过Git指令ssh-keygen -t rsa生成公私钥一路回车即可完成。生成在“C:\Users\用户名\.ssh”目录下文件id_rsa.pub的内容就是公钥。 ② 配置公钥打开id_rsa.pub文件复制内容。Github上打开Setting➤ SSH and GPG keys ➤ SSH keys ➤ 按钮New SSH key标题Title随意秘钥内容粘贴进去即可。 SSH配置完后可用ssh -T gitgithub.com来检测是否连接成功。 $ ssh -T gitgithub.com Hi kwonganding! Youve successfully authenticated, but GitHub does not provide shell access. 6.2、远程仓库指令 指令描述git clone [git地址]从远程仓库克隆到本地当前目录git remote -v查看所有远程仓库不带参数-v只显示名称git remote show [remote]显示某个远程仓库的信息git remote add [name] [url]增加一个新的远程仓库并命名git remote rename [old] [new]修改远程仓库名称git pull [remote] [branch]取回远程仓库的变化并与本地版本合并git pull同上针对当前分支git fetch [remote]获取远程仓库的所有变动到本地仓库不会自动合并需要手动合并git push推送当前分支到远程仓库git push [remote] [branch]推送本地当前分支到远程仓库的指定分支git push [remote] --force/-f强行推送当前分支到远程仓库即使有冲突⚠️很危险git push [remote] --all推送所有分支到远程仓库git push –u参数–u表示与远程分支建立关联第一次执行的时候用后面就不需要了git remote rm [remote-name]删除远程仓库git pull --rebase使用rebase的模式进行合并 6.3、推送push/拉取pull git push、git pull是团队协作中最常用的指令用于同步本地、服务端的更新与他人协作。 推送push推送本地仓库到远程仓库。 如果推送的更新与服务端存在冲突则会被拒绝push失败。一般是有其他人推送了代码导致文件冲突可以先pull代码在本地进行合并然后再push。 拉取pull从服务端远程仓库更新到本地仓库。 git pull拉取服务端的最新提交到本地并与本地合并合并过程同分支的合并。git fetch拉取服务端的最新提交到本地不会自动合并也不会更新工作区。 6.4、fetch与pull有什么不同 两者都是从服务端获取更新主要区别是fetch不会自动合并不会影响当前工作区内容。 git pull git fetch git merge 如下面图中git fetch只获取了更新并未影响master、HEAD的位置。要更新master、HEAD的位置需要手动执行git merge合并。 # fetch只更新版本库 $ git fetch remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 663 bytes | 44.00 KiB/s, done. From github.com:kwonganding/KWebNote2ba12ca..c64f5b5 main - origin/main# 执行合并合并自己 $ git merge Updating 2ba12ca..c64f5b5 Fast-forwardREADME.md | 2 -1 file changed, 1 insertion(), 1 deletion(-)07、Git利器-分支 分支是从主线分离出去的“副本”分支就像是平行宇宙可独立发展独立编辑、提交也可以和其他分支合并。分支是Git的核心必杀利器之一分支创建、切换、删除都非常快他非常的轻量。所以早建分支多用分支 7.1、分支Branch 比如有一个项目团队准备10月份发布新版本要新开发一堆黑科技功能占领市场。你和小伙伴“小美”一起负责开发一个新功能A开发周期2周在这两周你们的代码不能影响其他人不影响主分支。这个时候就可以为这个新功能创建一个分支你们两在这个分支上干活2周后代码开发完了、测试通过就可以合并进要发版的开发分支了。安全、高效不影响其他人工作完美 在实际项目中一般会建几个主线分支。 master作为主分支存放稳定的代码就是开发后测试通过的代码不允许随便修改和合并。开发分支用于团队日常开发用比如团队计划10月份开发10个功能并发版则在此分支上进行不影响主分支的稳定。功能A分支开发人员根据自己的需要可以创建一些临时分支用于特定功能的开发开发完毕后再合并到开发分支并删除该分支。 分支就是指向某一个提交记录的“指针”引用因此创建分支是非常快的不管仓库多大。当我们运行git branch dev创建了一个名字为dev的分支Git实际上是在.git\refs\heads下创建一个dev的引用文件没有扩展名。 $ git branch dev $ cat .git/refs/heads/dev ca88989e7c286fb4ba56785c2cd8727ea1a07b977.2、分支指令 指令描述git branch列出所有本地分支加参数-v显示详细列表下同git branch -r列出所有远程分支git branch -a列出所有本地分支和远程分支用不同颜色区分git branch [branch-name]新建一个分支但依然停留在当前分支git branch -d dev删除dev分支-D大写强制删除git checkout -b dev从当前分支创建并切换到dev分支git checkout -b feature1 dev从本地dev分支代码创建一个 feature1分支并切换到新分支git branch [branch] [commit]新建一个分支指向指定commit idgit branch --track [branch] [remote-branch]新建一个分支与指定的远程分支建立关联git checkout -b hotfix remote hotfix从远端remote的hotfix分支创建本地hotfix分支git branch --set-upstream [branch] [remote-branch]在现有分支与指定的远程分支之间建立跟踪关联git branch --set-upstream hotfix remote/hotfixgit checkout [branch-name]切换到指定分支并更新工作区git checkout .撤销工作区的未暂存修改把暂存区恢复到工作区。git checkout HEAD .撤销工作区、暂存区的修改用HEAD指向的当前分支最新版本替换git merge [branch]合并指定分支到当前分支git merge --no-ff dev合并dev分支到当前分支参数--no-ff禁用快速合并模式git push origin --delete [branch-name]删除远程分支git rebase master将当前分支变基合并到master分支✅switch新的分支切换指令切换功能和checkout一样switch只单纯的用于切换git switch master切换到已有的master分支git switch -c dev创建并切换到新的dev分支 关于 checkout 指令checkout是Git的底层指令比较常用也比较危险他会重写工作区。支持的功能比较多能撤销修改能切换分支这也导致了这个指令比较复杂。在Git 2.23版本以后增加了git switch、git reset指令。 git switch专门用来实现分支切换。git reset专门用来实现本地修改的撤销更多可参考后续“reset”内容。 $ git branchdev * main # 列出了当前的所有分支星号“*”开头的“main”为当前活动分支。7.3、分支的切换checkout 代码仓库可以有多个分支master为默认的主分支但只有一个分支在工作状态。所以要操作不同分支需要切换到该分支HEAD就是指向当前正在活动的分支。 # 切换到dev分支HEAD指向了dev # 此处 switch 作用同 checkoutswitch只用于切换不像checkout功能很多 $ git switch dev Switched to branch dev $ cat .git/HEAD ref: refs/heads/dev使用 git checkout dev切换分支时干了两件事 ①、HEAD指向dev修改HEAD的“指针”引用指向dev分支。②、还原工作空间把dev分支内容还原到工作空间。 此时的活动分支就是dev了后续的提交就会更新到dev分支了。 ❓切换时还没提交的代码怎么办 如果修改包括未暂存、已暂存和待切换的分支没有冲突则切换成果且未提交修改会一起带过去所以要注意如果有冲突则会报错提示先提交或隐藏关于隐藏可查看后续章节内容“stash”。 7.4、合并merge冲突 把两个分支的修改内容合并到一起常用的合并指令git merge [branch]将分支[branch]合并到当前分支。根据要合并的内容的不同具体合并过程就会有多种情况。 快速合并Fast forward 如下图master分支么有任何提交“git merge dev”合并分支dev到master此时合并速度就非常快直接移动master的“指针”引用到dev即可。这就是快速合并Fast forward不会产生新的提交。 合并dev到master注意要先切换到master分支然后执行git merge dev把dev合并到当前分支。 强制不用快速合并git merge --no-ff -m merge with no-ff dev参数--no-ff不启用快速合并会产生一个新的合并提交记录。 普通合并 如果master有变更存在分支交叉则会把两边的变更合并成一个提交。 如果两边变更的文件不同没有什么冲突就自动合并了。如果有修改同一个文件则会存在冲突到底该采用哪边的程序无法判断就换产生冲突。冲突内容需要人工修改后再重新提交才能完成最终的合并。 上图中创建dev分支后两个分支都有修改提交因此两个分支就不在一条顺序线上了此时合并dev到master就得把他们的修改进行合并操作了。 v5、v7共同祖先是v4从这里开始分叉。Git 会用两个分支的末端v6 和 v8以及它们的共同祖先v4进行三方合并计算。合并之后会生成一个新和并提交v9。合并提交v9就有两个祖先v6、v8。 处理冲突 HEAD 在有冲突的文件中 HEAD开头的内容就表示是有冲突的部分需要人工处理可以借助一些第三方的对比工具。人工处理完毕后完成合并提交才最终完成此次合并。分割线上方是当前分支的内容下方是被合并分支的变更内容。 7.5、变基rebase 把两个分支的修改内容合并到一起的办法有两种merge 和 rebase作用都是一样的区别是rebase的提交历史更简洁干掉了分叉merge的提交历史更完整。 在dev上执行“git rebase master”变基将dev分支上分叉的v7、v8生成补丁然后在master分支上应用补丁产生新的v7、v8新的提交。然后回到master分支完成合并git merge dev此时的合并就是快速合并了。最终的提交记录就没有分叉了。 $ git rebase master $ git checkout master $ git merge dev08、标签管理 标签Tags指的是某个分支某个特定时间点的状态是对某一个提交记录的的固定“指针”引用。一经创建不可移动存储在工作区根目录下.git\refs\tags。可以理解为某一次提交编号的别名常用来标记版本。所以发布时一般都会打一个版本标签作为该版本的快照指向对应提交commit。 当项目达到一个关键节点希望永远记住那个特别的提交快照你可以使用 git tag 给它打上标签。比如我们今天终于完成了V1.1版本的开发、测试并成功上线了那就可给今天最后这个提交打一个标签“V1.1”便于版本管理。 默认标签是打在最新提交的commit上的如果希望在指定的提交上打标签则带上提交编号commit idgit tag v0.9 f52c633 指令描述git tag查看标签列表git tag -l a*查看名称是“a”开头的标签列表带查询参数git show [tagname]查看标签信息git tag [tagname]创建一个标签默认标签是打在最新提交的commit上的git tag [tagname] [commit id]新建一个tag在指定commit上git tag -a v5.1 -mv5.1版本创建标签v5.1.1039-a指定标签名-m指定说明文字git tag -d [tagname]删除本地标签git checkout v5.1.1039切换标签同切换分支git push [remote] v5.1推送标签标签不会默认随代码推送推送到服务端git push [remote] --tags提交所有tag 如果要推送某个标签到远程使用命令git push origin [tagname]或者一次性推送全部到远程git push origin --tags 注意标签总是和某个commit挂钩。如果这个commit既出现在master分支又出现在dev分支那么在这两个分支上都可以看到这个标签。 # tag $ git tag -a v1 -mv1版本 $ cat .git/refs/tags/v1 a2e2c9caea35e176cf61e96ad9d5a929cfb82461# 查看标签列表 $ git tag v109、后悔药-怎么撤销变更 发现写错了要回退怎么办看看下面几种后悔指令吧 ❓还没提交的怎么撤销 —— checkout、reset 还未提交的修改工作区、暂存区不想要了用签出指令checkout进行撤销清除。或者用checkout的新版回滚指令reset。❓已提交但么有push的提交如何撤销—— reset、revert❓已push的提交如何撤销—— 同上先本地撤销然后强制推送git push origin -f⚠️注意慎用 记得先pull获取更新。 9.1、后悔指令 指令描述git checkout .撤销工作区的未暂存修改把暂存区恢复到工作区。不影响暂存区如果没暂存则撤销所有工作区修改git checkout [file]同上file指定文件git checkout HEAD .撤销工作区、暂存区的修改用HEAD指向的当前分支最新版本替换工作区、暂存区git checkout HEAD [file]同上file指定文件git reset撤销暂存区状态同git reset HEAD不影响工作区git reset HEAD [file]同上指定文件fileHEAD可省略git reset [commit]回退到指定版本清空暂存区不影响工作区。工作区需要手动git checkout签出git reset --soft [commit]移动分支master、HEAD到指定的版本不影响暂存区、工作区需手动git checkout签出更新git reset --hard HEAD撤销工作区、暂存区的修改用当前最新版git reset --hard HEAD~回退到上一个版本并重置工作区、暂存区内容。git reset --hard [commit]回退到指定版本并重置工作区、暂存区内容。git revert[commit]撤销一个提交会用一个新的提交原提交的逆向操作来完成撤销操作如果已push则重新push即可 git checkout .、git checkout [file] 会清除工作区中未添加到暂存区的修改用暂存区内容替换工作区。git checkout HEAD .、 git checkout HEAD [file] 会清除工作区、暂存区的修改用HEAD指向的当前分支最新版本替换暂存区、工作区。 # 只撤销工作区的修改未暂存 $ git checkout . Updated 1 path from the index# 撤销工作区、暂存区的修改 $ git checkout HEAD . Updated 1 path from f951a969.2、回退版本reset reset是专门用来撤销修改、回退版本的指令支持的场景比较多多种撤销姿势所以参数组合也比较多。简单理解就是移动master分支、HEAD的“指针”地址理解这一点就基本掌握reset了。 如下图 回退版本git reset --hard v4 或 git reset --hard HEAD~2master、HEAD会指向v4提交v5、v6就被废弃了。也可以重新恢复到v6版本git reset --hard v6就是移动master、HEAD的“指针”地址。 reset有三种模式对应三种参数mixed默认模式、soft、hard。三种参数的主要区别就是对工作区、暂存区的操作不同。 mixed为默认模式参数可以省略。只有hard模式会重置工作区、暂存区一般用这个模式会多一点。 模式名称\描述HEAD的位置暂存区工作区soft回退到某一个版本工作区不变需手动git checkout修改不修改不修改mixed(默认)撤销暂存区状态不影响工作区需手动git checkout修改修改不修改hard重置未提交修改工作区、暂存区修改修改修改 穿梭前用git log可以查看提交历史以便确定要回退到哪个版本。要重返未来用git reflog查看命令历史以便确定要回到未来的哪个版本。 git reset [--soft | --mixed | --hard] [HEAD]# 撤销暂存区 $ git reset Unstaged changes after reset: M R.md# 撤销工作区、暂存区修改 $ git reset --hard HEAD# 回退版本库到上一个版本并重置工作区、暂存 $ git reset --hard HEAD~# 回到原来的版本恢复上一步的撤销操作并重置工作区、暂存 $ git reset --hard 5f8b961# 查看所有历史提交记录 $ git reflog ccb9937 (HEAD - main, origin/main, origin/HEAD) HEAD{0}: commit: 报表新增导入功能 8f61a60 HEAD{1}: commit: bug修复报表导出bug 4869ff7 HEAD{2}: commit: 用户报表模块开发 4b1028c HEAD{3}: commit: 财务报表模块开发完成9.3、撤销提交revert 安全的撤销某一个提交记录基本原理就是生产一个新的提交用原提交的逆向操作来完成撤销操作。注意这不同于resetreset是回退版本revert只是用于撤销某一次历史提交操作是比较安全的。 如上图 想撤销v4的修改执行git revert v4会产生一个新的提交v-4是v4的逆向操作。同时更新maser、HEAD“指针”位置以及工作区内容。如果已push则重新push即可。 # revert撤销指定的提交“-m”附加说明 $ git revert 41ea42 -m撤销对***的修改 [main 967560f] Revert 1231 file changed, 1 deletion(-)9.4、checkout/reset/revert总结 标题 \ 指令checkoutresetrevert主要作用撤销撤销工作区、暂存区未提交修改回退版本重置工作区、暂存区撤销某一次提交撤销工作区git checkout [file]git reset HEAD [file]撤销工作区、暂存区git checkout HEAD [file]git reset --hard HEAD [file]回退版本git reset --hard [commit]安全性只针对未提交修改安全如回退了已push提交不安全安全 可看出reset完全可以替代checkout来执行撤销、回退操作reset本来也是专门用来干这个事情的可以抛弃checkout了撤销的时候。 10、工作中的Git实践 10.1、Git flow Git flowGit工作流程是指软件项目中的一种Git分支管理模型经过了大量的实践和优化被认为是现代敏捷软件开发和DevOps开发、技术运营和质量保障三者的交集的最佳实践。Git flow主要流程及关键分支原图地址-processon ✅主分支master稳定版本代码分支对外可以随时编译发布的分支不允许直接Push代码只能请求合并pull request且只接受hotfix、release分支的代码合并。 ✅热修复分支hotfix针对线上紧急问题、bug修复的代码分支修复完后合并到主分支、开发分支。 ① 切换到hotfix分支从master更新代码② 修复bug③ 合并代码到dev分支在本地Git中操作即可④ 合并代码到master分支。 ✅发版分支release版本发布分支用于迭代版本发布。迭代开发完成后合并dev代码到release在release分支上编译发布版本以及修改bug定时同步bug修改到dev分支。测试完成后此版本可以作为发版使用然后把稳定的代码push到master分支并打上版本标签。 ✅开发分支dev开发版本分支针对迭代任务开发的分支日常开发原则上都在此分支上面迭代完成后合并到release分支开发、发版两不误。 ✅其他开发分支dev-xxx开发人员可以针对模块自己创建本地分支开发完成后合并到dev开发分支然后删除本地分支。 10.2、金屋藏娇stash 当你正在dev分支开发一个功能时代码写了一半突然有一个线上的bug急需要马上修改。dev分支Bug没写完不方便提交就不能切换到主分支去修复线上bug。Git提供一个stash功能可以把当前工作区、暂存区 未提交的内容“隐藏”起来就像什么都没发生一样。 # 有未提交修改切换分支时报错 $ git checkout dev error: Your local changes to the following files would be overwritten by checkout:README.md Please commit your changes or stash them before you switch branches. Aborting# 隐藏 $ git stash Saved working directory and index state WIP on main: 2bc012c s# 查看被隐藏的内容 $ git stash list stash{0}: WIP on main: 2bc012c s# 比较一下什么都没有一切都没有发生过 $ git diff# 去其他分支修改bug修复完成回到当前分支恢复工作区 $ git stash pop在上面示例中有未提交修改切换分支时报错。错误提示信息很明确了commit提交或stash隐藏Please commit your changes or stash them before you switch branches. 如果切换分支时未提交修改的内容没有冲突是可以成功切换的未提交修改会被带过去。 指令描述git stash把未提交内容隐藏起来包括未暂存、已暂存。 等以后恢复现场后继续工作git stash list查看所有被隐藏的内容列表git stash pop恢复被隐藏的内容同时删除隐藏记录git stash save message同git stash可以备注说明messagegit stash apply恢复被隐藏的文件但是隐藏记录不删除git stash drop删除隐藏记录 当然这里先提交到本地也是可以的只是提交不是一个完整的功能代码而是残缺的一部分影响也不大。 拣选提交cherry-pick 当有一个紧急bug在dev上修复完我们需要把dev上的这个bug修复所做的修改“复制”到master分支但不想把整个dev合并过去。为了方便操作Git专门提供了一个cherry-pick命令让我们能复制一个特定的提交到当前分支而不管这个提交在哪个分支。 如上图操作过程相当于将该提交导出为补丁文件然后在当前HEAD上重放形成无论内容还是提交说明都一致的提交。 希望把dev分支上的v7提交的内容合并到master但不需要其他的内容。在master分支上执行指令git cherry-pick v7会产生一个新的v7提交内容和v7相同。同时更新master、HEAD以及工作区。 # 选择一个commit合并进当前分支 $ git cherry-pick [commit]参考资料 博客园 | 深入浅出Git教程猴子都能懂的GIT入门廖雪峰的GIT教程电子书《ProGit-Git教程》Gitee码云的 Git 大全真的挺全敏捷过程实践-git代码分支管理规范易百教程-Git教程在线Git学习练习GUI Clients Git网站上的GUI工具列表Git常用指令集合链接https://juejin.cn/post/7195030726096453690
http://www.dnsts.com.cn/news/260292.html

相关文章:

  • 公司手机网站效果图长春网站建设推广
  • 做吃穿住行网站怎么将自己房子投入网站做民宿
  • 举报网站建设自查报告国家企业信息公示系统(全国)官网
  • 网站建设小说毕业设计做a的网站有哪些
  • 做沙盘实训在哪个网站做怎样建立网站快捷方式
  • 做视频网站用什么云盘好广州比较好的网站建设
  • 做网站淮南wordpress系统安装
  • 昆明网站建设价格低企业网站素材
  • 建设门户网站的重要性江苏省建设局网站证件查询
  • 太原免费网站建站模板wordpress精美免费主题
  • 网站怎样上线网站启用cdn加速
  • 网站建设业务开展方案公司网站是怎么做的
  • 3d报价网站开发越众做的绿色建筑的网站
  • 做网站推广送什么动漫设计学校哪里好
  • 安徽旅游在线网站建设wordpress本地环境搭建
  • 重庆做网站怎么做网站备案提示
  • 建设主题网站的顺序一般是网站会员管理系统
  • 三网合一网站建设公司用c3做的动画网站
  • 南通网站搜索引擎优化域名注册好了 怎么做网站
  • 电子产品网站建设医院网站制作设计
  • 太原定制网站建设制作公司宜昌建设厅网站
  • 怎么用手机网站做软件网站建设常用字体
  • 自助建站系统哪个好两个域名指向同一个网站
  • 阿里云官方网站 icp代备案管理系统买模板建设网站
  • 网站快速备案安全吗在线生成头像
  • 网站开发技术总监面试题建设部特殊工种查询网站
  • 可信网站认证 费用国外免费注册域名的网站
  • 模板网站最大缺点网站正在建设中 代码
  • 做网站为什么赚钱吗电子商城网站制作数据库
  • 怎么样注册网站天津网站建设开发维护