git
一、GIT介绍
1、什么是GIT?
Git是一个免费、开源的版本控制软件
2、什么是版本控制系统?
版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况得系统。
- 系统具体功能
记录文件的所有历史变化
随时可恢复到任何一个历史状态
多人协作开发或修改
错误恢复
版本控制的工具:
- svn
- git :软件帮助使用者进行版本的管理
3、什么是Github
Github是全球最大的社交编程及代码托管网站(https://github.com/)。
Github可以托管各种git库,并提供一个web界面(用户名.github.io/仓库名)
4、 Github和Git是什么关系
Git是版本控制软件
Github是项目代码托管的平台,借助git来管理项目代码
二、git操作命令
# 基本操作 git init #初始化 git add 文件名 #提交单个文件 git add . #提交所有文件 git commit -m "注释" #提交注释 git status #状态 git ls-tree head #查看版本中所有文件 git ls-files -s #查看暂存区和版本中所有文件 git log #查看日志 git reflog #查看所有日志 # 配置用户信息 git config --local user.name '名称' git config --local user.email '邮箱' # stash 将修改过(未commit)的内容临时保存到一个某个地方,并开始对原内容进行修改。 git stash # 将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态 git stash list # 查看“某个地方”存储的所有记录 git stash clear # 清空“某个地方” git stash pop # 将第一个记录从“某个地方”重新拿到工作区(可能有冲突) git stash apply # 编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) git stash drop # 编号,删除指定编号的记录 # branch 分支,默认有一个master分支 git branch # 查看所有分支 git checkout 分支名称 #切换分支 git branch 分支名称 # 创建分支 git branch -m 分支名称 # 创建并切换到指定分支 git branch -d 分支名称 # 删除分支 git merge 分支名称 # 将指定分支合并到当前分支 # 回滚(可见图) git log #通过日志,查看版本号 git reset --soft 版本号 # 分支回退到暂存区 git reset --head 文件 # 暂存区回退到修改过的内容 git reset --mix 版本号 # 默认等于git reset --mix 版本号,分支回退到修改过的内容 git reset --hard 版本号 # 分支回退到原内容 # 查看所有日志回滚 git reflog git reset --head 2b349bf # 远程仓库 git clone https://github.com/fat39/Experiment.git git remote add origin https://github.com/fat39/Experiment.git git push origin master # 推送master到github git push -u origin master # 第一次push的时候要- u git branch -a # 用-a查看所有分区 git branch dev origin/dev # 拉远程分支的代码 git remote -v # 查看远程origin git remote rm origin # 删除远程origin git remote add origin https://github.com/fat39/Experiment.git rm -rf +文件夹名次 删除本地文件夹 git rm -rf audit/migrations/ # 删除远程仓库的某文件夹 删除后,把该路径放在.gitignore文件中 $ mypy audit/migirations/
untrack某文件
git update-index --assume-unchanged xxx_file
# fetch
git fetch origin 远程分支:本地分支 # 本地没有该分支时,拉取远程分支并新建一个同名分支
// 后面补充
github删除某个文件 git rm -r --cached target_file_or_dir
.gitignore
# Binaries for programs and plugins *.exe *.exe~ *.dll *.so *.dylib # Test binary, build with `go test -c` *.test # Output of the go coverage tool, specifically when used with LiteIDE *.out bin logs .idea docker-compose.local.yml docker-compose.local.yml* Dockerfile.local Makefile.local pkg 以下是仅仅上传py/txt/json文件 *.* !*.py !*.txt !*.json
补充:
#不能排除没有后续名的
#*.*
#!*.a
# 排除所有包括没有后缀名的,除了后续名是.a .b的和.gitignore (包括目录里面的)
*
!.gitignore
!*.a
!*.b
!*/
查找git id被包含在哪个branch
git branch --contains 89eb2ac2838dde77dab032a8e3b82ae087fc30b0 --all
三、整体示意图
四、实例应用
具体过程:http://www.cnblogs.com/fat39/p/8533279.html
场景1、现有项目移植到git代管
场景2、测试git的reset功能
(0)系统目前线上版本0。
(1)开发新功能1,线上更新为版本1。
(2)公司觉得功能1烧钱,预算有限因而砍掉功能1,reset到版本0;
(3)开发新功能2,线上更新版本2。
(4)系统效益好,决定重新使用功能1。最终版本为功能1、功能2并存。
场景3、独自开发新功能的过程中,线上版本出现bug的处理
(1)线上稳定版本0;
(2)开发新功能1,尚在开发中;
(3)发现线上版本出现bug;
(4)保存目前开发进度,在版本0的基础上解决bug并上线稳定版本0.1;(推荐:branch;不推荐:stash)
(5)接着开发进度继续开发;
(6)可能解决bug的代码和新增功能的代码会发生冲突,git提示冲突并手动解决冲突;
(7)冲突解决完成,上线版本1。
场景4、远程仓库
(0)github注册用户,新增项目;
(1)地点1项目移植到github;
(2)地点2从github下载项目,首次下载项目,进行开发,上传到github;
(3)回到地点1,把地点2开发的内容拉下来,继续开发文件1、文件2,但文件2忘记上传到github;
(4)回到地点2,下载地点1进度,此时只能pull到文件1,继续开发文件3,并修改了文件1;
(5)回到地点1,pull下来最新版,此时可看见未上传的文件2,地点2修改后的文件1,家里新增的文件3;
场景5、协同开发
同一个远程仓库
github:
- 组织
- 邀请
1.拉代码
2.开发。。。
3.合并
先提交的:没问题,因为不需要解决冲突;
后提交:需要先合并,解决冲突,再提交;
场景6、fork别人的项目
1.fork别人的项目(把整个项目单独保存在自己的github)
2.git clone xxxx(本地下载该项目)
3.修改
4.提交【自己】(上传到自己的gihub)
5.pull new request(向项目作者提请求,提交自己的代码,希望其按需求决定是否更新到系统)
6.等
场景7 首次从github pull项目
git pull 失败 ,提示:fatal: refusing to merge unrelated histories
其实这个问题是因为 两个 根本不相干的 git 库, 一个是本地库, 一个是远端库, 然后本地要去推送到远端, 远端觉得这个本地库跟自己不相干, 所以告知无法合并
具体的方法, 一个种方法: 是 从远端库拉下来代码 , 本地要加入的代码放到远端库下载到本地的库, 然后提交上去 , 因为这样的话, 你基于的库就是远端的库, 这是一次update了
第二种方法:
使用这个强制的方法
git pull origin master --allow-unrelated-histories
后面加上 --allow-unrelated-histories
, 把两段不相干的 分支进行强行合并
后面再push就可以了
实测可用--allow-unrelated-histories
五、其他
ssh sqt@180.169.33.117 //访问远程git仓库 mkdir ZSKFrameWork.git //创建一个叫ZSKFrameWork.git的文件夹 git –bare init //初始化git git remote -v 查看远程origin git remote rm origin 删除远程origin git remote add origin sqt@180.169.33.117:repositores/ZSKPad.git git push -u origin master //第一次push的时候要- u rm -rf +文件夹名次 删除文件夹 git branch dev origin/dev #拉远程分支的代码 git rm -rf audit/migrations/ //删除远程仓库的某文件夹 删除后,把该路径放在.gitignore文件中 $ mypy audit/migirations/ ssh ssh-keygen.exe 公钥 私钥 公钥放在github
其他人的案例
-------------------------------------------------------git版本控制-------------------------------------------------------------------- 目录: --新建项目并提交到github服务器仓库 --修改了文件没有提交,如何恢复 --删除文件,如何恢复 --如何把对应版本代码克隆岛本地 --修改代码前必须要做的事 --修改了代码,如果提交服务器的对应的版本 案例1:把项目提交到github仓库 进入d盘,你的项目地址 注意,有时候一些文件隐藏了.gitignore,凡是在目录中包含这个文件,将被忽略提交到github cd /d mkdir www cd www 创建一个文件随便输入字符保存退出 设置全局编码,防止代码乱码 git config --global gui.encoding utf-8 把项目缓存本地仓库 git add * 提交到本地仓库并备注 git commit –m “修改了文件” 推送到github的仓库 如何创建github仓库,登录官网,人头像旁有个+号 new repository 创建完毕有有一个项目地址https://xxx.com/unrelaxs/test.git 创建完仓库后,提交到github仓库 配置一下项目的地址 git remote add origin https://xxx.com/unrelaxs/test.git 把本地分支推送到服务器分支上–u表示如果仓库没有则新建一个 git push –u origin master[默认是master,如果有版本号则填写版本号] 接着刷新https://xxx.com/unrelaxs/test.git这个网址,就能到你修改的内容了 案例2:修改了文件,却没有任何的操作,想恢复到之前的代码 .代表所有文件 或者也可以指定具体路径下的文件 git checkout -- . 案例3: 修改了文件,commit到缓冲区了(经过了add 和 commit),但是没有提交到github git reset HEAD . 案例3:删除了文件如何恢复?? git log 会弹出一个修改的列表:如 commit c2d7f0dc6196c87e636d121bf7f163ad31d8915d commit 后的就是id了 恢复54:35时间的东西 git checkout id . 案例4:如何把对应版本代码克隆岛本地 git clone –b 版本号 代码链接 案例5:在修改代码前,必须要做的事 在修改前,必须是git pull 更新本地代码 案例6:修改本地代码如何提交到服务器?? git pull origin 1.0(指定1.0版本)或者 git pull 然后是 git add . git commit –m “修改了test文件” ***git push 后的origin1.0 是指定版本,可不填写*** git push origin 1.0 案例7:从git上获取项目?? git init 初始化一个仓库 git remote add origin 网址 git pull origin 分支 git checkout -b xx分支 #如果没有该分支则尝试会创建这个分支 案例8:从git上面 clone下来的项目后,如何拉取次分支以及合并主分支的代码呢? git init git clone http://xxxx git branch -r 查看远程仓库的分支,如果没有,请重新操作,还是不行,只能百度了 git pull origin 分支名 注意了 origin是仓库名名,,如果 git branch -r 查看到 xx/origin/mobile 则第一个斜杠后,即origin为仓库名,mobile为分支名 案例9:从git上面 clone下来别人的项目后,如何提交到自己项目上? git init git clone http://xxx git remote add origin http://你自己的项目地址 git pull origin master --allow-unrelated-histories git add . git commit -m "版本合并" git push origin master 案例10:屏蔽某个目录,某个文件不提交到git .gitignore文件语法如下 # 此为注释 – 将被 Git 忽略 *.a # 忽略所有 .a 结尾的文件 !lib.a # 但 lib.a 除外 /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO build/ # 忽略 build/ 目录下的所有文件 doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt 在项目根目录创建.gitignore 案例10:新建一个分支,拉取另外一个分支代码, 并把新的分支合并到另外一个分支 git checkout -b feature_line git pull origin develop //拉取develop代码 git add . git commit -m "创建了个分支" git push origin feature_line git checkout -b develop //切换develop分支 git pull origin develop git merge feature_line //合并分支 git push origin develop //推送合并后的结果 案例11:同个电脑用不同的账号,账号对应不同的 github平台 1. 生成sshkey ssh-keygen -t rsa -C "邮箱账号" 注意不要全部回车键 这里要写存储的路径如 $ ssh-keygen -t rsa -C "gg" Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): 这里填写绝对路径 或者相对路径 命名两个账号都不同如:/c/Users/Administrator/.ssh/id_rsa_one 接着全部回车键,默认 $ ssh-keygen -t rsa -C "gg" Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): 这里填写绝对路径 或者相对路径 命名两个账号都不同如:/c/Users/Administrator/.ssh/id_rsa_two 2. 进去/c/Users/Administrator/.ssh/ 这个目录 把 id_rsa_one.pub 跟two.pub 的秘钥 分别粘贴到不同的平台 3. 在这个目录 /c/Users/Administrator/.ssh/ 创建一个config文件,注意没有后缀 config文件内容如下: Host github.com HostName github.com IdentityFile ~/.ssh/id_rsa_two Host github_1033 HostName gitee.com IdentityFile ~/.ssh/id_rsa_one 注意了,上面我分别是 github.com 分别对应的是 github.com的平台,秘钥是 id_rsa_two ,在github后台别粘贴错秘钥!! 而 github_1033 对应是 gitee.com的平台(码云),秘钥是 id_rsa_one 4. 在添加源的时候 git remote add git@github_1033:unrelaxs/object-design.git 码云明天的ssh项目地址是:git@gitee.com:unrelaxs/object-design.git 因此我把gitee.com改为github_1033就行了 --------------------- 作者:一种乐趣 来源:CSDN 原文:https://blog.csdn.net/zhazhaji/article/details/75258426 版权声明:本文为博主原创文章,转载请附上博文链接!
git SubModule