git
(实际上 git命令 和 TortoiseGIT 是一回事,只是TortoiseGIT把git命令 功能做了一个可视化处理,所以下面 git命令 和 TortoiseGIT实现功能是一样的)
1、如何使用Git上传项目代码到github : 参考 :https://blog.csdn.net/llf369477769/article/details/51917557
git官网下载太慢甚至下载不了的解决方法。在淘宝的镜像网站上下载 : https://npm.taobao.org/mirrors/git-for-windows/
2、Git常用操作 : https://blog.csdn.net/w372426096/article/details/81625446
3、git概念和原理 : https://blog.csdn.net/zguoshuaiiii/article/details/78375997 或 https://www.jianshu.com/p/a31471933fd3(git 有4个空间)
关键概念:工作区(里面的文件也叫 工作副本)、暂存区(也叫 缓冲区)、本地仓库、远程仓库 https://blog.csdn.net/zssureqh/article/details/52564305
4、仓库 / 缓冲区 / 工作副本 :https://blog.csdn.net/zssureqh/article/details/52564305
工作副本是相对于版本仓库而言的,其实就是你本地的工作目录
5、Git图谱:https://www.jianshu.com/p/d3d575799ff3
6、git 分支管理: https://www.cnblogs.com/spec-dog/p/11043371.html 或 https://www.cnblogs.com/kevingrace/p/5691115.html 或 http://www.ruanyifeng.com/blog/2012/07/git.html
常设分支:
a、master【必要】:生产环境的稳定分支,生产环境基于该分支构建。仅用来发布新版本,除了从 release-* 或生产环境Bug修复分支进行merge,不接受任何其它修改。
说明:master 分支 一般都有权限保护的,开发者不可以直接推送到远程仓库。开发者提交合并请求,管理员在远程仓库上进行合并。
master 分支 是不允许回滚的,如果有问题,也是通过 拉 fixbug-* 分支修改。没问题,再合并到master分支【马上上线】 或 release-*分支【延期 上线】。
注意:master 分支 的一定要看成 立即上线的分支。因为master上的代码,自己没有去部署,别人可能 下一刻 部署 就带上去了。
b、develop【必要】:开发分支,日常开发应该在这一条分支上完成。【两人及以上 同时 开发一个项目,就要用到】
说明:1、测试环境部署的代码,如果需要 同时 看 几个人提交的代码。那必须把几个人开发的代码合并到develop分支上,再部署该分支;如果只是看个人开发的代码,只要部署他开发的那个feature分支就可以了。
2、如果每次feature分支开发完,就合并到develop分支,那develop分支就是稳定的分支;
如果 feature 分支开发完,直接合并到pre-release分支了,而没有合并到develop分支。那develop分支就不稳定了,部署develop分支 需要重新合并下。
临时分支:
a、feature:为了开发某个特定功能,从develop分支上面分出来的。开发完成后,要merge到develop分支。功能分支的命名,可以采用feature-*的形式命名(*为任务单号)。
如果develop分支上,其它人开发的功能不上生产,而当前开发的feature分支需要上生产。这时,测试环境直接部署这个feature分支。测试通过 可以直接合并到pre-release分支,可以不用合并到develop分支。
b、fixbug:为了修复某个bug,只能从master分支上分出来。Bug修复分支的命名,可以采用fixbug-*的形式命名(*为bug单号)
说明:fixbug-*分支修补结束以后,再合并进Master【立即上线时】和Develop分支。如果不立即上线,可以合并到release-*分支上。
c、release:发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。预发布分支的命名,可以采用release-*的形式命名。
release-* 合并到Master分支(即,release-*分支代码上线)后,要立即删除 release-*分支。如果release-*分支不准备上线,可以先放在那里。
注意:release 分支 只能从dev分支 或 fixbug 上拉取。
从fixbug分支(不立即上线时)拉取,创建release分支,先保持在那,删除对应的fixbug分支。
从develop分支(dev分支准备上线时,放到release上测试)拉取, release 分支没问题就要合并到master分支。
7、git pull 和 git fetch: (git fetch 会把远程的代码拉倒 本地远程分支上 如,origin/master 这个是 本地的远程分支)。本地的远程分支 都是匿名的,有一个hash值指示的。
默认的 git pull = git fetch + git merge。 这里 git merge 是 将本地对应的远程分支的代码合并到本地的分支。如下图(来自 https://www.jianshu.com/p/a31471933fd3)
8、代码推送后,远端仓库的分支节点,和本地对应分支节点是一样的(本地提交,没有推送的节点,在下一个推送的操作之后,远端仓库的节点就会同步)。即推送的作用是使 远端仓库的提交节点 和 本地一样。
推送没有影响代码,所以不产生提交节点,默认合并过程中会执行一个提交命令,所以会加一个节点。
9、合并分支 删除不了master分支的文件的。例如:master分支有a文件,div分支没有a文件,div分支合并到master分支,master分支的a文件仍然存在。
即,分支合并,只会增加文件,或修改相同文件的代码,不会删除文件。如果想删除某个分支的某个文件,只能在当前分支删除后再推送。
10、git reset 和 git revert。https://www.cnblogs.com/houpeiyong/p/5890748.html
git reset: 修改版本库 、 修改暂存区 或 修改工作区【根据参数不同决定重置哪个区的记录】https://www.jianshu.com/p/c2ec5f06cf1a
1、git reset --hard xxx :hard (修改版本库,修改暂存区,修改工作区)
2、git reset --soft xxx : soft (修改版本库,保留暂存区,保留工作区)
3、git reset xxx: 默认参数 --mixed(修改版本库,修改暂存区,保留工作区)
这里的 xxx 有几个 别名 HEAD^ 或 HEAD~:上一个版本 https://blog.csdn.net/albertsh/article/details/106448035
git revert:用于“反做”某一个版本,以达到撤销该版本的修改的目的。会创建一个新的提交,不会修改原有的提交。
【线上的提交记录是不允许修改的,所以代码push后,想要撤回 一般使用 revert实现】
实际使用:commit 提交后 撤回 ; push 后撤回。
11、远程仓库的回滚(回滚分 几种 情况的): https://blog.csdn.net/qq_36898043/article/details/81461019
第一种情况: 只是在本地commit,还没有push到远程分支。
a、这种情况,使用 reset 或 revert 都可以实现。(推荐使用reset)
第二种情况:代码已经push到远程仓库,可通过以下命令实现
a、这种情况,使用 reset ,本地代码可以回滚。但是本地回滚的代码无法推送上去,因为远程仓库的版本更新。
b、可以使用 revert 进行回滚,但是revert进行回滚不彻底。中间提交了好多次,使用 revert 回滚,只是对指定版本所做的修改进行反向操作,中间的提交还是保留的。(所以 不推荐 revert 进行回滚)
注意:a、远程版本更新,本地代码是推送不上去的。通过reset 回退的仓库,当前的版本可能比远程的版本低,是推送不上去的。
b、git reset 和 git revert 的区别:https://blog.csdn.net/yxlshk/article/details/79944535 或 https://my.oschina.net/u/3412738/blog/1800219(底部内容)
git reset 是删除 指定版本后面所有的提交,而 git revert 是新增一个和指定版本反向操作的代码提交。
c、本人进行回滚操作的方式:使用 reset 获得 回滚需要的代码,删除当前的 .git 目录;在其它目录下重新拉取远程代码,把新的 .git目录,复制到之前回滚代码的目录下。(第一种情况,直接 reset 后就可以推送)
12、让线上代码强制覆盖本地的:https://blog.csdn.net/dengjiao6406/article/details/102304115
git强制覆盖本地命令(分步执行):
git fetch --all git reset --hard origin/master git pull
13、git merge :
14、先 commit 和 先 pull 操作的说明:
a、本地修改的文件,和线上的文件,没有同时修改同一个文件时。 是可以先 git pull的。
如果本地修改的文件,和线上的文件同时修改同一个文件时,git pull 会失败。
b、本地先git commit 再 pull时,总是会产生一个merge提交。即使线上代码和本地代码没有共同修改的文件。只要线上有人提交了代码。git pull 就会生成一个提交。
推荐:先git pull,
15、git config配置:https://www.cnblogs.com/fireporsche/p/9359130.html
在git中,我们使用git config 命令用来配置git的配置文件,git配置级别主要有以下3类:
1、仓库级别 local 【优先级最高】
2、用户级别 global【优先级次之】
3、系统级别 system【优先级最低】
常用全局配置说明: git config --global user.name "My Name" 【设置基本的全局变量】 git config --global user.email "MyEmail@gmail.com" 【设置基本的全局变量】
1、全局设置用户名和邮箱,针对的是 commit 提交时,知道是谁提交的。这个没有设置的话,commit 时就会报错的。【这个不是解决,每次push 都要输入用户密码的问题】
2、如果要实现 每次 push,不需要输入用户名密码,使用 git config --global credential.helper store 命令,只要输入一次。后面就会保存到本地的。
16、git 自带的图形工具有两个: https://www.zhihu.com/zvideo/1251479417017966592
- git gui
- gitk 命令弹出【这个用的比较多】
-----------------------------------------------------------------------------------------------------------------------------------------------------
git扩展知识:
1、执行git push出现"Everything up-to-date" 【git错误提示】: https://www.cnblogs.com/kevingrace/p/6259905.html
2、git 与 svn 对比 : https://www.cnblogs.com/wangpenghui522/p/5556813.html
3、Git 个人学习笔记及心得 参考链接
4、git提交时如何忽略一些文件 : https://www.jianshu.com/p/ade52455c3a4
5、Git关于pull,commit,push的总结 : https://www.cnblogs.com/wnbahmbb/p/6568179.html
6、.gitkeep 文件的作用 :https://www.cnblogs.com/xingzc/p/7896869.html
git是不允许提交一个空的目录到版本库上的,可以在空的文件夹里面建立一个.gitkeep文件,然后就可以提交上去了。(其实只要里面有文件就可以提交上去了)
7、Git 以分支的方式同时管理多个项目:https://blog.csdn.net/putao2062/article/details/80516001 或 https://www.cnblogs.com/huangtailang/p/4748075.html
git checkout --orphan 分支名 # 创建无根分支,该分支没有父分支
8、git 指定 分支,克隆代码: https://blog.csdn.net/Connie1451/article/details/84992915
git clone -b 分支名 仓库地址
9、git 命令可以写成 批处理,这样就不用记git命令,也不容易出错。 https://blog.csdn.net/weixin_42381351/article/details/87369661
.bat 的批处理无法在 git Bash 命令框上运行,所以 使用 .sh 后缀名的批处理文件。
git Bash 命令框 上运行 .sh 批处理文件。 https://www.jb51.net/article/170880.htm
sh .\test.sh
10、操作中遇到到问题:
a、git删除了本地文件 , 并且提交了,但是没push,然后从远端拉代码 , 怎么没有把这个文件拉下来呢? https://segmentfault.com/q/1010000016759971
b、
11、git reflog:https://www.cnblogs.com/chaiyu2002/p/9551621.html
说明:git reflog 是比 git log 更强大的日志。但是一般 用来查看 某个分支是基于哪个分支创建的。
12、Git 骚操作:参考链接
a、Git stash:【使用场景:代码写到一半需要修改一个 bug,但是这个时候也不想提交未写完的代码。就可以使用 stash 功能处理】
-
-
-
- git stash save messge 命令: 将本分支的修改暂存起来。【工作区的修改暂存起来后,工作区的代码恢复到上次提交的代码。即工作区代码恢复到本地仓库的代码,刚才修改的部分暂存到 暂存区了】
- git stash pop 命令: 直接将最近一次 stash 的代码 pop 出来。这时暂存区的代码就会恢复到 工作区。
- 找回清除的 stash 数据:不小心把 stash 中暂存区的数据删除了,也是可以找回来的。这里就不说了。
-
-
b、Cherry-pick:(功能非常实用)
使用场景:1、我们拉取新的分支进行 bug 的修复,那么同样的 bug 在当前分支肯定也是存在的,按照常理来说我们也需要在当前分支进行同样的代码修改,不然后续提交过后,bug 会依然存在。
那么问题来了,同样的代码不想写两遍怎么办?这个时候就可以使用 git 的 cherry-pick 命令,将之前在其他分支的修改重放到当前分支。
2、在某个分支上修改好了代码,突然发现这个分支已经很久不用了。如果把这个分支合并到其它分支肯定是有问题的。可以通过 Cherry-pick 把这次修改的代码,单独摘取出来 放到其它的分支上。
-
-
-
- git cherry-pick <commitHash> 命令: cherry-pick 是从某个 commit(提交) 上摘取 数据。【所以 小乌龟git 上,要在 提交列表 上有这个选项】
-
-
c、
TortoiseGIT(git小乌龟)
1、TortoiseGit安装与使用 : TortoiseGit的使用是基于git(软件)的基础上的。
参考: https://www.cnblogs.com/wupenglei-5/p/8744801.html
TortoiseGit 下载 : https://tortoisegit.org/download/
2、通过TortoiseGIT把本地项目上传到GitHub : 链接地址
注意:puttyken获取鼠标行为来生成密钥。鼠标移动速度越快,密钥生成就越快。(鼠标不动的话是非常慢的) 参考: https://jingyan.baidu.com/article/6c67b1d69134a92787bb1ee3.html
3、github使用ssh密钥的好处与原因 : https://blog.csdn.net/love_fdu_llp/article/details/38752365
4、windows下使用TortoiseGit代替Git命令行操作 : https://www.cnblogs.com/candle806/p/4071656.html
5、GitHub恢复本地被删除的文件 : https://blog.csdn.net/yh_zeng2/article/details/74858283
亲测,本地删除了文件,想要重远端恢复,需要通过checkout(检出)代码。使用pull没有用。
6、github checkout和pull的区别 : https://blog.csdn.net/q5512049/article/details/53509723
如果本地有文件(不包括.git文件夹内),则普通 checkout ,不会恢复文件。需要强制 checkout (覆盖工作树)
7、TortoiseGit同时推送两个远端仓库代码 :https://blog.csdn.net/xinxinsky/article/details/80034530
注:通过克隆的仓库,本地和远端仓库已经建立了联系,所以不需要额外去配置了。
8、解决 两个 根本不相干的 git 库(本地库 和 远端库建立连接):链接地址1 (推荐这个) 或 https://blog.csdn.net/m0_37402140/article/details/72801372
9、git中,一个项目就是一个仓库。所以 git小乌龟 中每个项目中进行设置是有差别的,比如 远端的地址。不同项目是不一样的。
通过 克隆 下来的仓库, 远端设置中会自带克隆下来的地址的,所以不用配置。如果需要添加一个远端地址,就需要在这里在配置一个。
10、小乌龟git 版本分支图 分析:(以下都是自己的理解)
1、下图 显示的都是分支 (包括远端分支和本地分支) 2、三种颜色 分别对应:远端分支(黄色)、本地分支(绿色)、当前分支(红色) 3、箭头表明 分支是从哪里分出来的。 4、每一块上下排序是按照字母排序的,没有意义的。
11、小乌龟git 删除本地分支,远程分支:https://www.jianshu.com/p/e0da2720372a
12、小乌龟git 合并代码:https://blog.csdn.net/li522021642/article/details/80691321
当前 分支是属于被 合并的代码。
13、小乌龟git 中 版本树,如果是全部分支,所有分支的节点都会显示; 如果是某个分支的话,只显示于这个分支有影响的节点。如,未合并的分支节点不显示,合并的分支,影响当前分支代码的节点,就会显示。
这个 主要在这个分支显示上,右键就可以选择显示的节点是全部还是某个分支了。
注意:小乌龟git默认的排序不是以时间来排序的,需要自己设置成git默认的时间排序。版本树中的颜色和信息中对应分支的颜色是不一致的,每一行只有一个节点,显示的分支标签对应在哪个哪个分支上,该分支就是对应的分支。
14、回滚代码 (reset):https://blog.csdn.net/qq_39291929/article/details/100669716
Source Tree
1、sourcetree和Git的使用教程 :https://www.cnblogs.com/fps2tao/p/7825742.html
2、
github / 码云
1、推送代码到码云上的话使用 TortoiseGit 的话,和GitHub一样需要创建 SSH秘钥的(TortoiseGit 软件内置了 puttyken 软件的)。
注意:puttyken获取鼠标行为来生成密钥。鼠标移动速度越快,密钥生成就越快。(鼠标不动的话是非常慢的) 参考: https://jingyan.baidu.com/article/6c67b1d69134a92787bb1ee3.html
2、使用TortoiseGit+码云 管理项目代码 : https://blog.csdn.net/yl2isoft/article/details/53493194
3、git本地项目代码上传至码云远程仓库 : https://blog.csdn.net/fox9916/article/details/78253714?locationNum=5&fps=1 或 https://blog.csdn.net/ts_zxc/article/details/40795225
4、码云上的公钥只能一个有效,github应该也是一样。
5、github如何用浏览器直接打开项目里的html页面 : https://www.cnblogs.com/futai/p/6733358.html
6、github 上 存放软件(使用 release 功能):https://blog.csdn.net/zhangxichao100/article/details/73521765
本地git服务器 GitLab
1、安装及使用 : https://www.cnblogs.com/wintersun/p/3930900.html
发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。