git pull
报错:Please, commit your changes or stash them before you can merge.
,
- 解决1: 放弃本地修改,直接覆盖之,
git reset --hard git pull
- 解决2:
- 首先使用
git stash
,这个命令即把当前工作区的修改藏起来(放到另外一个区域),然后当前工作区看起来就没有修改了,就可以使用git pull- 接着使用
git stash pop
就可以把藏起来的修改,再显示出来
git是一个工具,和svn一样。npm是用来弄node_modules的一个包管理工具。
- 安装:安装git直接点开安装包安装就好了,验证git是否安装成功,再git bush里面输入
git --version
- 配置环境变量:如果不配环境变量的话,在git的客户端是可以使用git的,但是在cmd的终端里面就不能用git命令,所以需要配置。
- (1)找到git安装的bin目录,如
D:\all software\git\Git\bin
- (2)添加到环境变量path的最后,就好了
- (3)现在就可以在cmd这些的客户端里面使用git命令了
- 终端工具:FinalShell 用来进入 nginx 服务器
- 安装git GUI工具:SourceTree 。https://www.sourcetreeapp.com/
- 使用SourceTree处理git pull时候的冲突:即,如果自己本地改了个地方,而版本库里面也改了同一个地方,这时候 git pull 的时候就会冲突,就需要自己手动解决冲突。解决办法如下:
- 1、先拉取(git pull)一下,看看有哪些文件冲突了
- 2、点击贮藏(stash),然后取个名字,把当前的修改贮藏起来
- 3、再进行拉取(git pull),即把版本库的内容拉取到本地来(这个时候是不会有冲突的,因为本地的修改被贮藏了)
- 4、再点击贮藏区的文件,右键应用贮藏,(这时候文件状态那里就会出现贮藏的文件,并且文件前面的图标会变成叹号)
- 5、接着打开vscode,这时候会自动把产生了冲突的文件打开。这时候就可以选择 采用当前修改(即从版本库拉到本地的更改)、采用传入的修改(即从贮藏区拿过来的更改)、保留双方更改(两个都保存)、比较变更
- 6、接着把文件状态里面的文件,标记已解决,标记之后就没有冲突了
- 7、最后,提交暂存区文件,并且将贮藏区的文件删除
注:git命令行窗口中有个master,表示这个是在主分支。要开其它分支,需要用命令来创建。
下面几个代码用来确定git上传到github之后显示的提交者的信息。一般情况,名字和github用户名设置相同。下面两个为安装了git之后必须的配置
设置:
git config --global user.name "tangwanli"
设置:
git config --global user.email "771147315@qq.com"
查看单一信息的话,不加后面的字符串
git config --global user.name
查看git下面所有的配置
git config --list
生成公钥私钥
ssh-keygen -t rsa
. 生成的公钥会在用户目录的.ssh文件夹中(这个公钥主要是把用户本地与github线上绑定),然后把公钥输入到github里面就好了。
git中分为3个区:工作区、暂存区、版本库。工作区不能直接将代码提交到版本库,而必须先存到暂存区,再又暂存区提交到版本库。在暂存区的代码也可以取回工作区。
(1)查看当前工作区和暂存区哪些文件进行了修改,
git status
,这个挺好用的。工作区修改的文件变为红色,暂存区修改的文件变为绿色(2)添加文件到暂存区
git add project/index.js
或者添加所有文件到暂存区git add .
(3)从暂存区提交到版本库
git commit -m "note"
如果后面不加注释,即输入git commit
之后就直接回车,则会进入一个git bush vim编辑器,这个时候只需要按两次大写Z就可以退出。(4)2、3的简写操作
git commit -a -m "note"
这个实际上是添加所有的文件,即git add .(5)查看提交的历史,这个是查看所有人的提交历史
git log
(git reflog
只是查看自己这一个用户的提交历史)输入之后不会显示全部提交历史,按回车就会再一行一行的输出提交的历史。退出git log就按q。后面还可以跟一个-n参数,来固定查看多少条信息。如git log -2
查看最近的两条提交历史。后面跟文件名,查看这个文件的提交历史git log pro/try.js
。查看文件夹 下文件提交历史git log pro/
(6)提交报错husky > pre-commit (node v10.15.3): 这个原因是eslint在commit的时候进行了代码检查,如果代码里面有红线就会报错。解决办法为,在项目根目录,找到文件夹
.git\hooks
,然后删除里面的类型为文件的文件。
(1)工作区和暂存区对比
git diff
.即显示出工作区和暂存区不同的信息。(2)暂存区和版本库对比
git diff --cached
还有一种写法为git diff --staged
效果完全一样.即显示出暂存区和版本库不同的信息。(重)(3)工作区和版本库对比
git diff master
.即显示出工作区和版本库不同的信息。(4)本地版本和fetch下来的线上仓库对比
git diff master origin/master
.直接显示出本地master和线上master的差别。
(重)(1)把文件从暂存区回退到工作区
git reset HEAD
(注:这后面可以不加点,就表示全撤销了。)。撤销单个文件git reset HEAD try.js
。把文件区的版本整个回退到版本库中指定的版本git reset --hard 459a4049c5f050b0f03b721
。459a4049c5f050b0f03b721
为commit id。也可以用HEAD指针来操作git reset --hard HEAD^
注:HEAD为版本库中的一个指针,指向版本库的最顶层。HEAD^为指针向上移一位。HEAD~n表示指针向上移动n位(n取1,2,3,4…)。
(重)(2)把文件从工作区回退到版本库
git checkout -- try.js
.即,摧毁工作区当中的那个文件,回退到版本库中那个。把指定文件回退到指定版本库中文件,可用git checkout 459a4049c5f050b0f03b721 try.js
.即回退到459a4049c5f050b0f03b721
这个版本时候的try.js
文件.459a4049c5f050b0f03b721
是用git log查看出来的commit后面的id中的一部分。注:–后面不跟参数而跟空格,表示后面的是一个文件路径,是为了避免歧义。
(3)在一次commit了之后,把文件提交到了版本库,这个时候就会产生一条log注释。如果要修改这条log注释就输入
git commit -m "change the note" --amend
。并且,如果还想要提交文件,和上一次commit的文件一起共享一条注释,则先提交另外的文件,即git add try.html
,再用刚刚的修改注释命令git commit -m "change the note" --amend
。(4)查看自己这个账号对于当前版本库的提交历史
git reflog
(git log
是查看所有人的提交历史)。运行这个命令就会弹出从clone仓库开始,到现在所进行的所有关于版本库的操作(不包括add)。在每一个操作的前面都会有commit id。用这个commit id就可以回到任何版本。
(1)只有暂存区有的文件,把暂存区的删掉
git rm try.js
。但是,如果文件在文件区没有被删除,那么这个命令会报错。(2)文件区和暂存区都有的文件,把两个都删掉
git rm -f try.js
(3)文件区和暂存区都有的文件,只删掉暂存区
git rm --cached try.js
(1)克隆远程仓库
git clone git@github.com:tangwanli/my-projects.git
(2)查看远程仓库名字
git remote
。git remote -v
可以查看远程仓库的地址。(3)修改远程仓库地址:用
git remote origin set-url [url]
可以修改远程仓库的地址(最后的url是新地址)。删除远程仓库地址git remote origin set-url [url]
。新增一个远程仓库地址git remote add origin [url]
。先删除再新增也是一个修改远程仓库地址的方法(4)提交操作
git push origin master
,origin为远程仓库的名字、master为主分支。如果,要提交到其他分支,则先切换到那个分支(比如new1),然后git push origin new1
。
(1)从远程仓库拉取过来,但是并不和本地仓库合并
git fetch
.再用git diff master origin/master
查看差别。最后,用git merge origin/master
进行线上仓库和本地仓库的融合。(2)从远程仓库拉取过来,并且和本地仓库合并
git pull
.
一个分支就相当于一个版本,每个人在自己的分支下面操作。
(重)(1)查看所有的分支
git branch
。直接在这后面加个名字就可以创建分支,如git branch new1
,就创建了一个叫new1的分支。注:master与new1也是指针,指向最后的那个版本。
(重)(2)切换到分支
git checkout new1
。即,切换到了new1这个分支上了。快速创建并切换到分支git checkout -b new2
,就创建了一个new2分支,并且切换到了new2分支上。(重)(3)上传(新建)分支到github: 这个就需要先切换到需要上传(新建)的分支,再
git push origin new1
。(4)查看当前分支下合并了哪些分支,先切换到当前分支,再
git branch --merged
。查看有哪些分支还没有合并在当前分支上git branch --no-merged
(5)分支修改了文件,然后把分支合并到主分支上。先切换到主分支,然后
git merge new1
。如果分支文件和主分支文件有冲突,即,两个文件修改了同一个地方,是不能直接合并的,这时候用git status可以查看冲突的位置,然后需要我们去手动修改文件,才能合并。(6)删除分支。删除分支需要输入两个命令。第一个,删除github上面的分支
git push origin :new1
(不加这个的话只会删除本地的分支,github上面不会有反应)。第二个,删除本地的分支,如果,new1合并在主分支上了git branch -d new1
。如果new1没有合并在主分支上git branch -D new1
(不删除本地分支的话,即使删除了github上面的分支,自己这里还是可以访问到分支)。(7)拉取服务器上的所有分支,
git fetch
。如果本地有一些分支没有的话,用这个命令就可以把分支拉下来
注:创建标签即,给自己的仓库打一个版本。
(1)查看标签
git tag
。创建标签,也是直接加名字git tag v1.0
(2)提交标签
git push origin v1.0
,如果,创建了标签(名字为v1.0)
为了方便分离管理,有时候需要在一个大的git仓库(以下简称主系统)里面clone另外的一个子git仓库(一下检查子系统)
- (1)克隆两个系统:具体的操作就是,先clone主系统,然后在主系统的对应目录下面clone子系统
- (2)代码提交:如果像上面那样clone的话。提交主系统代码的时候,是不会把子系统的代码一起提交到上面的,但是在git命令行窗口会提示子系统修改了多少行代码。提交子系统代码,需要到子系统的目录进行提交
- (3)再次克隆主系统:像上面那样提交了之后,如果再次克隆主系统,那么子系统对应的文件夹依然是不会出现的。
进入仓库,点击setting再点击collaborators。接下来输入被邀请人的信息就ok了。
- fork相当于是把别人的开源项目开了一个分支,到自己github里面,即相当于别人那个仓库就是母仓库(上游仓库),而自己的仓库就是子仓库。那么,现在就有两个问题,第一个是实现上游仓库和自己fork子仓库的同步(因为fork到自己github里面就是一个固定的了,他上游仓库改变自己这里是肯定不会自动改变的),第二个是提交资源上游仓库上面去(因为自己提交资源,即push操作,是提交到自己的github仓库里面去的,而不是提交到上游仓库上面去的)
- 实现上游仓库和自己fork子仓库的同步:
- (1)在github里面点击
new pull request
,这时候页面上就有一个base repository
,还一个head repository
,- (2)就把
base repository
(这个即最后合并的目标仓库,即底部,被压在下面的)选择为自己的仓库,- (3)选择之后他就会跳转,这时候点上面的那个
compare across forks
,- (4)又把
head repository
(这个就是最后合并的源仓库,即头部,被放在上面的)选择为上游仓库地址;- (5)再点击create pull request就好了。
- 注:如果是把资源提交到上游仓库上面去,那么还是用上面的那个方法,不过就是把
base repository
和head repository
值互换一下就好了
github上面可以直接创建分支。直接点那个branch,然后输入名字,确定就创建了。
github上面可以直接创建标签。直接点那个releases,然后创建就好了。
我们一般都是创建的个人仓库,但是也可以创建组织(组织,即多人开发的一个页面,可以创建多个仓库,可以邀请很多人协同开发。)。直接点new organization,然后就可以创建。
github上面创建博客,就直接是创建一个仓库,然后仓库的名字叫
tanwanli.github.io
.tangwanli为你github的名字。然后,就可以往这个仓库放东西了。
以前的话,在github静态页面的URL前面加上http://htmlpreview.github.io/?就好了,现在好像没办法了
- (1)GitHub Trend 页面总结了每天/每周/每月周期的热门 Repositories 和 Developers,你可以看到在某个周期处于热门状态的开发项目和开发者。而 GitHub Topic 展示了最新和最流行的讨论主题,在这里你不仅能够看到开发项目,还能看到更多非开发技术的讨论主题,比如 Job、Chrome 浏览器等
- (2)搜项目
- Awesome + 关键字: Awesome 似乎已经成为不少 GitHub 项目喜爱的命名之一
- 设置搜索条件: 灵活运用下面几个搜索条件:
stars:、language:、forks
,如,输入stars:>=500 language:javascript
,得到的结果 就是收藏大于和等于 500 的 javascript 项目,排名前列是开源代码库和课程项目 freeCodeCamp、大热门的 Vue 和 React 项目- 设置搜索关键字的位置: 根据关键字的位置来搜索项目
- qt in:name:表示在项目名称中搜索 qt 关键字
- qt in:readme:表示在项目readme中搜索 qt 关键字
- qt in:description:表示在 项目描述中搜索 qt 关键字
- qt in:USERNAME:表示在USERNAME中搜索 qt 关键字
- qt in:ORGNAME:表示在组织或机构名中搜索 qt 关键字
- 直接输入关键字模糊搜索:直接在输入框中输入关键字进行模糊搜索的话,github查找到的资源是仓库名字或者仓库描述 中出现对应关键字的资源,比如
vue.js的点餐系统
- 如果想用多个关键字,则可以把关键字用OR(必须大写)来进行连接,如
CollectionView OR UICollectionView OR collection
- (3)搜开发者: 我们可以通过一些限定条件来搜索开发者
location:china
:匹配用户填写的地址在chinalanguage:C++
:匹配开发语言为c++的开发者follwers:>=1000
:匹配拥有1000名关注者的开发者jack in:fullname
:匹配用户实名为jack的开发者
TortoiseGit是一个开放的GIT版本控制系统的源客户端,只支持Windows 系统
SVN实际上和git是差不多的
TortoiseSVN 是 操作 SVN 版本控制系统的一个 客户端 工具
- 使用方法:
- <1>检出:首先进入TortoiseSVN客户端,把对应的文件夹检出到本地(这步就和git clone差不多)
- <2>修改:修改之前需要先在本地进行锁定,然后进行修改,修改完了之后解除锁定(锁定就是在锁定期间别人不能修改这个文件,在TortoiseSVN上面也会有一个锁定状态)。最后本地右键提交。
- <3>更新:右键更新。SVN里面的更新就和git pull差不多的。
- SVN代码merge:操作实际上很简单。比如 我们要把 分支 branch 合并到主线 main
- 首先打开 分支代码 branch,然后 show log,找到 自己要合并的那些提交记录
- 选中提交记录,右键点击 merge,然后 在弹出框里面选中 主线的 main文件夹
- 点击确定 就好了
- SVN 代码暂存(Shelve): 代码写到一半,还不能提交代码,但需要紧急修复一个 Bug 并更新到服务器怎么办?把写到一半的代码丢弃?复制出来备份下?SVN的代码暂存是更好的选择。
本文为你讲解在 Windows 上,使用 TortoiseSVN 如何利用代码暂存功能保存我们暂时无法提交的代码
- 存入:使用 TortoiseSVN 非常方便,在目录下右键,选择 TortoiseSVN –> Shelve 就可以看到如下图,
上面部分是选择需要暂存的文件,中间是暂存的名字,以便后面恢复时明白存的是什么内容,
底部是填写暂存的描述信息,跟提交日志是一样的。如果点击 Shelve 则会把选中的文件都暂存起来,并且把本地的修改全部撤销。这时候,就可以把其它地方的代码合到现在这个分支里面去了- 取出:其它的代码合入现在分支之后,就可以取出之前暂存的代码。取出也非常方便,在目录下右键,选择 TortoiseSVN –> Unshelve,我们可以选择取出哪个暂存代码。
- 注:实际上,暂存就好像把代码提交到了你本地的一个临时仓库,也是有版本管理的,
如果你暂存时名字是选择一个已经存在的,则会生成一个新的版本号,跟 SVN 的代码提交是一样的。- 如果合入的时候报错了,那么对应的错误 也会在vscode中展示出来,只需要在vscode中应用变更之后;在报错的弹出框里面取消就好了。每次报错都会中止合入,所以改了错误之后需要重新再点击合入,来合入后续的代码,直到不报错为止;取消暂存也是一样的道理,报错解决了之后,要再次点击取消暂存
这东西是用来比较文件的,可以 配合 tortoiseSVN 来进行 文件版本回退的时候,多个文件夹的比较操作
下载与破解:这东西好像是要进行破解的,需要输入激活码,然后才可以使用
- 配合 TortoiseSVN 使用:
- 选中 对应的有SVN版本控制的文件,右键 -> TortoiseSVN -> 设置 -> 差异查看器 -> 选择最上面的 设置用来比较不同版本文件的程序,选择为 外部,文件选择为 Beyond Compare 3 对应安装路径的 .exe 文件。
- 使用Beyond Compare来进行文件比较:这个 可以选中多个文件夹 进行比较,然后就可以直接修改对应的部分,版本回退 操作如下
- (1)确定文件夹:找到 需要比较的文件夹,即需要进行回退的文件夹
- (2)复制new文件夹:复制目标文件夹,在文件夹后面加上一个 new
- (3)查看日志:选中目标文件夹,右键 TortoiseSVN -> 显示日志
- (4)回退版本:从日志中,找到 需要回退到的版本(当前文件夹修改之前的版本),右键 -> 复原到此版本。(这时候目标文件夹,就为选中的日志的版本来)
- (5)复制old文件夹:复制目标文件夹,在文件夹后面加上一个 old
- (6)回到最新版本:依然从日志中进行操作,把目标文件夹,复原到 日志中最新的那个版本
- (7)选中并比较:同时选中 目标文件夹 和 old 文件夹,右键 比较,就会出现 Beyond Compare 的客户端。在这个客户端里面 通过小箭头点击,就可以把对应的代码进行移动,然后 保存,也就保存到了本地的文件中了