git

svn:

之前用svn管理项目,svn是集中式管理,客户端只保存最新的版本,不保存历史记录,而中央服务器会保存

所以若中央服务器卡掉,则项目的历史记录就得不到了,项目就不能回滚到以前。

存储的是版本之间的差异,所以回滚到某个版本就慢

git:

简单操作:

git clone http://xxxx/xxxx.git:从远程下载到本地

改动....

git add .:提交的修改到暂存区;

git commit:提交暂存区的所有修改到分支;

git   branch  -M  main:命名分支为mian;

git remote add origin https://github.com/tanzhouxing/medical_static_app_pku.git:给远端的仓库取名为origin

git push origin main : 把 main 分支push到远程主机 origin

第二次用:

git pull origin:把远程的东西更新到本地

 

服务器和客户端都存有历史记录,github就是远端仓库,能把项目放上去让别人操作

存储的是所有版本的完整快照,回滚快

安装,再一直点下一步

 

 

打开:

 

 清屏:clear

 查看版本:

 

 

新建文件夹,假定为项目文件夹,用git管理,在里面右击:

 

 

 

 

 

快捷键:

ctrl+a:光标回到起始 

 用户名邮箱设置,这样在提交时,会记录到log里面,每个commit都对应一个用户名和邮箱(global是给整个计算机一次性设置):

git config --global user.name 'aaa2222339'

git config --global user.email '734331516@qq.com'

删掉全局用户名和邮箱:

git config --global --unset user.name

git config --global --unset user.email

 git config --list :查看已有的配置

删除邮箱账号(若为local):

 

工作区:当前代码所在目录和文件;缓存区:从工作区提交到此,相当于代码修改后的草稿;版本库:从缓存区提交到此,存储最终的版本

git init:建立.git文件夹,里面的不同文件夹代表不同的功能,其中object文件夹即版本库,用于存储

 echo 'asd' > a.txt:把内容输入到a.txt

 vim后,:set nu能够显示行号,:q!强制退出

下图是单纯地生成git对象:

--stdin:读取管道过来的东西

-w:把test content作为value,把它的哈希作为key,以(key,value)的形式存储到.git/object里面,此处的(key,value)被称为git对象

如果没有-w,则不会存储到文件里面,只会返回一个key而已:

 

下图:

通过文件路径找到文件,把文件作为value,它的哈希作为key,-w:则把(key,value)存储进去 

 查看git对象,参数是文件哈希:

 

 

 

 

下图update-index将git对象放到暂存区并给它个名字:

add:将文件放入暂存区,若缓存区已经有记录了,则不用add了

--cacheinfo:去当前数据库(object文件夹)中去找文件;给哈希对应一个文件名

 

 将暂存区的所有东西以树对象的形式写到数据库中,不过暂存区还有内容,不会清空掉,然后-t查看对象类型:

 

 git对象(blob对象)代表文件的一次版本,树对象代表项目的一次版本

 将2个文件add到缓存区,然后生成树对象并写入到数据库中:

 

 

-p看内容,查看树对象:

 

 根据树对象生成对应的提交对象(树对象+一些信息),此时就能附加一些信息,下面-t是查看类型,-p是查看内容:

 

 生成第二个提交对象,此时要指定第二个树对象,和前一个提交对象

 

 

 一个提交对象对应一个项目版本

 git add ./:将当前目录所有修改了的文件生成一个个的git对象,然后放到版本库,最后在放到暂存区

将缓存区的东西生成一个树对象和一个提交对象,并存储到库中:

 

 未跟踪的文件修改,根本不会被统计到git status里面 

git status:查看文件所处状态

staged:已暂存

 先git add之后的文件,如果修改了,还需要再git add进去,才能把最新的暂存起来

git diff:工作区的文件和暂存区的文件相比较,显示差异

git diff --staged:暂存区的文件与提交后的相比较,显示差异

changes to be commited:绿色字体:暂存好了但是未提交状态,接下来要commit

changes not staged for commit红色字体:没有把修改暂存起来,接下要需要add暂存

untracked files:红色字体:未跟踪状态(未暂存),接下来需要add

 git commit后进入一个vim页面,可以写很多message后,接着提交

 

git commit -a -m 'asdasd':跳过暂存阶段,直接提交(前提是跟踪后的文件才行)

