介绍
Git作为当前最流行的版本控制工具,是目前工作中必不可缺少的一个工具,所以学习git的一些最常用的操作也是必须的
Git和Github的基本操作
1. Git安装
Git官网: https://git-scm.com/
在首页的位置找到红框的位置,点击进去,自动会帮你链接到Windows的安装程序,并帮你自动下载
Windows安装
只需要在官网上下载Git的安装程序,然后下载完成后一直下一步下一步,中间除了安装地址你自己可以选一下,其他的默认即可,直到完成安装,安装成功后的验证也很简单,在桌面空白处按右键,如果跟下图显示的一样,便表示安装成功
Mac安装
Mac的安装只需要在首页下载位置上面去选择Mac Build选项即可跳转到Mac的安装界面,里面提供了四个安装方式,这里推荐第一个安装,即利用Homebrew来安装
当安装完成后,打开命令窗口,输入命令
git --version
然后显示出你的Git版本信息,即标志你的Git安装成功
2. Github介绍
GitHub官网:https://github.com/
GitHub是目前为止在全球范围内最大的代码托管网站;同时也是全球范围内最大的开源网站,在这个上面有许多非常多也非常著名的开源项目;在这个上面还有许多我们能够用得到的第三方库或者插件等等,是一个非常实用的网站
学习Git要在Github上面注册一个账号,主页右上角Sign up注册,注册很简单,步骤在这里就不提了
3. 仓库
仓库,我们可以看作是一个管理项目的中心,我们所上传托管的每一个项目都可以看作是一个仓库,对于仓库,我们可以进行更加有效的管理,包括对项目代码的管理,对项目进度的管理。同时仓库里的项目可以作为开源代码,暴露在公网上,来让更多的人参与进来,使用和对一些代码提出修改意见
创建仓库
GitHub登录之后,便会是个人的一个中心页面,在页面的右上角,会有一个自己头像,在那里点开下拉菜单,选择菜单的第二项,如下图所示,即Your repositories选项
点击进入后会是一个仓库管理界面,新的账号里面应该是什么都没有,一篇空白,点击右上方的New选项,去建立一个自己的仓库
打开新建仓库的页面,里面的1和2为必填项
当你全部选择好后,点击Create repository,即可创建一个仓库,当你显示如下页面的时候,就表示你的仓库已经常见成功了
4.上传代码到Github
虽然git安装完之后再右键里面有一个Git Bash Here的选项,可以在任意路径打开git的命令行模式,但是下文我还是使用windows自带的命令提示行来操作,两者之间没有区别,只是个人使用习惯的问题
在你要上传的文件目录里面创建一个文件,文件名为.gitignore,这个文件里面填写的是项目上传GitHub时要忽略的内容,填好后在对应路径打开命令提示行
# 初始化
git init
# 完成后,你当前的项目目录就只有你想上传到仓库中的内容了,其他的你需要忽略的内容就被隐藏了
git add .
git comment -m 第一次上传文件
# 依次执行上面两条命令,就会提示有多少个文件已被改动
然后去我们GitHub初始好的仓库当中,依次复制下图中框选的两条命令
git remote add origin https://github.com/xiren157/test-demo.git
git push -u origin main
# 这里如果main报错的话,就修改为master
# 在进行这一步的时候可能会进行绑定验证
当如上图所示,即表示上传成功,到你GitHub的仓库里面,去刷新页面,你会看到如下页面
这样,我们就应该对Git和GitHub有了一个最初的认识,下面就是Git一些常用操作和对之前操作的一些解释
独自使用Git的基本操作
1. 基本操作及解释
上面我们利用了几句代码编就已经把本地的文件提交到了Github当中,下面先来看看这些代码都是什么意思
git init
# 初始化git文件,想要提交就要初始化
git add .
# 将文件提交到暂存区
git comment -m 第一次上传文件
# 将暂存区的代码提交到远程仓库中
git remote add origin https://github.com/xiren157/test-demo.git
#
git push -u origin main
#
除了上述的代码之外,还有一些常用的命令
git status
# 查看当前的git状态
# 当没有任何文件变动时,会显示 nothing to commit, working tree clean
# 当有任何文件产生变化时,会提示Changes not staged for commit
git log
# 查看所有的commit操作
# commit fb6afe20ed6492cxxxxxxxxxxxxxd91b40 (HEAD -> master, origin/master)
# Author: 夕刃 <xxxxxxxxx@qq.com>
# Date: Mon Feb 1 15:33:16 2021 +0800
#
# 第一次上传
git log的退出时英文状态下的字母q
#当想要查看某个人的操作记录时
git log --author=''
# 从远程仓库将项目拉去到本地
git clone (仓库地址)
2. 配置用户名和邮箱
首先还是先检查git是否在本地安装配置成功,通过查看git的版本来确定即可
git --version
接下来配置本地用户名
git config --global user.name '(Github的用户名)'
# 用户名即小括号里面的内容虽然可以自己定义,还是建议使用跟GitHub上面一样的用户名
然后配置本地邮箱
git config --global user.email '(Github的注册邮箱)'
# 邮箱即小括号里面的内容虽然可以自己定义,还是建议使用跟GitHub上面一样的邮箱
当然这两步操作都是没有任何提示的,所以为了检查我们的配置是否成功,还需要输入下面这条命令来检查
git config --global --list
然后在里面就能够看到你刚才配置的用户名和邮箱,如果配置有什么问题,那么你可以重复上面的命令重新配置
3. 文件操作
3.1修改文件
问了简单,我直接在文件夹中复制了两个副本并修改一下文件名来做操作,其中01和02即为新添加的文件
这个时候我们再在命令行里面输入状态命令,就会看到下图所示
git status
这两个红色的便是我们刚刚创建用来测试修改的文件,因为他还没有提交到暂存区,所以显示红色,而且git会提示我们利用add方法放入track
这里我只对01进行了add操作,可以看到01已经变绿,显示了new file,表示01已经放入缓存区,而02因为没有任何操作,所以它依旧是红的,再对02进行add操作,结果如下图
到这里,我们就已经把我们修改过的文件提交到了暂存区保留,这里git就在提示我们区commit,所以接下来我们来进行提交操作,执行下面的命令
git commit -m 测试修改文件
提交命令后,返回给我们2个文件已经改变,并创建了对应的两个文件,这里,修改提交的基础操作就完成了,当然这个时候文件还没有上传到Github
3.2 删除文件
当然了,我们只要修改了文件,并提交到了本地仓后,就会出现文件有错误或者这个文件不再被需要了,需要删除的操作的时候
这个时候,我们拿上面提到的d2q02.html文件来演示删除操作
首先,这个文件不在被需要了,所以在本地电脑上面,我们就把它删除或者移动出了我们的工程,这里就已经没有02这个文件了
此时,我们来查看整个项目的状态,当我们输入状态命令后,会如下显示
此时,02.html文件在git中的状态会被显示为deleted,但是上面我们已经知道了,红色表示还没有操作,只有变绿了才是操作完成,此时因为02这个文件已经不在当前目录了,所以反向操作,我们需要再次把其他的文件全部添加到暂存区里面
git add .
此时,02这个文件的删除就已经显示完成了,这时候我们只需要按照提示,再次commit提交即可完成整个删除操作
此外,除了这种自己手动删除文件的方法以外,还有另外一种方法,我这里把02.html文件再添加回去,添加的过程省略了
这一步完成后,02.html文件就又被我们重新放回到项目中了
此时如果我们想要快捷删除02这个文件,只需要利用下面的命令,即可快速删除
git rm d2q02.html
这时候再次查看整个的状态,发现02这个文件已经标记绿色的deleted,说明它已经被删除掉了,这个时候只需要再次执行add和commit操作即可
这个时候再次查看日志,就能够看到我们这一系列的配置已经修改和删除操作
3.3 文件重命名
首先还是再重新生成一个d2q02.html文件来进行下面的演示
对文件的重命名再电脑上的操作大家应该都没有问题,这里我把d2q02.html重新命名为Demo.html,然后查看状态
这里的状态也显示的很明确,就是删除了02的文件,新增了一个Demo的文件,所以后面的操作,我们需要删除一个02,添加一个Demo
当你完成这两步操作之后,再次查看状态时,就显示的为renamed的操作完成了,即d2q02的名字变成了Demo,然后只需要提交就行
但是这种手动的重命名还是很繁琐,所以git还提供了一种通过命令行的方式来重命名,这里我不在去创建一个新的d2q02.html文件,而是对我刚刚重命名完的Demo文件再重命名回d2q02,这样来演示这步操作
命令行重命名的命令为,如下图执行
git mv 现在文件的名字带文件后缀 想要重命名的名字带文件后缀
3.4 文件移动
要想操作文件的移动,首先我们再目录中新建一个文件夹取名为Demo,这个就是我们要移动的目录
还是拿d2q02.html这个文件来操作,将他挪动到Demo目录下面,当然,根据现有的一些知识,我们还是可以利用重命名的方法来进行移动
根据执行的命令我们可以看出来,02文件的路径已经变成了Demo下面的文件,这样我们提交完,02便移动成功了
然后有些时候我们不光需要移动这个文件到某个目录下面,还需要给他重新命名,这里我们拿目录中的d2q1.html文件来展示,将他移动到Demo文件夹下,并且重命名为Demo.html
原理其实时一样的,就是移动到文件夹里面,再对文件重命名,这样我们就可以做到移动文件且重命名
到这里一些常见的文件操作就介绍完了。
常见问题及其解决方法
1. 查看文件的前后变化
上面我们移动了d2q1.html文件到Demo文件夹下面,并重新命名为Dem.html文件,一段时间后因为项目文件过多,我们忘记了这个文件当时是怎样一个过程得来的了该怎么办,这时候我们就需要来查看这个文件的变化日志,通过下面的命令
git log --pretty=oneline Demo/Demo.html
这里我们会得到当时对这个文件commit操作生成的id和对当时操作的注释了,复制这个id,执行下面这个代码
git show (路径文件名带文件后缀)
这样我们就能够得到这个id对应的当时是谁做过哪些操作了
当然还有一种更方便的方法,直接查看这个文件的操作,利用下面这行代码
git log -p (路径文件名带文件后缀)
这里我就不截取那么全了,但是里面还是包括了这个文件的所有操作,包括对里面内容的修改,这个方法看到的会相比之前更加全面一些
2. 一键还原
在做项目的时候不可避免地会出现问题,尤其是在一些开发工具中,有些时候托管给git后,开发工具会帮你去push你所更改的代码,这样,到后面你发现代码出现了问题之后,再想去修改可能会找不到自己当时写的那部分,这个时候我们就需要git来帮我们还原到上一个状态下的文件,我这里新添加一个Demo1.htmll来做演示,其中的代码我预先做了一些改动,这里就不截图具体展示在哪里做了改动,后面都会看到
首先利用下面这行命令来找到改动的文件和改动的位置,其中红色的部分为修改之前的,绿色的部分为修改后的部分。这样我们就可以很清晰的看出来是在哪里对文件进行了修改,但是这个是对于单个文件或者文件不多的时候使用,这样找到了之后我们全照红绿来做修改就可以回到修改之前的样子了
git diff
这个时候如果去查看项目状态的时候,就会看到有一些的文件是处于一个标红的modified状态,这个时候因为这个红色的modified状态还没有被add,这里我们可以通过下面命令直接来还原
git ckeckout -- (路径文件名带文件后缀)
这样子同时也可以避免一些误操作对我们的项目的一些大的影响,但是注意,这里的回退只能回到最后一次提交时候的状态,所以不要一次写太多,以免回退的时候清理掉了有用的代码
3. 追踪操作与撤销
文件的追踪,就是当我们把文件加入到了暂存区当中,也就是文件被add之后,git就会实现对这个文件的追踪,此时就无法在做上面的还原操作。下面绿色的状态下就是git对文件进行了追踪,此时checkout命令不再能将代码回退,大家可以自己试一下
那么,如果我们还想让它回到上一次提交的状体,执行上面一步的操作,就只能想办法去撤销当前Git对它的追踪,利用下面的代码即可实现对追踪的撤销
git reset HEAD (路径文件名带文件后缀)
这里要注意,HEAD一定是大写,这个时候执行完我们查看状态,对应的文件就又回到了红色也就是未提交暂存区的状态,此时便解除了git对其的追踪,可以对文件进行一键还原到之前提交的版本了
4. 回退到上一版本或者指定版本
大家无论是干什么,都应该见到过那种修改文件,什么第一版,第二版,最终版,最终版第一版,最终版跳楼版,最终版绝不再改这些你在做项目的时候,经常会进行标记的方法,而Git作为一个版本管理工具,帮我们保留了不同的版本,我们只需要在我们需要的时候去找到我们需要的对应的版本即可,这里我利用上面使用的Demo1来创建了多个版本的提交,这里我做了五个版本,截图只为了显示三个版本
现在这个时候,我这个文件时处在版本五的状态,此时我想把它回到版本四也就是上一个版本,当然最新的一个版本五就会在日志当中消失,只需要下面这行命令(里面的注释同样重要)
git reset --hard HEAD^
# 在git bash或者power shell以及mac使用都没有问题
# 其中一个^ 代表回退一个版本
这里来解释一下我截图中的代码为什么跟我写在代码框中不一样:
我是用的是cmd命令提示行,而这个命令提示行本身的换行即为而不是/,所有如果你只写一个,会被认为是换行符号而被git忽略,出现一个more?的问题
cmd控制台中的解决方法
# 加入引号
git reset --hard "HEAD^"
# 再加一个^
git reset --hard HEAD^^
# 换成~ 后面的数字代表回退几次提交
git reset --hard HEAD~ 或者 git reset --hard HEAD~1
当然,还有一种回退方法,就是你再查看日志的时候,你会得到一个提交id,在回退的时候,直接输入你想要回退到的那个版本的id即可
git reset --hard (commit的id,这个id可以是全部的,也可以是前七八位)
5. 回退指定文件到指定版本
上面我们了解了如何回退到指定版本,但这里面有一个问题,因为我文件太少没有展示出来,就是,当你每一个版本都有大量的文件做了改动,而新的版本在带动了一段时间后,发现其中只有几个文件出了问题,这个时候我们肯定是不能够将整个项目回退到上一个版本,不然其他没有问题的文件我们岂不是也要重新写了,这个时候就需要我们对指定文件来进行回退,利用下面的代码即可实现
git checkout (commit的id) -- (路径文件名带文件后缀)
这里看到了,变动的文件就只有这一个文件,此时我们在commit即可
6. 推送修改后的内容到远程仓库
上面我们所有的操作都是在本地仓库来进行的,也就是我们的代码还是在我们的计算机上面,这样去刷新我们的Github界面会发向我们的代码并没有改变,所以我们就要想办法去把代码推送到远程仓库中
我们在Github当中默认的代码分支叫做master,所以我们推送的时候就放到master里面,执行下面的代码,结果如下面两图所示
git push origin master
7. 版本标签管理
给各个版本标记标签,这样子会更方便我们日后对于整个项目的管理,git中设置标签的命令如下,当然这个标签会默认添加在最新的一次commit上面
git tag (你想起的标签号)
# 检查标签
git tag
此时你去查看日志记录信息,在最新的一条上面就会有一个版本标签
当然,之前的版本也是可以添加版本标签的,比如说,我想添加在版本三上面,只需要在命令中添加对应的commit id即可,如下图所示
git tag (你想起的标签号) (commit的id,这个id可以是全部的,也可以是前七八位)
当你发现你的标签加错了,想要删除这个标签,也很简单,执行下面给的命令即可,效果如下图所示,was后面那串便是对应的commit id的前几位
git tag -d (你想删掉的标签号)
当然标签也可以推送给远程仓库,命令如下
git push origin (你要推送的标签号)
8. 切换删除分支
分支,也就是支线;当我们需要完成某一些功能的时候,我们可以从主线当中剥离出来一些支线来完成单独的功能,然后再将支线合并到主线上面,这个过程就是分支操作,分支操作可以方便多人协作开发,就是我开发我的部分,你开发你的功能,之间互不影响;同时在各自完成支线任务的时候也不会影响到主线,等到支线完成并通过测试之后再将其合并到主线即可;
下面的命令可以帮助我们创建一个分支,dev即为我创建的分支,master前面的*即表示我当前所在的分支;分支的排序是按照首字母的顺序进行的
git branch (你起的分支的名字)
# 检查分支命令
git branch
再建立一个test分支,建立好分支之后,通过下面的命令即可切换分支
git checkout (你想切换的分支的名字)
当我们觉得这个分支完成了或者不再被使用了,需要删除这个分支的时候,可以使用下面的命令,注意,不能删除当前所在的分支,或者所在的分支有当前提交任务
# 不能删除当前所在的分支
git branch -d (你想要删除的分支的名字)
# 当前分支有提交内容,但是你一定要删除,可以使用下面的强制删除命令
git branch -D (你想要删除的分支的名字)
这样还有一个命令,可以帮助我们创建一个分支并直接进入该分支,命令如下
git checkout -b (你起的分支的名字)
9. 合并分支
首先我们现在dev分支里面对代码做一点修改
这个时候我们认为dev分支的功能已经完成了,需要将dev分支的内容合并到master分支上去,这就要我们切换到master分支上面去进行合并操作,其合并命令为
git merge (你要合并的分支名)
10. 解决合并分支冲突
分支在开发功能的时候,如果合作的成员之间实现有约定好,那么合并时候产生冲突就会大大减小,但是,如果没有事先约定,那么在合并分支的时候大概率就会出现分支冲突,最常见的就是两个分支在进行操作的时候改到了同一个位置的代码,如下演示
打开编辑器,因为修改的是个html文件,我是用的Hbuilder X编辑器,打开这个文件后会发现如下图所示
其中HEAD中是你当前分支里面的修改,===号下面是其他分支修改的内容,面对这样的问题,我们可以在合并的时候如下处理
git merge --abort
# 此命令会让git忽略其他分支的代码,只保留原分支的代码
此时便没有了冲突,只保留了当前分支master分支的内容
其次,还有下面这个方法可以来处理,就是去跟其他的分支编写人员去商量然后删除特殊符号,保留想要的代码,然后add添加,之后直接执行git commit(此时这里没有-m xxxx这一个部分了)命令后会出线如下所示
在这个里面,输入i即可编辑,红色的部分就可以注明解决了什么样的问题,然后按Esc退出编辑模式,之后输入:wq即可保存退出,这样便完成了commit操作
多人分支集成操作
1. 不同人查看版本路线
通过之前的学习,我们知道可以通过git log命令来查看操作日志,当然,那个在记录很多的时候就看着很繁琐,所以下面的log命令带参数会让日志显得更加清晰
git log --oneline
查看版本路线就需要再添加一个graph参数
git log --oneline --graph
2. 不同人删除不想要的分支
先去拉去所有的远程仓库,远程仓库的分支自己建立,并查看,命令如下
git fetch
git branch -av
如果我们想要删除远程的分支,只需要输入下面的命令
git push origin --delete (你想要删除的分支)
这样就删除了远程仓库的分支
3. 不同人修改了不同文件
多人修改了不同的文件,其实就跟一个人的操作差不多,只不过有需要的时候需要从远程仓库当中去把其他人的文件去拉下来,但是要注意,不同的人修改完提交远程仓库的时候要merge一下代码
好了,关于git的基础入门就写这么多了
祝各位码上无ERROR,键盘无BUG!!