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

 https://segmentfault.com/a/1190000003076028

posted @ 2018-03-11 22:37  fat39  阅读(219)  评论(0编辑  收藏  举报