rm 文件后,再 git add,再提交:仅仅是对当前没有该文件的状态做了一个新版本,之前有该文件的那个版本还在

 git log:查看所有历史提交对象(项目版本);git log --oneline:简洁形式

git rm 文件:把文件删掉,然后将修改添加到暂存区(git add),后续需要自己commit

 

分支是指向最新提交对象的指针

git branch 分支名字:创建一个分支

git checkout 分支:切换到新的分支,head是一个活动指针,始终=当前分支

git branch:得到所有分支的列表,前面有*的是当前分支

git branch -D 分支名:强制删除分支,但是在删除前需要先切换到别的分支,比如切换到master

查看所有分支图:

 

 给上面这个命令起个别名:

 git branch -v:查看每个分支的最后一次提交对象

 git branch 分支名 提交对象的哈希:针对历史记录中的一个提交对象,新建一个分支指向它,这样再切换分支过去后就能回滚了

 切换分支后,工作目录就会改掉

 git checkout -b aaa:创建一个aaa分支,且切换过去

在切换分支之前,要确保git status是干净的,不存在未跟踪的文件且全部提交了

工作流程:

正在工作时,需要增加一个功能,确保git status 干净后(如果不干净则commit),另开一个分支并切换过去:

git checkout -b iss53

此时又需要解决主分支一个问题,确保干净后切换到主分支:

git checkout master

接下来需要另外建立一个分支来解决问题:

git checkout -b hotfix

解决完之后add ,后commit,然后切换到主分支后,合并hotfix分支

 该合并叫做快进合并(2个分支都在一条线上,把master越过几个版本与前面的合并),此时iss53分支在master后面,因此iss53还有master的bug

 合并之后就可以把hotfix分支删掉:git branch -d hotfix

接下来切回iss53再工作,随后切出来,将它与master分支合并(典型合并:2条线上的合并),此时可能产生冲突

接着看看冲突文件,然后再git add,再commit,最后再删掉iss53分支

工作时,新建分支,写完一个功能就合并删除,然后再新建分支。。

.git/refs/heads保存所有分支,分支就是最新的提交对象的哈希

 .git/HEAD:保存可变指针,它总指向当前的提交对象

若在b1分支上做了改动,此时又要切换到别的分支,但是又不想提交,则可以先把改动存到栈中:git stash,然后git status就OK了,然后就可以切过去

git stash list:看看栈上有哪些保存

 返回b1分支后,需要从栈上拿回东西:git stash apply,然后再删掉栈顶:git stash drop stash@{0},或者直接:git stash pop:拿回并删除栈顶

后悔操作:

若在工作区改动了而没有暂存,若撤回对某个文件的修改则:git checkout -- 文件名

若已经暂存了但是未提交,想撤回不要暂存:git reset 【HEAD】 文件

git reflog:查看最完整的日志,只要HEAD有动,就会记录进去;git log --oneline:只查看主要日志

若已经提交,但是注释写错了,且暂存区都已经提交,则git commit --amend:可以修改注释;若暂存区还有未提交的,则又能改注释,又能改动之前的提交

git commit --amend:本质上head和分支统一退一格指向前一个提交对象,然后再新建一个提交对象,并指向该对象;然而切换分支的时候是只动head

git reset --soft HEAD~:将HEAD和它所指向的分支向后移动一个,但是不会改动工作区和暂存区;将~改为提交对象的哈希,则指向到那个提交对象。

若把上面的soft改成mixed或者去掉soft,则还要改动暂存区;若把soft改成hard,则工作区和暂存区都会变,此时就和checkout很像了,只是分支也动了

一个提交对象对1个树对象,1个树对象对应多个git对象,一个git对象对应1个文件

 

如果丢失了几个提交对象,可以通过git reflog找到对应的提交对象,然后新建一个分支指向它:git branch 分支名 提交对象哈希

 git tag:列出所有的taggit git 

git tag 名字(v1.0):给最新的提交对象打一个tag,该tag就不再动了

git show tag名字:查看某个tag

git tag -d tag名字:删除标签

git tag tag名字 提交对象哈希:给特定的提交对象

git checkout tag名字,再git checkout -b 分支名:切换到某个tag上,同时在tag上建立一个分支

Eslint是一个工具,检测js文件语法是否正确

