首先打开git cmd
mkdir learngit //创建文件夹
cd learngit //进入文件夹
ps:你可以先进入一个文件夹,然后在创建,我这里直接使用安装路径了,图方便
接下来便是通过git init 来创建仓库
git init
这里提一嘴,因为外面都说windows自带文本编辑不行,所以我也跟着使用notepad++,下载可直接搜索,然后随便选择一个txt,右键属性,吧打开方式修改成notepad++,以后所以txt只要双击打开都会说默认notepad++打开
现在我们在learngit目录下创建readme.txt 随便输入一些你喜欢的信息,然后调用git add readme.txt,将文件加入到库
git add readme.txt
然后在调用commit命令提交
git commit -m "my first git file readme.txt"
//“ ”这里是你对本次操作的一个说明,以后你可以直接查询到本次
特别说明,add每一次只能添加一个命令,而commit提交时对多个文件进行提交
这里还可以看到,我先进入的lala文件夹
那我们如果在外部修改了文件,但是我们不记得了该怎么办呢,
使用
git status
可以看出我们已经外部修改了readme
如何查看修改了哪里
git diff readme.txt
可以看出我把Git is … system
修改成了 git is … system asdasd
如果没问题我们提交(有问题暂时不管,后面会说怎么回滚)
现在我们已经修改了,我们可以通过查看日志的方式看看我们提交的那些行为
这里是不同的日志,因为我前面调试了,所以你的会和我不同,下面讲解一下
commit 4019…可以当作操作码,是SHA1加密数字16进制。不用太关系。
HEAD表示的是当前版本,HEAD^ 表示上一个版本,每一个^表示一个版本,因为Windows会出现这样的情况
只会出现一个more? 后面的no是我多输的,我还以为问我是不是还要回滚。所以我填了一个no,表示很尴尬,特地去查了一下
^在git里面是换行的意思,所以他问你还要不要继续输入,
解决方式:
使用双引号
git reset --hard "HEAD^"
git reset --hard HEAD^^
git reset --hard HEAD~1
git reset --hard HEAD~
对此说明^^是类似Windows里面你想输入特殊字符就需要一个前置
~1(后面可接任意数字,表示回滚版本数量,100就是100个版本)
回滚完成结果:
然后我们通过type命令和log命令查看结果
type readme.txt
//特别提一嘴这里是Windows平台,linux是这一句
cat readme.txt
可以看出少了一个版本
现在我们回滚了一个操作,那我们如果想要回滚回滚操作怎么办,是的就是套娃,等于取消回滚操作
我们这样操作需要一定的条件才能进行就是你的cmd窗口还没有关闭,。
我们去那个操作下面看会有一个commit_id(对应的sha)
我们不需要打全找到部分就行了(唯一才行)
git reset --hard 401b//这个401b是我从上面找到,你的肯定不是这个
确实回滚了回滚操作
这里做一个声明为什么他回滚前进为啥这么快,主要原因是他回滚的时候并没有真正删除,(这里还有说明,进行操作之后他会生成一个新的版本,旧的版本还在),所以回滚什么的在cmd里面完全就是一个指针变化了而已
那如果你关闭了才后悔怎么办,他们提供了
git reflog
通过这个我们可以看到每次操作的commit 操作id
那么我们怎么删除文件呢,敢敢单单使用del命令linux使用的是(rm)
这一些基本操作我们都弄完了,下面是远程仓库了,
首先我们需要搭建一个远程仓库,因为要自己搭建服务器等,我们使用了免费的github作为仓库。
首先创建一个GitHub账号,然后打开你的git bash,(安装git就会有)输入以下命令
$ ssh-keygen -t rsa -C "你的邮箱,这里填的是你git账号的邮箱"
然后一路回车就完事了。
我们进入GitHub页面,进入count setting,里面有一个
创建一个shh,将
刚刚创建的sha密钥放进去路径:
C:\Users\lala.ssh(lala是主机名字)
将id_rsa.pub里面的信息复制
填入key,title随便写
前面的所有操作你可以类似使用外部API,我们要将我们的身份放到别人的平台才能使用(比如调用百度地图什么的)
现在我们关联好了,那我们要把我们的仓库放到平台上面去。
想通过如图所示创建仓库
跟着流程进行关联
输入完那三行之后就会弹出链接,你跟着点两下就可以了。
成功页面
访问我们GitHub
确实上传上去了。
从现在开始只要我们做了提交,就可以通过
git push origin main
推送至GitHub
后续会弹出警告,回复yes就可以了
现在我们探讨将该操作反过来该怎么进行(将网络上的库,导入到本地)
首先我们新建一个网络仓库
使用语句
git clone git@github.com:lala-lzw/gitskills1.git
这里路径要换成你自己的
下面开始分支结构:
分支结构的存在是必然的,一般库是多人访问以及修改的,所以分支结构,我们之间互相不打扰的系统是必然的。
在我们创建的库里面是只存在一个分支那就是monster(main)分支了,现在已经变成main了
git checkout -b dev //创建并且切换到分支
git branch //查看有哪些分支
现在我们修改readme并且在dev分支提交一下
git merge dev
从这里发现我们原本是没有吧分支的结果改到main里面的,后来我调用了,合并操作他才进入main里面
合并完成之后dev分支已经没有用了。我们完全可以删了他。
git branch -d dev
结果如图所示
因为git checkout 。。。 会有歧义,所以现在更流行使用switch代替checkout进行各种分支操作。
总的来说:
git branch //查看分支
git branch <name> //创建分支
git checkout <name> // 切换分支
git git checkout -b <name> //切换并创建分支
git merge <name> //合并分支
git branch -d <name> 删除分支
分支就会出现情况,eg;我们在dev分支修改了文件1,然后在主文件的里面也修改了文件1,然后在进行合并操作,那不就出现了问题了吗?dev合并操作应该是main的上一个状态的文件1,可是现在的文件1已经被修改了,那么我们如何进行修改呢。
他们提交之后就出现这样的请分别表示两个不同分支的结果
我们直接手动,去这些地方进行修改,然后在进行提交,这样就行,ps:个人觉得这方法好lou,但是没有办法,网上有解决方式,但是有点累了,暂时不细究了。
下面我们看当前情况,我正在写但是,出现了bug,我必须停下来工作先把bug解决了,然后再回复工作现场,继续工作,这个类似cpu断点切换,我们需要进行现场保存喔。
首先我们保存现场:
git stash
,然后可以查看我们是否成功
发现没有了,是个空的
然后我们开一个修改bug的分支语句:
将bug修改并且提交他们。并进行合并
切换到主:下一步查看并恢复现场
就可以继续工作了。
feature 分支。因为我们做功能是一个一个做的,我们可以每一个公能都开分支,然后最后合并他。如果正常情况下,我们只需要类似bug那样,创建分支并提交结果就完事了,但是。你写完了,这个分支因为一些原因不能要了,需要秘密销毁。我们使用branch -d进行删除,他会提示分支结果还未提交不能删除所以我们使用强制删除分支
git branch -D <name> //大写就完事了
我们需要将本地的所有修改以及各个分支的操作提交到远程库我们可以使用
git push origin main 、、来进行和远程推送
现在我们看那个commit id是很麻烦的所以我们还引入了tag标签机制
git tag v1.0
就行了
如果你忘记打标签你还可以用
git log --pretty=oneline --abbrev-commit//找到你要打标签的版本
git tag tagname commit_id // 打上标签
还可以给tag写注释
git tag -a v0.1 -m "version0.1" commit_id //完事
还可以对标签进行删除呀等等操作。不细说了,使用的时候在写。
git暂时就到这里,还有很多很多内容可以参考
点一下玩一年