这样的标签来标识里程碑的意义。这样有什么用呢? - 教程
目录
情况三:当前工作区的代码,已经add,也已经commit到仓库了。
git到底是个啥?其实它就是一个版本控制器,方便用户更好的对版本进行控制。
初始化本地仓库
git init---->初始化git仓库,生成一个 .git的目录文件
可以tree .git看看有啥。
配置git
创建完本地仓库后,首先要先配置好的就是name和email,要不然后面出一堆问题。
git config user.name "hxh"---------->创建user.name
git config user.email "Huxianghai0207@163.com"--------->创建email
git config --unset user.name----->删除user.name
git config --unset user.email------>删除user.email
上面创建的user.name 和user.email都是在一个仓库中设置的,在一台机器上是可以创建多个仓库的。
git config --global user.name "hxh" ------>加上--global选项之后,说明这个user.name会存于此机器上所有的本地仓库中。
git config --global user.email "Huxianghai0207@163.com" ---->生成在此机器上所有的本地仓库中。
git config --global --unset user.name ---->带上--global用于删除全局的变量。
git config --global --unset user.email
git的工作区,暂存区和本地仓库
首先创建的.git不是工作区,是除了.git以外的文件是工作区。

工作区---(经过add操作)-->暂存区/索引-----(commit -m)----->仓库。
git add 【】操作
git add 作用是把工作区的内容add 到暂存区中。
git add 【file1】【file2】
git add .
git commit -m "" 操作
把暂存区内容commit到本地仓库。就是git commit -m "" 执行
git commit -m "add file"
git log----->打印最近提交的记录
git log --pretty=oneline --abbrev-commit-------->一行打印commit ID和commit信息
git status---->查看当前修改状态
git log --pretty=oneline-----提交的记录一行表现
git cat-file -p 【ID】
git diff 【filename】---->用来查看此文件的工作区和暂存区的区别的。

-号表示之前,+号表示之后。
关于版本回退
git reset 【--soft | --mixed | --hard】【HEAD】
--mixed为默认选项,使用时能够不带该参数。该参数将暂存区的内容回退为指定提交版本内容,工作区记录保持不变。
--soft:参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。
--hard:参数将暂存区和工作区都退回到指定版本。切记工作区有未提交的代码时不要用这个选项,源于工作区会回滚,你没有提交的代码也找不回来了,故而使用该参数前一定要慎重。
HEAD说明:
可直接写成commit id,表示指定回退的版本。
HEAD表示当前版本。HEAD^:表示上一个版本。HEAD^^:表示上上个版本。以此类推。


这里如果不小心用git rest --hard xxx,回退到初始版本了,可以用git reflog查看以前的版本。

关于撤销修改
情况一:对于工作区的代码,还没有add。
方法一:手动撤销----当然不推荐这种做法,太容易出错。
方法二:git checkout -- 【filename】
方法二这里千万要注意checkout后面的 -- 不要忘记。

情况二:对于工作区的代码,已经add了。

情况三:当前工作区的代码,已经add,也已经commit到仓库了。

总结:

关于删除文件:
方法一:
1)rm 【文件名】先删除工作区。2)git add【文件名】。3)git commit -m “”。
方法二:
1)git rm 【文件名】--->这一步相当于 rm 【文件名】+git add 【文件名】。2)git commit -m “”。

分支管理
理解分支,分支就像是平行宇宙一般。



git branch--->查看分支。
git branch dev----->创建dev分支
git branch -a------> 查看所有分支,包括远端分支和删除了的分支。
git remote prune origin--------->让git branch -a 看不到已经被删除了的分支
git branch -vv--------->查看本地分支与远端分支的连接情况



git checkout 【分支名】------>用来改变HEAD的指向。


git merge dev 合并分支


