前言
之前在帮一些师傅弄东西的时候需要直接通过git上传上去 但是有时候总会遇到冲突或一些问题,然后git之前没有真正学过只会那么几个简单的操作,所以每次遇到都要去谷歌 ,蛮麻烦的干脆学一下好了。
快速上手
这几行基本满足普通的上传操作了
初次使用
git init
git本地仓库初始化
git add .
将所有的文件加入到仓库之中
git commit -m "新的仓库"
将add的代码commit到新的仓库里面
在github上进行项目的创建
git remote add origin github的项目链接
将本地的仓库关联到远程到仓库上去(origin是远程仓库的名字默认是origin)
git push -u origin master
将代码上传到远程仓库
合作完成github上代码的更新
git pull
拉取最新的分支
git add .
添加到仓库
git commit -m "说明"
提交更新到缓冲区
git push origin master
推送到github 进行更新
上传了不想上传的信息
首先使用 git log
查看commit_id 并看好要回滚的commit_id
然后使用git reset
进行一个回滚 回滚之前一定要做好备份
git reset --hard (需要恢复到前一个到commit_id)
没有push要进行撤回
来源:https://blog.csdn.net/yhl_jxy/article/details/82846546?depth_1.utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
git reset --hard id
完成撤销,同时将代码恢复到前commit_id 对应的版本,强制回滚到之前的版本。
git reset id
完成撤销,停留在当前版本,不对代码修改进行撤销,可以直接通过git commit重新提交对本地代码的修改。
Git学习笔记
因为git学的比较基础,所以笔记有可能会比较简陋还请各位见谅
git的出生的前因后果我就不说了哈
大家感兴趣的话可以去廖雪峰老师的网站去看看
https://www.liaoxuefeng.com/wiki/896043488029600/896827951938304
git是一个分布式版本控制系统,github呢则是目前最大的git服务器托管商~
创建版本库(初始化)
git的控制都是通过.git来进行实现的,所以我们要现在我们的文件夹中进行git的"初始化"
通过 git init
来初始化我们的仓库,可以看到我们在空的文件夹中初始化了我们的Git仓库
基本结构
从之前的快速上手可以看出来 我们在进行代码的上传需要先进行两步操作
git add .
这里最后的 . 其实就是代表当前的文件夹里的所有文件(这样当我们有多个文件修改的话就不用一一添加了)git commit -m "说明"
最后我们再push到我们的远程仓库,但是这之间是为什么呢?
这里我引用廖雪峰老师的图片。
工作区其实就可以理解为我们本地的这个文件夹,stage就是暂存区,master就是我们的一个分支(分支后面会进行解释)
我们执行add操作其实就是将我们工作区的文件的修改添加到暂存区
然后通过commit命令提交到我们当前的分支
最后我们通过git push origin master
推送到我们的github上 这里的origin就是我们的远程仓库的名字,master就是我们的分支
接下来简单的举一个例子:
我在工作区新创建了一个1.txt文件,然后我们先 git status 查看一下我们的git的状态
很贴心的说出来我们没有提交,我们目前位于的分支,然后提示我们要利用git add建立跟踪
既然都这么说了我们就继续吧!
执行了add命令之后我们已经建立了跟踪,我们的文件已经添加到了暂存区了,所以下一步我们应该要把我们暂存区中的文件提交到我们的当前的分支也就是master
现在我们已经把暂存区中的所有文件都提交到我们的分支了,所以我们暂存区中已经没有文件了,所以git status查看的时候说 无文件提交,干净的工作区
最后我们git push origin master
这样我们简单的流程就走完了
撤销 和删除
在我们正常使用的时候总会遇到这些情况
我们add到暂存区了 但是发现有问题 需要从暂存区进行一个撤回
git reset
命令来取消我们的暂存
下面我们来简单的看一个例子:
可以看到我们通过 git reset 将文件从暂存区取消了
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本
但是可以看到提示 git restore --staged 好像也可以我也来试试
这么一看好像很多命令都可以 ,其实按照提示的命令来好像就可 233
我们已经commit了 但是想撤销
首先我们已经把文件提交到分支上了那么这时候我们想要退回应该如何做呢
这时候我们通过
git reset HEAD~
来进行撤销
从上图不难看出 ,我们通过命令将commit上去的代码撤销掉了
git reset HEAD~ 意思就是退回到上一个最新的commit_id
如果我们已经push上去了应该如何做呢
这样的话我们就需要进行回滚操作了 ,有时候我们有可能一不小心把我们的敏感信息进行上传,但是如果单纯的提交一个新的删除版的话是意义不大的,因为之前的commit_id还是可以看的到的 所以我们需要通过git log来进行回滚
首先我们通过git log
来进行查看
如上图我们相对test进行一个删除回滚
首先我们通过git log查看找到上一个版本对应的commit_id
然后
通过
git reset --hard commit_id(想恢复的那个commit)
然后去github上看就会发现已经没有了
commit之后本地删除文件
我们在commit之后直接将本地的文件进行删除之后会进行提示
这时候我们需要通过 git rm 2.txt 来对暂存区对文件进行删除
想删除远程仓库上的commit记录
这和之前一样我们先git log查看我们的记录 然后我们选择一个需要返回的git 版本号
然后
git reset --hard 之前的commit的版本号
然后
git push --force
远程仓库上就没有了
分支 合并
前面经常说到分支,所以现在来简单的说一下
分支可以理解为时间线 一个分支就是一个时间线,之前的分支都是master 一般情况下 默认 主分支都是master,master上存放着稳定的代码,开发代码则是在分支上进行独立开发 ,还是借用廖雪峰老师的图片
这是我们之前的只有一个分支的情况的图片
所以初始情况下 分支就是一条直的时间线 然后我们可以在创建出我们自己的分支
上图的红色部分就是我们创建的分支 ,dev是我们分支的名字,然后HEAD指向了我们的dev,说明现在我们所在的分支就是dev
然后我们进行新的代码改动之后我们的分支就会向前移动
但是我们最后如何进行合并,我们就把master指到我们dev当前的位置就行了
这里再次推荐廖雪峰老师的git教程:https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424
真的非常的通俗移动
说来说去还是时间操作比较来的直白:
首先可以通过 git branch 来创建分支 git checkout 分支名字 来进行分支的切换
我们也可以使用一条命令 git checkout -b dev
这条命令的效果是等同于上面的两条命令合起来的
然后我们在分支上进行添加文件上传到分支,但是此时的文件是只存在在分支上的 当我们回到master之后这个文件就不在了
所以如果我们要让master也有这个文件的话 我们需要进行分支的合并
我们通过
git merge 需要合并的分支
来进行合并然后合并完之后 我们可以通过
git branch -d 需要删除的分支
来进行分支的删除冲突解决
为什么会引起冲突呢 原因是 你改了这个文件 恰好别人也改了这个文件 然后git无法判断最终要保留哪个更改了 所以会提示冲突
所以我在两个分支里面同时修改了2.txt 并且进行了合并 不出意外 出现了冲突
我们查看这个有冲突的文件可以看到git已经给我们标出冲突的地方了
通过git status可以更加直观的看出来
那么我们接下来要做的就是解决冲突
我们需要人为告诉git 我们要留下哪个
我们通过vim进行修改 来处理冲突
通过
git log --graph --oneline
来查看这里可以看到 我们的分支不再是一条直线了 我们人为进行修改了
Bug修改 存储现场
这个标题适用于这种情况,由于一些原因我进行切换分支去修改,但是当前的分支并没有完成,所以我们不能提交,这时候我们就需要利用
git stash
来将我们的现场储存起来
我们通过git stash保存当前的状态 然后建立一个新的分支去解决问题,解决完问题之后我们再切换回我们的这个分支,然后用 git stash pop来恢复我们之前的储存并且将stash的内容删除 例子如下
总结
最后做一个简单的总结
在我学习过程中感觉常用的进行一个归纳
git init
git 仓库的初始化
git add .
将文件夹下的文件加到暂存区
git commit -m "注释"
将暂存区的文件全部推送到当前分支
git checkout -b 新分支的名字
创建一个新的分支并切换到这个新的分支上
git branch 新分支名字
创建一个新分支但是不会自动切换到新分支上面
git switch 分支名字
切换分支
git checkout 分支名字
切换分支
git merge 需要合并的分支的名字
对分支进行一个合并
git log
git历史的一个查看
git reset --hard commit_id
可以进行git commit_id的回滚
git stash
存储当前分支的进度
git reset
已经做了 add 操作的一个撤回
git reset HEAD~
已经commit 但是没有push的撤回