使用:先在某个文件夹下:npm init(初始化一个简单的package.json文件),然后安装npm install eslint --save-dev

(其中npm -g是全局安装,只是安装包位置不同而已:把模块安装到了C:\Users\Jary\AppData\Roaming\npm\node_modules\

该路径可以通过npm config list中的prefix查看,由于该路径被path指向,所以若npm install -g webpack

则能直接使用webpack命令,若直接c:\123>npm install xxx

则将会安装到当前目录下:c:\123\node_modules\xxx

--save-dev:仅在开发环境中需要,会将模块写入:devDependencies 

--save:开发和生产环境都需要,写入:dependencies 

npm uninstall 模块:删除模块,但不删除模块留在package.json中的对应信息

npm uninstall 模块 --save 删除模块,同时删除模块留在package.json中dependencies下的对应信息

npm uninstall 模块 --save-dev删除模块,同时删除模块留在package.json中devDependencies下的对应信息

为了能用npm run,则配置package.json文件:

 

npm run lint:create生成一个文件,用于提供编码规则,其中:

 

 

 随后在src文件夹下新建一个js文件,并写入一些js语句,然后npm run lint来检测

只要在暂存区的东西, 都提前记录到版本库了

 git branch --merged:查看合并到当前分支的分支列表,若有,则需要删掉它们

git branch --no-merged:查看没有合并过来的分支

 

只要本地分支和远程跟踪分支建立了联系,就能直接git push上去,也能git pull下来;

clone :下载master分支,所有远程跟踪分支,并将master与远程跟踪分支建立联系

模拟2人合作git:

github可以创建远程仓库,可以删除 

新建远程仓库:

 

 因为要用自己的.git文件,所以不要点readme初始化

先创建好本地仓库后,然后git remote为远程仓库在本地取个别名,再查看别名,该别名拥有2个地址:

 

 把master分支推到远程仓库上(push和pull只针对单个分支的操作):

git push 远程仓库别名 master(无需去跟踪),而且push后就会生成远程跟踪分支(红色分支)

 

项目经理邀请成员加入(另一个号是:zhuiguangzhewudi):

 

 复制给成员邀请链接:

 

 成员登录github后,浏览器访问邀请链接就可以了(或者成员那边也有邮箱提示)

成员下载远程仓库到本地:git clone 远程仓库url,此时连.git文件夹也有了,有了master分支,所有远程跟踪分支(由于别名是origin,所以以origin打头)

也将master与远程跟踪分支origin/master建立了联系

接着对master分支做一些改动,commit后再push上去:

git push

然后项目经理更新远程仓库到本地master:

先与远程跟踪分支建立联系:git branch -u 别名/master,然后git pull

新建一个分支b1,改动一下再push上去(git push 别名 b1)

此时产生跟踪分支,然后和跟踪分支建立联系:

git branch -u 别名/b1

下次修改就能直接git push上去了

若不小心删掉b2分支上东西,想通过远程来更新b2:

则删除已有的b2分支,然后新建一个b2分支且切换过去,并与远程跟踪分支建立联系:

git branch -D b2

git checkout --track 别名/b2

删除远程仓库:

到setting里面,然后:

 

 git branch -vv:查看所有跟踪分支

若A用户push了,B用户不能直接push,得先pull到本地,动一动可能的冲突文件,再add,commit,然后就能push了

 若远程仓库已经被更改了,则不能直接push上去,得先自己pull下来,然后才能push上去

 fork可以把别人GitHub仓库复制一份到自己的远程:

然后在本地clone过来改一改,再push过去

在自己的GitHub里面给对方留言:

 

 

 

 别人一登录就会在这个项目里看到:

 

 别人也能在此留言:

 

 自己登陆时,可以看到别人的评论:

 

 别人可以将其合并:

 合并的结果是最后的版本

 

 

 .gitignore:

*:匹配任意多个字符

?:匹配任意一个字符

 

 

 https和ssh是2个协议,使用https时,每次提交都要去看windows凭证来验证用户

ssh:

往GitHub上某个账户添加多个公私钥对(账户),随后这些账户就能无需登录直接访问这个账户了。随后clone的话也是用ssh地址

 

 然后复制id_rsa.pub里面的内容,然后

 

 

 

 

 

posted @ 2020-01-31 19:03  Jary霸  阅读(161)  评论(0编辑  收藏  举报