git branch -d dev删除dev分支
注意:不能在dev分支上删除dev分支,在master分支或其他分支上删除dev分支。
因为创建、合并和删除分支都极其快,所以都推荐大家运用分支完成某个任务,合并后再删掉分支,这和在master分支上工作效果是一样的,而且还更安全。
git checkout -b dev创建分支并转到此分支下,相当于先git branch dev 再git checkout dev。
本地分支与远端分支建立连接的两种方式:
git checkout -b 【本地分支名】 origin/【分支名】表示在本地创建分支并转到此分支下,然后把此分支与远端的分支进行连接。
除了这种方式进行本地分支和远端分支进行连接之外,还有一种方法;
git branch --set-upstream-to=origin/【dev】 【dev】---------【】里面表示分支名,这句命令表示本地的dev与远端的dev分支进行连接。
分支冲突:
那么,如果在master分支下改了ReadMe文件,又在dev分支下改了ReadMe文件,合并的时候冲突了,该怎么办?
解决方案:git merge 冲突的时候要手动解决,并且要求一次提交管理!!!
git log --graph --abbrev-commit行看过程图
合并分支的好习惯
一般的提交都是ff模式(fast-forward)看不出来提交情况是哪个分支提交的。
大家一般在合并分支的时候最好带上选项--no-ff -m "提交信息",如果有冲突,先解除冲突,再提交一次。之后再使用master合并这个分支就不会再有冲突了,也更安全。
例如:git merge --no-ff -m "merge dev" dev
分支策略:一般我们的稳定的代码就是master分支上面部署的都,日常开发的不稳定的代码大家在别的分支上面写,写完之后经过一系列测试,最终将稳定的代码合并到master分支上。
所以实际中大家可能在其他分支上开发好代码,在其他分支下 git merge --no-ff -m "commit msg" master,如果有冲突就解决冲突,随后再转换到master分支下,git merge 【刚才的分支】,这样就很安全的合并master分支了。
bug分支
bug分支:假如大家正在dev2分支下进行开发,开发到一半,突然发现master分支上面有bug需要解决。在git中都可以通过一个新的临时分支来修复,修复后,合并分支,随后将临时分支删除。
可是现在dev2刚写到一半还没有提交,大家转到master分支下面会让master分支看到我们的修改。如果不想让master分支看到我们才开发到一半的代码,怎么半?
这时候可以使用 git stash---->使用git stash 命令,可以把当前分支下被git追踪管理过的文件保存到stash里面。---没有被git 追踪管理的记录不能放入stash档案中。
bug修好之后,返回dev2分支中进行开发,使用git stash list----可查看stash里保存了哪些文件,启用git stach pop-----从stash文件中拿出来。

由于在dev2中开发代码的时候,发现了master分支下有bug,借助一系列操控修复了master分支下的bug,此时我们dev2分支下的开发也已经全部完成,这时候我们直接合并master分支的话,肯定会有冲突。故而,先用dev2分支合并master分支,合并就算有困难也可以在本地分支多次修改测试,不会影响master分支,解决冲突之后要提交一次。接着,处理完冲突之后,再运用master分支合并dev2分支,由于冲突早已经解决完了,所以master分支合并dev2分支并没啥问题。
删除分支:
1)已merge的分支:git branch -d 【分支名】来删除分支。
2)没有merge的分支:git branch -D 【分支名】来删除分支(强制删除)。
关于远程操作:
对于gitee,最好先在本地仓库中配置git config --global user.name 和git config --global user.eamil最好,且设置的name和email要与gitee中的name和email对应。
然后在本地就可以使用git clone【可用https克隆或者用ssh的方式克隆】

注意使用ssh的方式进行克隆的时候,要求先在本地的.ssh目录下查看是否有id_rsa和id_rsa.pub这两个档案,假设有了就可以拿到id_rsa_pub中的公钥,如果没有需要配置一下:使用ssh-keygen -t rsa -C 【"3268437983@qq.com"】-------括号中代表你的邮箱地址。之后再到.ssh目录下查看有没有id_rsa和id_rsa_pub文件。



先配备好user.name和user.email,git clone 【】克隆好之后,就可以git add . git commit -m "提交信息",然后通过git push origin master:master命令推送到远端仓库了
假设远端仓库和本地仓库的分支名称一样,那么直接省略冒号和后面,例如:git push origin master即可。若是你的远端仓库和本地仓库的分支已经建立连接了,那么直接使用git
push通过就可以推送到远端仓库,能够使用git branch -vv命令查看本地分支和远端仓库分支的连接情况。

这里看到本地master分支已经和远端origin的master分支连接了,这里直接可以git push。

git pull 的作用其实就是从远端拉取+合并。
关于.gitignore文件
git不会追踪管理.gitignore文件里的内容。


首位加#号,代表注释的意思。首位加*代表推送到远端时要忽略的资料。首位加!代表推送到远端时不要忽略的文件。
git add -f 【filename】---表示的是强制add .(包括被忽略的文件)
git check-ignore -v 【filename】----表示查看filename为啥会被忽略,在.gitignore资料的第几行写的忽略信息。
标签管理
理解标签:标签tag,许可简单理解为是对某次commit的一个标识,相当于起了一个别名。例如:在工程发布某个版本的时候,针对最后一次commit起一个v1.0这样的标签来标识里程碑的意义。
这样有什么用呢?相较于难以记住的commit id,tag很好的解决这个问题,因为tag一定要给一个让人容易记住,且有意义的名字。当大家需要回退到某个主要版本时,直接启用标签就能很快定位到。
git tag v1.0----可对当前版本进行打标签。
git tag----查看所有标签
使用git log --pretty=oneline --abbrev-commit来一行打印commitID和commit信息。
git tag v0.9 【commit ID】----还可以对之前的版本进行打标签。
git tag -a v0.8 -m "描述字段" 【commit ID】------还允许给tag加一些描述性的字段。

git show 【标签名】-------查看标签的完整信息。

git tag -d v0.9------删除标签
git push origin 【标签名】----- 推送标签到远端仓库。

git push origin --tags表示推送本地仓库中所有的标签到远端仓库。
删除远端的标签:1)git tag -d v1.0先删除本地 2)git push origin :v1.0 再推送到远端。
浙公网安备 33010602011771号