https://help.coding.net/docs/host/browsing.html
此视频为笔记:
AV24441039
AV98007542
两个视频都各有优点,形成互补,个人感觉git需要学的还很多
此视频内容已全部试验过代码,内附带自己敲写代码
部分由于条件限制没有敲写
本博客非错误问题将不再修改,但作为笔记将不断延伸,新建了一个git仓库进行同步更新:
仓库地址:https://gitee.com/han_shaokang/git_notes.git
协同修改: 多人并行不悖的修改服务器端的同一个文件 数据备份: 不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态 版本管理 在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。这方面SVN采用的是增量式管理的方式,而Git采取了文件系统快照的方式。 权限控制 对团队中参与开发的人员进行权限控制。 对团队外开发者贡献的代码进行审核---git独有 历史记录: 查看修改人,修改时间,修改内容,日志信息。 将本地文件恢复到某一个历史状态 分支管理 允许开发团队在工作中多条生产线同时推进任务,进一步提高效率
大部分在本地完成,不需要联网 完整性保证 尽可能添加数据而不是删除或修改数据 分支操作非常快捷流畅(内部用快照的方式 与Linux命令全面兼容
点击查看git全部命令
https://gitee.com/all-about-git
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。 实现跨区域多人协同开发 追踪和记载一个或者多个文件的历史记录 组织和保护你的源代码和文档 统计工作量 并行开发、提高开发效率 跟踪记录整个软件的开发过程 减轻开发人员的负担,节省时间,同时降低人为错误 简单说就是用于管理多人协同开发项目的技术。 没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。 多人开发必须用要版本控制,否则到时候上线可能导致部分代码不能用
主流版本控制工具:
Git;SVN;CVS;VSS;TFS;Visual Studio Online等等
1.本地版本控制:
本地版本控制系统是通过使用简单的数据库保存文件的所有变更。
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。
2.集中式版本控制系统
有一个包含文件所有修订版本的单一服务器,大家将自己的文件都统一的放在一个服务器多个客户端可以从这个服务器同步更新或上传自己的修改
所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、(多用svn)CVS、VSS,subversion以及perforce
单点故障:服务器宕机,历史数据丢失,只剩下当前用户版本
3、分布式版本控制 Git
避免了单点故障
每个人都拥有全部的代码,所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。
由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
不会因为服务器损坏或者网络问题,造成不能工作的情况!用户可以带着代码跑路了=·=
Git与SVN的主要区别
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。 增量式存储数据,节约服务器空间,只保存有改变的数据,使用时候全部拿出来拼接
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件! 快照流,存储数据,重复的保存成指针指向原来的数据
你git add存在暂存区还可以直接撤销,commit添加到本地库就不行了,需要另外的操作,下面会讲解
工作目录(Working Directory): 工作区,就是你平时存放项目代码的地方 暂存区(Stage/Index): 用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息,用于临时存储 资源库(Repository或Git Directory): 仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本 -- 远程的git仓库(Remote Directory): 如果就可以分为四个工作区域。 托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
本地的三个区域确切的说应该是git仓库中HEAD指向的版本:
Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。 WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。 .git:存放Git管理信息的目录,初始化仓库的时候自动创建。 Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。 Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。 Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。
git底层是哈希算法,利用其特性保证下载来的数据时具有完整性的
哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点: 1.不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。 2.哈希算法确定,输入数据确定,输出数据能够保证不变 3.哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大 4.哈希算法不可逆
下载时候按照自己操作系统下载 1.官网下载:外网下载速度慢 https://git-scm.com/ 2.淘宝镜像下载:推荐 http://npm.taobao.org/mirrors/git-for-windows/
下载方法:
1.官网下载
https://blog.csdn.net/hyacinth_han/article/details/80473762
2.淘宝镜像下载:
跟国内的流氓软件不一样,傻瓜式安装即可,全部next就可以
左边点击开始会出现三个与git有关功能: Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多 Git CMD:Windows风格的命令行 Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令
同时在任何地方点击鼠标右键出现下面界面,点击进入git
原因:
在进行exe文件安装时为你自动配置了环境变量path:D:\work\git\anzhuang\Git\cmd,就和java的jdk一样
git里面可以使用Linux命令
1)、cd : 改变目录。 2)、cd .. : 回退到上一个目录,直接cd进入默认目录 3)、pwd : 显示当前所在的目录路径。 4)、ls(ll): 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。 5)、touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。 6)、rm: 删除一个文件, rm index.js 就会把index.js文件删除。 7)、mkdir: 新建一个目录,就是新建一个文件夹。 8)、rm -r : 删除一个文件夹, rm -r src 删除src目录 9)、mv 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。 10)、reset 重新初始化终端/清屏。 11)、clear 清屏。 快捷键ctrl+L 12)、history 查看命令历史。 13)、help 帮助。 14)、exit 退出。 15)、#表示注释
git配置文件都保存在本地
查看不同级别的配置文件:
查看用户配置 git config -l 相关配置文件位置: 查看系统config git config --system --list 相关配置文件位置:Git\etc\gitconfig :Git 安装目录下的 gitconfig 查看当前用户(global)配置 git config --global --list 相关配置文件位置:C:\Users\Administrator\ .gitconfig 只适用于当前登录用户的配置(必须等你设置用户名邮箱后才会有
设置签名:
签名区分不同开发人员身份 这里设置的东西和登录远程库(代码托管中心)的账号密码没有关系 每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中
项目级别: 仅在当前本地库范围内生效 系统级别: 登录当前操作系统用户范围 优先级: 如果都有则项目级别先生效 不允许二者都没有
设置方法:
打开你的git页面(右键点击Git Bash Here)
二者选一个 项目级别: git config user.name "xiaolang" #名称 git config user.email [email protected] #邮箱 系统用户级别: git config --global user.name "xiaolang" #名称 git config --global user.email [email protected] #邮箱
设置git签名并查看存储信息
71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/openclass (master) $ git config user.name "xiaolang" 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/openclass (master) $ git config user.email [email protected] 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/openclass (master) $ pwd /d/work/git/gitrepository/openclass 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/openclass (master) 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/openclass (master) $ cat .git/config [core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true [remote "origin"] url = https://gitee.com/kuangstudy/openclass.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master [user] name = xiaolang
查看全局的文件:
$ cat ~/.gitconfig [user] name = xiaolang email = [email protected]
初始化仓库
先使用命令初始化一个目录 git init 或者进入一个已有目录 在.git等级目录下使用设置签名
局域网环境下 GitLab服务器 外网环境下: GitHub 码云
代码托管中心:用来维护远程库
1、在工作目录中添加、修改文件; 2、将需要进行版本管理的文件放入暂存区域; 3、将暂存区域的文件提交到git仓库。
已修改(modified) 已暂存(staged) 已提交(committed)
创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。
1、创建全新的仓库,需要用GIT管理的项目的根目录执行:
在当前目录新建一个Git代码库 在自己想要创建的地方(不要有中文字符),右键进入git。 然后执行初始化命令 $ git init
2.执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。
1、是将远程服务器上的仓库完全镜像一份至本地 # 克隆一个项目和它的整个代码历史(版本信息) git clone [url] 如:git clone https://gitee.com/kuangstudy/openclass.git 2、去 gitee 或者 github 上克隆一个测试
图解:
克隆该地址,在自己仓库使用命令:
git clone https://gitee.com/kuangstudy/openclass.git
图中地址:https://gitee.com/kuangstudy/openclass
文件的四种状态: 版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。 Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged. Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件 Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 ! Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
查看文件状态
#查看指定文件状态 git status [filename] #查看所有文件状态 git status # git add . 添加所有文件到暂存区 # git commit -m "消息内容" 提交暂存区中的内容到本地仓库 -m 提交信息
Git是目前世界上最先进的分布式版本控制系统。
Git可以直接看到每次更新了哪些代码和文件
Git是免费、开源的,最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper
多屏控制方式:
空格向下翻页
b 向上翻页
q退出
Linux命令
ll|less ls -lA|less 显示隐藏文件 :set nu 显示行号(在vim编辑器下 i 在vim编辑器下进入编辑 按esc再:wq退出并保存 查看时候如果行数太多就按空格键向下翻 tail -n 3 good.txt 显示该文件最后三行 ctrl+L清屏
Git命令
查看自己分支 git status git add good.txt:将该文件加入到暂存区 git add .:将所有文件加入到暂存区 git rm --cached good.txt:从缓存区移除,重新变为未追踪文件 git commit - m "my message" good.txt 提交时候不进入vim编辑器直接输入提交 git log 查看原来版本 git log --pretty=oneline :以一个漂亮的方式(oneline)去查看原来版本 git log --oneline 哈希值选一部分来显示 只能显示之前的版本 git reflog 显示出到哪个版本需要移动几步(比较好) 显示所有版本 git reset --hard 570984a 回到该版本,570984a为版本的索引值 reset --hard HEAD^ :只能回退版本,^符号一个就回退一个,回退两个就写两个,但是回退很多步就用到下面的命令 git reset --hard HEAD~3 :回退3步,回退几步就写几 reset有三个命令,详情向下翻 git diff a1.txt //查看a1修改后的不同(工作区和暂存区文件的比较) git diff HEAD^ a1.txt //将工作区文件和本地库历史记录比较;不加文件名为比较所有不同的文件 git branch -v //查看分支 git branch hot_fix //创建新的分支hot_fix,名字随便取 git checkout master //切换到分支:master git merge hot_fix //执行合并命令 git push origin mastergit remote add origin https://gitee.com/han_shaokang/myfirst.git git push origin master git remote add test https://gitee.com/han_shaokang/myfirst.git #git remote add 远程仓储名名称唯一即可 远程仓储地址 //推送之前先执行这个起别名的操作 1.git remote -v # 查看关联的所有的远程仓储名称及地址的别名 2.git remote add origin https://gitee.com/han_shaokang/myfirst.git //为该仓库起别名,以后就可以用origin代替这一串地址 git remote #查看所有的远程仓储名称 git clone https://gitee.com/han_shaokang/shangguigu.git //克隆,后面跟仓库地址 pull //fetch+marge git fetch origin master //抓取操作,将远程仓库文件下载下来,但是并没有改变本地区文件 git merge origin/master //将远程分支合并到本地分支
在此之前,你应该先初始化一个仓库,并为其添加必要标识;或者去clone一个新的仓库
$ vim good.txt //创建一个文件 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git status//获取状态 On branch master No commits yet//没有任何提交的东西 Untracked files: (use "git add..." to include in what will be committed)//我可以使用这个命令来提交到暂存区 good.txt//可以提交的文件列表:这里只有一个 nothing added to commit but untracked files present (use "git add" to track)//没有任何东西在暂存区,但是存在未追踪的文件,我为可以按照这个命令去追踪他 $ git add good.txt warning: LF will be replaced by CRLF in good.txt.//这个文件中LF将被替换为CRLF(行末换行符转换方式,在安装时候可以设置 The file will have its original line endings in your working directory $ git status On branch master No commits yet Changes to be committed: (use "git rm --cached ..." to unstage)//这个文件在暂存区,可以使用该命令把文件移除暂存区,将该文件变为未追踪文件 new file: good.txt //提交进入下面页面 $ git commit //之后在vim编辑器下输入自己要输入的信息 //:set nu //i //输入信息 //esc //:wq [master (root-commit) 570984a] my first commit new file is good.txt//我们输入的提交信息 1 file changed, 1 insertion(+)//一个文件修改了,增加了一行 create mode 100644 good.txt
该页面在vim百年及其
# Please enter the commit message for your changes. Lines starting//对于这次修改输入你提交的消息 # with '#' will be ignored, and an empty message aborts the commit. # # On branch master # # Initial commit # # Changes to be committed: # new file: good.txt
修改good.txt文件后
$ vim good.txt 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git status On branch master Changes not staged for commit: (use "git add..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: good.txt no changes added to commit (use "git add" and/or "git commit -a")//你可以add或者直接commit;和新建的时候不一样,新建的时候只能先add,再去commit //简单的提交方式: git commit - m "my message" good.txt
如果太多按空格键向下翻
$ git log commit 4d2558a983caf81ef40a58e63cbb07ec85ccf33e (HEAD -> master)//前面为哈希值,HEAD是一个指针指向当前版本 Author: xiaolang <[email protected]> Date: Wed Jul 22 16:12:09 2020 +0800 skh commit 570984a821f637d326b17d99ec0dcd17f32cc229 Author: xiaolang <[email protected]> Date: Wed Jul 22 15:56:32 2020 +0800//提交时间 my first commit new file is good.txt//提交日志信息
$ git log --pretty=oneline//以一个漂亮的方式(oneline)去查看原来版本 4d2558a983caf81ef40a58e63cbb07ec85ccf33e (HEAD -> master) skh 570984a821f637d326b17d99ec0dcd17f32cc229 my first commit new file is good.txt
本质为HEAD指针的变化
HEAD指针指的是离我们最近的版本
选中hash值系统自动复制
基于索引值操作(推荐 使用^符号 :只能向回退 使用~符号 :
$ git reflog 4d2558a (HEAD -> master) HEAD@{0}: commit: skh 570984a HEAD@{1}: commit (initial): my first commit new file is good.txt 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git reset --hard 570984a//输入其哈希值 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git reset --hard 570984a HEAD is now at 570984a my first commit new file is good.txt //到达该版本
其他回退前进方式: reset --hard HEAD^ :只能回退版本,^符号一个就回退一个,回退两个就写两个,但是回退很多步就用到下面的命令 git reset --hard HEAD~3 :回退3步,回退几步就写几
--soft参数: 仅仅在本地移动HEAD指针 --mixed参数 在本地库移动HEAD指针 重置暂存区 --hard参数 在本地库移动HEAD指针 重置暂存区 重置工作区
--soft 只有本地库指针移动了 soft相当于撤销了commit命令 --mixed 本地库和暂存区都移动了,工作区不移动,就显得工作区内文件移动了一样 相当于撤销了add和commit命令 --hard 一起动
一般是删除提交到本地库里的文件
先创建一个文件
$ vim o.txt 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git add o.txt warning: LF will be replaced by CRLF in o.txt. The file will have its original line endings in your working directory 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git commit -m "abc" o.txt warning: LF will be replaced by CRLF in o.txt. The file will have its original line endings in your working directory [master 84312cb] abc 1 file changed, 1 insertion(+) create mode 100644 o.txt
删除本地库文件
和添加文件差不多
71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ rm o.txt//先提交删除请求,这时候本地就会删除,如果要仓库删除需要去提交该次删除请求 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ ll total 4 -rw-r--r-- 1 71507 197609 10 7月 24 18:27 aaa.txt -rw-r--r-- 1 71507 197609 7 7月 24 18:28 bbb.tx -rw-r--r-- 1 71507 197609 8 7月 24 18:32 ccc.txt -rw-r--r-- 1 71507 197609 42 7月 24 18:22 good.txt drwxr-xr-x 1 71507 197609 0 7月 22 15:12 work1/ 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git status On branch master Changes not staged for commit: (use "git add/rm..." to update what will be committed) (use "git restore ..." to discard changes in working directory) deleted: o.txt no changes added to commit (use "git add" and/or "git commit -a") 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git add .//将删除文件数据添加到暂存区 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git commit -m "sahcnhu a.txt" o.txt//提交删除请求 [master 7d9f01e] sahcnhu a.txt 1 file changed, 1 deletion(-) delete mode 100644 o.txt 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git status On branch master nothing to commit, working tree clean
删除也会进行一次记录
如果想回退则:
$ git reflog 7d9f01e (HEAD -> master) HEAD@{0}: commit: sahcnhu a.txt 84312cb HEAD@{1}: commit: abc 8ee8e35 HEAD@{2}: commit: disanci 6136f32 HEAD@{3}: commit: dierci c481400 HEAD@{4}: commit: 2 4d2558a HEAD@{5}: reset: moving to 4d2558a 570984a HEAD@{6}: reset: moving to 570984a 4d2558a HEAD@{7}: reset: moving to HEAD 4d2558a HEAD@{8}: commit: skh 570984a HEAD@{9}: commit (initial): my first commit new file is good.txt 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git reset --hard 84312cb HEAD is now at 84312cb abc 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git reflog 84312cb (HEAD -> master) HEAD@{0}: reset: moving to 84312cb 7d9f01e HEAD@{1}: commit: sahcnhu a.txt 84312cb (HEAD -> master) HEAD@{2}: commit: abc 8ee8e35 HEAD@{3}: commit: disanci 6136f32 HEAD@{4}: commit: dierci c481400 HEAD@{5}: commit: 2 4d2558a HEAD@{6}: reset: moving to 4d2558a 570984a HEAD@{7}: reset: moving to 570984a 4d2558a HEAD@{8}: reset: moving to HEAD 4d2558a HEAD@{9}: commit: skh 570984a HEAD@{10}: commit (initial): my first commit new file is good.txt
71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ vim a1.txt//修改存到暂存区的文件a1.txt 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git diff a1.txt//查看a1.txt的不同(工作区和暂存区文件的比较)不带文件名比较全部文件 warning: LF will be replaced by CRLF in a1.txt. The file will have its original line endings in your working directory diff --git a/a1.txt b/a1.txt index d1255f2..e237c37 100644 --- a/a1.txt +++ b/a1.txt @@ -1,4 +1,4 @@ aaa -bbb ccc -dddd +d +eeeee //和上一个版本比较;加上文件名指定比较某一个文件,不加则比较全部 $ git diff HEAD^ warning: LF will be replaced by CRLF in a1.txt. The file will have its original line endings in your working directory diff --git a/a1.txt b/a1.txt new file mode 100644 index 0000000..e237c37 --- /dev/null +++ b/a1.txt @@ -0,0 +1,4 @@ +aaa +ccc +d +eeeee diff --git a/a2.txt b/a2.txt new file mode 100644 index 0000000..4c74a9c --- /dev/null +++ b/a2.txt @@ -0,0 +1,4 @@ +aaa +bb +ccc +ddd
本地创建分支并推送到远程库:
https://www.cnblogs.com/silencey/p/10794784.html
分支介绍
使用多条线同时推进多个任务
分支好处: 同时并行开发,提高效率 如果某一分支开发失败不会影响其他分支,减少出错
71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master)//在master分支 $ git status On branch master//现在在主分支上 nothing to commit, working tree clean 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git branch -v//查看分支 * master 727fa3b xiugai a1.txt//只有master一个分支
创建新的分支
71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git branch hot_fix //创建新的分支 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git branch -v //查看分支,有两个 hot_fix 727fa3b xiugai a1.txt * master 727fa3b xiugai a1.txt
切换分支
71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git checkout hot_fix//切换分支 Switched to branch 'hot_fix' 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (hot_fix) $ git branch//查看分支 * hot_fix master
分支合并
1.必须在接收修改(增加新内容)的分支上,如我的hot_fix将bug修复想让master分支生效,那我就要先进入master分支
2.执行合并命令git merge hot_fix
71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (hot_fix) $ git checkout master //切换到主分支 Switched to branch 'master' 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git merge hot_fix //执行合并命令 Updating 727fa3b..e1fda7d Fast-forward a2.txt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
分支冲突
当主分支和其他分支都修改同一个文件时候就会产生分支冲突
svn合并会产生新的文件,git没有
71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master|MERGING): (master|MERGING)表示正处于合并状态
71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (hot_fix) $ git checkout master //切换到主分支 Switched to branch 'master' 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git merge hot_fix //将hot_fix切换到主分支 Auto-merging aaa.txt CONFLICT (content): Merge conflict in aaa.txt//冲突文件名字 Automatic merge failed; fix conflicts and then commit the result. 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master|MERGING)//此时是出于合并状态 $ vim aaa.txt //修改冲文件 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master|MERGING) $ git status On branch master You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Unmerged paths: (use "git add..." to mark resolution) both modified: aaa.txt no changes added to commit (use "git add" and/or "git commit -a") 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master|MERGING) $ git add . //提交 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master|MERGING) $ git commit -m "tijiaofenzhihebing" //这里不可以写提交文件名字 [master f142b93] tijiaofenzhihebing
打开冲突文件
1 <<<<<<< HEAD 2 master 3 master 4 master 5 master 6 =======//前面是HEAD的,下面是hot_fix的 7 hot fix 8 hot fix 9 hot fix 10 hot fix 11 >>>>>>> hot_fix
1.注册账号/完善信息:
去官网注册:
https://gitee.com/signup
申请账号:
完善一下自己的个人信息:
注册完账号可以在界面看到 git大全
2.设置本机绑定SSH公钥,实现免密码登录
免密码登录,码云是远程仓库,我们是平时工作在本地仓库
先进入家目录:
cd ~
再在git页面生成公钥
1. ssh-keygen 2.ssh-keygen -t rsa -C [email protected] -t rsa是加密用的 使用: 进入git页面输入 ssh-keygen -t rsa -C [email protected] 之后一直点确认即可 之后会生成C:\Users\71507\.ssh目录,其中存放一个公钥一个私钥: .pub结尾的文件为公钥 复制到自己的码云上即可 之后起别名 git remote add 别名 仓库地址 之后往仓库放东西: git push 别名 master
3.使用码云创建一个自己的仓库:
许可证:开源是否可以随意转载,开源但是不能商业使用,不能转载,... 限制!
简易的命令行入门教程: Git 全局设置: git config --global user.name "韩少康" git config --global user.email "[email protected]" 创建 git 仓库: mkdir shangguigu cd shangguigu git init touch README.md git add README.md git commit -m "first commit" git remote add origin https://gitee.com/han_shaokang/shangguigu.git git push -u origin master 已有仓库? cd existing_git_repo git remote add origin https://gitee.com/han_shaokang/shangguigu.git git push -u origin master
71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository $ pwd /d/work/git/gitrepository 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository $ mkdir shicao_git 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository $ cd shicao_git/ 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/shicao_git $ git init Initialized empty Git repository in D:/work/git/gitrepository/shicao_git/.git/ 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/shicao_git (master) $ vim first 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/shicao_git (master) $ git add . warning: LF will be replaced by CRLF in first. The file will have its original line endings in your working directory 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/shicao_git (master) $ git commit -m "7yue 25ri" [master (root-commit) 8a0a568] 7yue 25ri 1 file changed, 3 insertions(+) create mode 100644 first 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/shicao_git (master) $ git remote add origin https://gitee.com/han_shaokang/shangguigu.git 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/shicao_git (master) $ git push -u origin master Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Delta compression using up to 16 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 270 bytes | 270.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 remote: Powered by GITEE.COM [GNK-5.0] To https://gitee.com/han_shaokang/shangguigu.git * [new branch] master -> master//本地master分支到网上master Branch 'master' set up to track remote branch 'master' from 'origin'.
//推送之前先执行这个起别名的操作 1.git remote -v # 查看关联的所有的远程仓储名称及地址的别名 2.git remote add origin https://gitee.com/han_shaokang/myfirst.git //为该仓库起别名,以后就可以用origin代替这一串地址
三个效果:
1.完整的远程库下载到本地
2.替我们创建origin远程地址别名
3.初始化本地库
71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/shicao_git (master) $ cd .. //先退出这个目录 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository $ ll total 16 drwxr-xr-x 1 71507 197609 0 7月 20 23:18 openclass/ drwxr-xr-x 1 71507 197609 0 7月 25 21:57 shicao_git/ drwxr-xr-x 1 71507 197609 0 7月 25 00:33 test/ drwxr-xr-x 1 71507 197609 0 7月 25 00:46 test002/ drwxr-xr-x 1 71507 197609 0 7月 21 07:54 下载/ 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository $ mkdir yaoqing_xiaolang //新建一个目录 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository $ cd yaoqing_xiaolang/ //进入目录 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/yaoqing_xiaolang $ git clone https://gitee.com/han_shaokang/shangguigu.git //克隆,后面跟仓库地址 Cloning into 'shangguigu'... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
如果是github会有一个链接可以复制,你复制下来传给要加入的用户,他登录自己github账号后打开这个链接就可以出现加入页面
当
git pull origin master //fetch+marge git fetch origin master //抓取操作,将远程仓库文件下载下来,但是并没有改变本地区文件 git merge origin/master //将远程分支合并到本地分支
下载比较简单,不会产生冲突用pull
上传容易产生冲突使用fetch+marge
71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/shicao_git (master) $ git fetch origin master //抓取远程库 remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 2 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (2/2), 253 bytes | 42.00 KiB/s, done. From https://gitee.com/han_shaokang/shangguigu * branch master -> FETCH_HEAD 8a0a568..f42acf2 master -> origin/master 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/shicao_git (master) $ git checkout master Already on 'master' Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded. (use "git pull" to update your local branch) 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/shicao_git (master) $ git merge origin/master //将远程库合并到本地 Updating 8a0a568..f42acf2 Fast-forward first => first1 | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename first => first1 (100%)
两个人同时更改了一个文件,只有第一个人可以上传上去,第二个会产生冲突,此时第二个人相当于落后第一个人一个版本
此时我们第二个人必须要先拿到最新版本:
git put origin master
此时会进入冲突状态(按照分支冲突进行操作即可
此时使用vim命令编辑冲突文件
然后和分支冲突解决一样了
vim a.txt
git add a.txt
git commit -m "yonghuchonggtu" //这里是不加文件名的提交
git push origin master
https://blog.csdn.net/qq_43615903/article/details/104859402
东方不败是另一个团队,他先复制一个远程库,在其中修改不会影响岳不群的远程库,等开发没问题后,岳不群再进行审核对其进行合并
被拜托方
复制过来仓库地址点击fok
fok后:
之后 git clone 当前fok地址就可以用了
之后项目完成好后给他发过去完成的
先点击pull requests在点击new pull request再点击create pullrequest
之后给其添加标题与内容(之后点击
create pull request
接收方
此时接收方也是点击 pull request
点击merge pull request进行合并
点击confirm merge确认合并
上传:
https://www.cnblogs.com/heike470/p/12490370.html
上传密码出错:
https://blog.csdn.net/weixin_34356555/article/details/92342883
上传出错,原因:gitee上的README.md文件不在本地代码目录中
https://www.cnblogs.com/yiduobaozhiblog1/p/9125465.html
71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) //连接码云仓库,下面链接为仓库链接 $ git remote add origin https://gitee.com/han_shaokang/myfirst.git fatal: remote origin already exists. 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git push origin master //push到远程仓库 To https://gitee.com/han_shaokang/myfirst.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'https://gitee.com/han_shaokang/myfirst.git'//出错,因为没github中的README.md文件不在本地代码目录中 //解决方法https://zhidao.baidu.com/question/520358893388315405.html hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git status On branch master nothing to commit, working tree clean 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master) $ git pull --rebase origin master From https://gitee.com/han_shaokang/myfirst * branch master -> FETCH_HEAD error: could not apply b08ccfa... hot fix Resolve all conflicts manually, mark them as resolved with "git add/rm", then run "git rebase --continue". You can instead skip this commit: run "git rebase --skip". To abort and get back to the state before "git rebase", run "git rebase --abort". Could not apply b08ccfa... hot fix Auto-merging aaa.txt CONFLICT (content): Merge conflict in aaa.txt
扩展:
https://www.cnblogs.com/chenjunjie12321/p/6876220.html
新建一个git本地库
1.New->Team ->Share Project->git 2.点击Use or create repository... 3.选中方框内工程,点击create repository 4.完成
设置本地库范围内签名
忽略文件
调出来Navigator视图可以看到所有要提交的文件,包括隐藏文件
新建忽略文件:
加到目录:
文件
显示+号表示已经被追踪了
显示*号表示已经被暂存了
显示?表示尚未追踪
显示圆柱体表示已经在本地库了
提交:
添加提交信息提交到本地库:
推送到远程库
点击 Add All Branches Spec//将所有分支推送到远程库
点击Finish
执行成功:
Oxygen Eclipse克隆工程操作:(高版本
1.右键import一个工程
2.选择Git里面的Projects from Git
3.下个界面点击Clone URL
4.将仓库地址粘贴过来,输入账号密码
5.更改目录:换成我们经常使用的Eclipse目录,便于管理
6.选择import as general project作为一个普通的工程区导入
7.此时工程已经创建完成。将该工程改为Eclipse能够识别的工程:右键项目->Configure->Convert to Maven Project
Kepler Eclipse克隆工程操作:(低版本
问题:不能保存到Eclipse工作区,不能换目录
上面的第五步保存为Eclipse工作区以外的目录
先pull下来,进入冲突状态,再改文件
点击可以分成两个窗口进行对比,左边窗口可以改,右边只能复制内容
ctrl+shift+3调出界面,先add再commit再push
具体操作:
新建分支hot_fix:Team->Switch To ->New Branch
在hot_fix上修改,之后推送:Team->Reposetory->push to Branch in remote(这时候推送的是hot_fix分支)
另一个人:
pull过来;切换到hot_fix分支:Team->Switch->Other->
点击hot_fix分支,然后点击Check out New Local Branch
合并分支:
切换到master分支:Team->Switch->master
合并:team->merge
这时选择本地hot_fix,因为远程的已经下载到本地了
合并完就可以add,commit,push了
或者不用上面两张图片直接,git init ,其余跟上面一样,也是git add . ;git commit -m " jjjjjj" ; 之后git push -u origin master上传到本地库(前提是开启了ssh验证,且本地有账号密码验证过)
https://www.jianshu.com/p/dd864fcee643
https://www.cnblogs.com/beichenroot/p/11043629.html
操作的基础步骤:
https://blog.csdn.net/jmkweb/article/details/92399772
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等 在主目录下建立".gitignore"文件,此文件有如下规则: 1.忽略文件中的空行或以井号(#)开始的行将会被忽略。 2.可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。 3.如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。 4.如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。 5.如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
#为注释 *.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中! !lib.txt #但lib.txt除外 /temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp build/ #忽略build/目录下的所有文件 doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
解析如何使用
https://www.cnblogs.com/suizhikuo/p/9804864.html
文件本身:
https://www.cnblogs.com/BonnieWss/p/11541748.html
develop的版本要和master保持一致
暂时没有学到,无法总结,原因:电脑
需要在Linux环境下去安装(os7以上
在虚拟机上安装linux操作系统(AV24441039的第57集
安装:https://www.zhihu.com/question/354443004
首页:https://www.about.gitlab.com/
安装说明:https://www.about.gitlab.com/installation/
调整后安装:
ce和ee区别开
1.https://blog.csdn.net/qq_42469247/article/details/90757708
(master|REBASE 13/13)变回master
71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master|REBASE 13/13) $ git rebase --abort 71507@LAPTOP-192F2NTT MINGW64 /d/work/git/gitrepository/test (master)