你这一手 《Git 玩的冒烟》我的第一篇倔文

225 阅读10分钟

开局之前,送君一段话:如果你想学一门新技术,如果你想要读一本书,如果你是大学生,如果>>>...,为什么?问过自己吗?为什么不会,何妨不如说自己没有认真.

15辍学21岁在网吧做网管,27岁相亲,我喜欢你?就像你不确定她对我的说我喜欢你一样,30岁你有了孩子,体会到了父母的艰辛,你不敢休息一天,拼命的工作,甚至生病选择了硬抗,70岁怀念呕心沥血的父母,时常反思,将全部的溺爱宠于自己的孙子上,怕他走你走过的路,那种一眼望到死的生活不是我们想要的...作为22世纪生在红旗下,沐浴在逆风者的大树下,看过长津湖就会明白什么叫做....毅力

培养自己专注力,就一动不动盯着30分钟,思路跟上,在你困 在你感觉坚持不住的时候,你闭上眼睛,现在想一想,现在是2061年的九月份,你已经七八十岁了,在一个空荡荡的房间,臃肿老态,没钱没权,生活不能自理,这时,你对神仙许了一个心愿说,时间可以倒流吗,神说好,于是你睁开眼睛回到2022年的2月份,这一次你还不打算努力吗?

将前辈的话放在心里,虚心接受任何人的建议,但人无完人总会有瑕疵,总结出自己的逻辑思维!将其说过的话聊过的坑至少记住98%,你还学不会吗?我不是前辈,更不是老师!我是一只前端奔跑的程序猿,我在努力成为一位优秀的大全栈,可能永远不会实现,但我不会放弃,没有梦想,没有目标,你和boos谈理想吗,他拿什么激励你?

好了记录下git吧一直再用,有些命令页忘记了,可以自己看看,将其分享出来

世界上有一条很长很美的路,叫做梦想 

工作区-->暂存区-->本地仓库--》远程仓库

此工作流程犹如两军对垒,交火必然不会在自己城堡中,首先指挥官派出将士到瓮城做好准备,

敌方同样如此,最终在战场区域,厮杀,

此时此刻我想吟诗一手

疆场厮杀硬碰硬,未想兵戈出真情,你我本为同手足,别再卷了行不行?

肯定是不行。。。

想必看完图文并茂的寓意,应该懂得了此工作流程非常重要!!! 是的,很重要,在我们工作中,git或svn,是必一个的,推荐git,它是什么可以断网开发.分布式版本管理工具,Git是一个版本管理控制系统(缩写VCS),它可以在任何时间点,将文档的状态作为更新记录保存起来,也可以在任何时间点,将更新记录恢复回来。 svn则是集中式版本状态管理工具

git与svn区别

git

1.git是分布式的scm,svn是集中式的。(最核心)

2.git是每个历史版本都存储完整的文件,便于恢复,svn是存储差异文件,历史版本不可恢 复。(核心)

3.git可离线完成大部分操作,svn则不能。

4.git有着更优雅的分支和合并实现。

5.git有着更强的撤销修改和修改历史版本的能力

6.git速度更快,效率更高。

7.Git分支廉价,SVN分支昂贵,Git 分支是指针指向某次提交,而 SVN 分支是拷贝的目录。这个特性使 Git 的分支切换非常迅速,且创建成本非常低。

而且 Git 有本地分支,SVN 无本地分支。在实际开发过程中,经常会遇到有些代码没写完,但是需紧急处理其他问题,若我们使用 Git,便可以git stash 存储临时改动就可以将临时写的代码存起来,等做完着急处理的工作可以使用git stash pop恢复改动。。。

基于以上区别,git有了很明显的优势,特别在于它具有的本地仓库。\

svn

  • 集中管理都有一个服务器,用来保存文件,协作开发者需要通过客户端连到这台服务器,进行协作开发(更新、提交)

Subversion的特点

在易用性这方面,SVN 会好得多,简单易上手,对新手很友好。但是从另外一方面看,Git 命令多意味着功能多,若我们能掌握大部分 Git 的功能,体会到其中的奥妙,会发现再也回不去 SVN 的时代了。

git命令

1 git init 初始化git仓库 (mac中Command+Shift+. 可以显示隐藏文件)

如果初始化之后看不到.git 文件夹则可以通过 ls -ah查看 
也可以通过命令 attrib -r -h .git 将隐藏的.git文件显示出来

2 git status 查看文件状态

3 git commit -m "对本次修改的具体描述"

查看操作

1git log查询日志的命令
2git log --pretty=oneline美化日志格式的命令 日志会显示在一行
3git reflog查看之前所有日志 例如关闭了明天再打开

分支操作

注意:切换分支需要先提交到暂存区,不然切换不过去的

1git branch查看本地分支
2git branch -r查看远程分支
3git branch -a查看所有分支(本地+远程)
4git branch branchname创建分支(本地)
5git checkout branchname切换分支(本地)
6git checkout -b branchname创建并切换分支(本地)
7git branch -d branchname删除本地分支(注意,如果当前在该分支,必须先切到其他分支,再删除该分支)
8git branch -D branchname强制删除本地分支(适用于用 git branch -d 删除报:the branch XXX is not fully merged(分支有未合并的更改) 时,想强制删除分支的情况)

提交操作

@活在风浪里 1334132303@qq.com

1git add 提交单独文件
2git add .将所有修改添加到暂存区
3git commit -m "commit msg"提交信息描述

撤销

