git使用

169 阅读9分钟

git设置

设置用户名和账号,其中git config命名的--global也可以写成-g,表示全局配置
 git config --global user.name 'Your name"
 git config --global user.email 'xxxx@xx.com'  

git创建版本库

1.选择(创建)项目路径(路径不包含中文,否则可能会产生各种莫名奇妙的问题)
2.通过git init命名来初始化这个项目,将其变成git可以管理的仓库,会多一个.git文件(可能隐藏了)

git实战

1.在该文件下创建readme.md或.txt
2. git add readme.txt
通过git add 命令 把文件添加到仓库,没有回任何信息,提交成功
3.git commit -m "版本说明"
image.png
通过git commit命令,把文件提交到仓库,-m后面是本次提交的说明,提交成功后会返回
(1 xfile changed: 1个文件被改动
(2 insertions:插入了两行内容
image.png
上面告诉我们,readme.txt被修改过了,但还没有准备提交的修改.
4.想看修改了什么,可以通过git diff命令来查看 image.png
5.确定修改的内容没问题后,可以提交了,通过git add 然后再运行git status查看当前仓库的状态,下一步就可以提交了 git commit -m '说明'。也可以再通过git status查看状态
image.png

版本问题

git 版本回退

就是你把本地代码修改后,发现改乱了或者误删后,可以回到最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
1.git log 查看最近3次的提交日志 ,箭头指的一长串的东西是是commit_id(版本号).
2.git reset 回退。git reset --hard '06f3cd'回退版本 'o6f3cd'是commit_id的前几位 git reset--hard HEAD^就可以回退到上一个版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100 image.png

git工作区和暂存区

工作区就是电脑中的项目目录,有一个.git隐藏目录,但.git不算工作区,是版本库。
git版本库存了很多东西,最重要的是stage的暂存区,和git自动为我们创建的第一个分支math,以及一个指针HEAD指向math。所以git add 就是把文件添加到暂存区 ,git commit 就是把暂存区的内容提交到当前中分支
再练习一遍
1.在readme.txt文件做修改,新增一个文件git.vue,通过git status查看一下状态,可以看出readme.txt被修改过,而git.vue没有被添加过,所以他的状态是UNtracked.
2.再通过git add .gi把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支

image.png

git管理修改

cat readme.txt查看readme文件,然后再添加git add readme.txt,git status

image.png
再修改readme.txt后提交,再查看状态,就会发现第二修改未提交。因为我们的操作是 第一次修改 -> git add -> 第二次修改 -> git commit
所以Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。所以第二次也要提交,就需要再继续git add和git commit了

撤销修改

当你提交代码时候,发现有错误代码,可以通过提示的git restore把暂缓存区撤销修改,重新回到工作区,然后再git status查看状态,

image.png

删除文件

添加文件test.txt,并提交到GIt 通常是本地项目把文件删除或者用rm test.txt删除。通过git status可以看到那些文件被删除了。
image.png
现在你有两个选择,一个是确定删除,通过git rm删除掉,并且git commit :

远程仓库

找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。完全可以自己搭建一台运行Git的服务器,不过现阶段,为了学Git先搭个服务器绝对是小题大作。好在这个世界上有个叫GitHub的神奇的网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。 注册GitHub账号,由于你的本地git仓库和github仓库直接的传输是通过ssh加密的,所以要设置一下东西 1.创建ssH,再用户主目录下(C盘---->用户/user---->Administrator/自定义用户名文件夹),看看有没有.ssh目录,如果有,则继续看id_rsa和id_rsa.pub这两个文件,如果有,可以跳过到下一不,如果没有,打开git Base,创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容点“Add Key”,你就应该看到已经添加的Key:

添加远程库

首先,登陆GitHub,然后,在右上角找到1“new repository”按钮,创建一个新的在Repository name填入 studygit和描述,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库
image.png 然后我们根据GitHub的提示,在本地的studygit仓库下运行命令: git remote add origin git@github.com:Zss96/studygit.git image.png 添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
最后就可以把本地库的所有内容推送到远程库上

从远程仓库克隆

1.登陆GitHub,创建一个新的仓库,名字叫gitStudy,勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件, 下一步就是克隆了 git clone git@github.com:Zss96/studygit.git

分支管理

分支这个概念类似科幻电影里面经常出现的平行宇宙,每个分支的代码版本都是独立演进的,分支之间的代码版本完全不会干扰另外一个代码版本的开发。但是,与平行宇宙不同的一点是,分支之间还能合并。

创建与合并分支

git checkout命令加上-b参数表示创建并切换,然后用git branch查看所有分支,(*)代表当前分支,然后对readme.txt进行修改,加上create branch,后提交,dev分支的工作完成,我们就可以切换回main分支,可以通过git merge dev来合并dev分支到main中,合并完成后,通过git branch -d dev删除dev分支,git branch查看分支

git branch dev
git checkout dev

image.png

命令总结 查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d

解决冲突

1.创建新的分支feature1,然后修改readme.txt,修改一行代码,再提交是git pull会产生代码冲突 Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改后保存。 1.在使用git pull来取代码时候,经常会产生代码冲突的情况。

 git stash //先将本地修改存储起来
 git stash list //可以看到报错的信息,stash@{0}就是刚才保存的标记
 git pull  //拉起代码
 git stash pop stash@{0}   //还原暂存代码,系统提示如下类似的信息,系统自动合并修改的内容,但是其中有冲突,需要解决其中的冲突
 git stash clear  //清空stash

下面是冲突代码,<<<<<<<update upstrem 和======= 就是pull下来的内容, =======和>>>>>>>stashed changes之间的内容就是本地修改的内容,自动确定需要的内容,解决之后,就可以提交了,清空stash
image.png

Bug分支

在开发中,经常在修复bug的任务,但是当前任务还没完成,就可以使用一个临时分支来修复这个bug,然后合并分支删除。这就是bug分支:

git stash     //保存当前的状态,就是以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git checkout -b issue		      //创建issue分支处理bug
git merge --no-ff -m  "说明"   分支名 //合并当前的分支
git stash list                       //查看当前的状态列表
git stash pop                        //恢复状态

多人协作

从远程仓库克隆下来时,Git就自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。多人协作的流程是先通过git push origin 推送自己的修改,如果推送失败,说明远程分支代码比你本地新,就需要git pull试图合并,如果有冲突,则本地解决或提交,解决后同意第一步推送修改。

git remote //看远程库的信息,或者用git remote -v查看更详细的信息
git pull  //把最新的提交从origin/dev拉到本地
git push origin '分支名'  //推送分支
git checkout -b dev origin/dev //创建远程origin的dev分支到本地

推送分支就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支

标签管理

在发布版本时候,通常把发布的版本号作为一个tab,回退版本时后,commit_ids是一堆杂论的数字组合,不好找,所以可以把打包发布的版本号来设置tab,就容易记住了.在需要打标签的分支中执行

git tag v1.0   //打标签为v1.0,不会自动推送到远程仓库
git tab       //查看所有标签
git tab v1.2  fabck  //在commit_id为fabck打标签
git tag -d v1.0 //删除本地标签v1.0(没推送到远程仓库的方法)
git push origin v1.0  //把标签推送到远程仓库
git push origin :refs/tags/v1.0  //删除远程标签v1.0,要先删除本地标签