1git reset HEAD file从暂存区撤回,执行 git add . 这个操作后,后悔了,想回到这个操作之前的状态
2git checkout -- file可撤销工作区文件的修改
3git reset --hard HEAD^[ 回退到上一个版本 ] 回退上一版本
4git reset --hard HEAD^^[ 回退到上二个版本 (以此类推)]
5git reset --hard HEAD~2[ 回退到上二个版本 (以此类推)]
6git reset --hard id已经提交本地仓库撤回到暂存区 [ 根据id撤回具体版本 ]
7git push origin test --force撤回远程仓库的提交

撤销的两种情况

git log 查询出有若干次提交,commit id 由近到远为(id4 , id3, id2, id1) ,然后使用git reset --hard 将版本回退到commit id 为id2的版本,这时突然后悔了,想要再回到id3或者id4的版本

有两种情况:

(1)id3或id4的更改已经push到远程

这种情况下,即使终端被关闭了,也是可以从远程仓库查到id3、id4的commit id, 然后直接执行git reset --hard <id3/id4>即可。

(2)id3或id4的更改未push到远程

这种情况下,如果你在之前执行过git log的话(且终端没有被关闭),终端会有id3、id4的commit id记录,找到后执行git reset --hard <id3/id4>即可。但如果之前没有执行git log ,那么由于执行了git reset --hard ,id3和id4的commit id 就无法通过git log 查到了,那么应该怎么办呢? git 提供了一个git reflog可以查询之前的执行过的命令。

下载git、

第一步:下载git工具,git下载,选择适合自己的版本进行安装。

第二步:安装完成后,鼠标右键找到Git bash,双击打开。

多人协作开发

1、首先,你需要在远程仓库创建一个新的项目(github、gitee或是你自己的远程服务器),这个新的项目默认会有一个主分支 master,现在你需要新建一个 dev 分支,这个dev分支就是所谓的主战场,在以后的开发中,就在这个dev以及dev下的分支进行开发。

2、然后使用git命令git clone到一个空的文件夹

3、克隆下来的这个项目相当于你在远程创建的那个项目的镜像,所以现在你本地的项目里也有个dev分支,当然也有master分支,现在切换到dev分支 git checkout dev

4、现在就可以在这个dev分支上新建自己的分支愉快的开发了,命令 git checkout -b dev1

5、由于是多人开发,另一个人也可以以同样的方式(经历2、3、4步骤后)新建一个自己的分支dev2 命令git checkout -b dev2

6、在dev1 或 dev2 开发完成后,需要提交到本地仓库,在dev1分支下使用命令 git add . 和 git commit -a -m ‘commit msg’

7、提交完之后,需要汇总到dev分支上,先切回dev分支,命令git checkout dev,这个时候是没有你在dev1上修改或添加的东西的,需要合并之后才会有;

8、合并 在dev分支下使用命令 git merge dev1

现在就可以在dev分支下看到你在dev1分支下修改的东西了

9、提交 合并到dev分支之后就是提交到远程仓库的dev分支,可以先看一下现在都有什么分支,命令 git branch -a

10、提交到远程dev 命令 git push origin dev

11、现在远程仓库的dev分支上已经是最新的代码了;最后再把远程的dev分支合并到远程的master主分支上就可以了。一般主分支主要是存放比较稳定版本的版本,dev分支才是最活跃的。

图形事例

http与ssh

https需要输入用户名和密码网址开头https ssh配置公钥不需要 网址开头git@github

冲突概念

当然还有在父分支合并子分支的时候如果A B子分支同时修改了,相同地方,git会提示冲突,此行为需人为解决冲突,达到理想效果,

临时保存修改 不建议无意义的提交本地仓库所以需要临时保存修改

临时更改保存可以这样理解,假如有一个急活可以先暂时保存,去做急活,git stash 存储临时改动就可以将临时写的代码存起来,等做完着急处理的工作可以使用git stash pop恢复改动,

推送方式

第一种:
git push '远程地址' 分支名
//推送不上去 远程仓库里有别人的东西,需要先拉取在推送
git pull '远程仓库' 分支名

采用第二种推送方式:
1.如果远程仓库有内容,要先拉取最新代码 git pull '远程地址' master||main //在github线上建仓库默认为main主分支
2.推送 git push '远程地址' master||main
3.起别名 git remote add origin '远程仓库' //可以理解为将远程地址赋值给origin
3.1如果报错 remote origin already origin //说已经存在缓存
注意:使用 git 清除远程仓库地址等信息
git remote rm origin
git remote add origin '远程地址'

4. 再次推送 git push -u origin master //-u记住推送地址以及分支,下次直接用git push推送不需要每次将远程地址填上了,也不需要指定分支了,应为-u是记住推送地址以及分支

克隆仓库
克隆远端数据仓库到本地:git clone 仓库地址
拉取远程仓库中最新的版本:git pull 远程仓库地址 分支名称\

组长可以有两种方式添加组员

邀请别人成为当前项目的开发者,别人就可以向公共仓库推送代码,不是开发者只有克隆权限不能推送

第一种:

进入github仓库---> settings---->Manage access----->第一次添加会弹出密码输入框------>Invite a collaborator (输入你邀请的B程序员github账号)----> 发送邀请------>B程序员登陆邮箱接受邀请------B程序员可以向仓库推送代码

第二种:

将组员的公钥添加到组长的公钥

忽略清单 假如不推送node_modules

创建.gitignore文件

  1. 点击项目文件,右键选择Git Bash进入命令行,输入touch .gitignore,生成.gitignore文件。
  2. 在生成的.gitignore文件里输入你要忽略的文件件及其文件即可。

配置规则:

以斜杠“/”开头表示目录; 以星号“*”通配多个字符; 以问号“?”通配单个字符; 以方括号“[]”包含单个字符的匹配列表; 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录。 git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效。

# dependencies  npm包文件
/node_modules/

# 过滤所有.zip文件
*.zip

# 过滤某个具体文件
/cc/a.css

# production  打包文件
/build/

\