Git 学习笔记

集中式版本控制

svn

分布式版本控制

git

在现有目录中初始化仓库

如果你打算使用 Git 来对现有的项目进行管理,你只需要进入该项目目录并输入

git init

设置全局账号

git config --global user.name "chaodada"
git config --global user.email "2167162990@qq.com"

新建文件夹 demo
初始项目

git init

建立局部管理账号

git config  user.email “18063442990@163.com"
git config  user.name “liujianchao”

假如在git 文件夹设置的全局账号
在git文件夹创建demo文件夹
如果不对demo 进行设置账号 那在提交的时候将会用全局账号

查看全局账号

git config --global user.name
git config --global user.email

查看局部账号

git config  user.name
git config  user.email

创建新仓库

在文件夹中直接初始化

git init

这就是一个新仓库

管理旧仓库

注意一定不要在已经初始化的仓库进行克隆 应当用一个不是仓库的文件夹 并且克隆的时候 会自动创建别人项目的文件夹
直接克隆别人的仓库

git clone https://github.com/jindasong/lazyload.git

查看当前项目的状态

git status 

放到小推车

如果有新文件 可以反复执行
git add 文件名

一次 add 多个文件的方法 多个文件用 空格 隔开
git add file_1 file_2 file_3

或者直接 add . 将全部对的文件都加入
add . 的时候 会导致全部文件添加到小推车 如果想排除一些文件 可以创建 .gitignore 文件 定义排除项目

比如排除所有jpg
*.jpg

另外比如排除所有jpg 除了a.jpg
*.jpg
!a.jpg

忽略文件夹
/demo-1
忽略某个文件夹下的某个文件
/demo-1/index.php
或者某个文件夹下的某个类型的文件
/demo-1/*.php
限制某个文件夹 以及子文件夹的某个类型的文件
/demo-1/**/*.php
提交文件夹的方法
git add 文件夹名

新文件

创建一个新文件
假如还没写完就放到运输车了 想取消 第一次可以这样取消在运输车

git rm --cached   文件

保存一份到仓库
然后 假如文件做了改动 放到了运输车后悔了 想取消放到运输车

git reset HEAD  文件名

这时候是改动完了的文件 只是没夹到运输车

此时想改回之前的版本

 git checkout  文件名

这时候就回到改动之前的版本 ( 也就是第一次保存到仓库的文件)
退回任意版本

git reset --hard 5a24fa9db2354c8d9251d9575e4abbf1f9441985

修改版本库文件的名字

git mv   现在的名字    新名字

提交到仓库

git commit -m '测试学习第一次提交'

修改描述

日志并不会添加一个新的 只会修改原来的

git commit  —-amend

删除

大多数情况下 删除版本库的文件 本地也会删除

git  rm  a.txt

只删除版本库中的 本地不会删除

git rm —cached  a.txt  

查看提交记录

git  log

查看最近一次提交记录

git  log -1

两次

git log -2

查看记录之间的文件变动信息

git log -p
--oneline     这个参数可以省略一些没用的信息
# 一般这样用
 git log -p -1 --oneline      查询最近一次的提交记录

想看那些文件发生了变化

git log --name-only

配置 GIt 别名

使用
git config –global alias
比如 我想用 st 代表 status,name我们可以这样设置。

git config --global alias.st status

以后只需要输入git st,即可查看当前 git 仓库的状态
或者在配置文件配置
mac 在用户的根目录 ls -a

默认分支 master 稳定版

创建新的分支

git branch 分支名

将当前指针 切换到 其他分支

git checkout  分支名

创建分支并切换

 git checkout  -b 分支名

合并分支 注意应当是 切换到 master 之后 在执行合并分支

git merge 分支名

合并分支 提示 分支冲突 那就进入这个文件 自己选择 要哪些 直接保存 然后重新提交
显示出 没有 与主分支 合并的分支

git branch --no-merged

显示出 已经合并到 主分支的 分支 (包含主分支)

git branch --merged

删除分支

删除本地分支:
git branch -d  分支名
删除未合并的分支
git branch -D 分支名
// 方法一:将删除的本地分支推到远程(要删除的远程分支在本地有映射)
git push origin :branchName
// 方法二:直接删除远程分支(要删除的远程分支不在本地)
git push origin --delete branchName

查看本地分支

git branch

查看本地及远程所有分支:

git branch -a 或 git branch --all

当你在一个分支 仓库中写了东西 然后 add 放到的小车中 但是这时候 想要 切换其他的分支 只时候直接切换时 切换不出去的
因为 文件没有提交 但是文件现在没写完 提交不太合理
这时候用 文件暂存
文件暂存命令

git stash  save“暂存名子 自定义 方便多个暂存区分”

查看暂存列表

git stash list

列表内容 stash@{0} 是暂存标识

stash@{0}: WIP on index: 343dffc index分支第一次提交

恢复暂存区 恢复之后暂存还是存在 需要自己删除

git stash apply  暂存标识

删除暂存区

git stash drop  暂存标识

显示最新一次的暂存

git show stash@{0}

应用最新的暂存状态 并且删除暂存

git stash pop

tag 标签

类似于版本号 v1.0 v2.0 v3.0
查看标签列表

git  tag

添加标签

git tag v1.0

git 打包项目

win

git archive master --prefix=‘压缩包内部文件夹名字’ --forma=zip>压缩包名字.zip

mac

git archive master  --forma=zip>压缩包名字.zip

打包所有文件
打包master分支的所有文件:

 git archive --format=zip --output master.zip master

其中,输出格式为zip,输出文件为master.zip。git支持zip和tar两种输出格式。
打包当前分支当前HEAD的所有文件:

git archive --format=zip --output head.zip HEAD

打包v1.2标签的所有文件:

git archive --format=zip --output v1.2.zip v1.2

打包更改的文件
打包更改文件的原理是:
git diff 找出文件列表;
用打包命令打包。
也就是说,只要能用找出文件列表,就可以git打包出来。
打包最后修改的文件
先通过git diff找到最新版本修改过的文件,再压缩打包这些文件:

git archive --format=zip -o update.zip HEAD $(git diff --name-only HEAD^)

打包最后两个版本修改的文件
总共也是2个版本:
git archive --format=zip -o update.zip HEAD $(git diff --name-only HEAD~2)
打包两个分支之间差别的文件

git archive --format=zip -o update.zip HEAD $(git diff --name-only master fix-error)

如上,打包master和fix-error分支差异的文件。

问题说明

假如在11:00 创建主分支 11:10创建 index 分支 index 分支会带着这十分钟之内处理过的 主分支记录
index分支 一直操作到 11:20
在同时主分支也在操作
这时候我想要合并分支 应当 先进入index分支 执行

  git rebase master

为什么要这样做呢 因为 拿11.10 之前的 记录创建了index 然后 在这个基础上修改了index
然后在11:10 到11:20 也没闲着
这时候 合并分支 就会产生冲突 解决办法就是进入 index分支 将起点变成主分支的最新点 然后再 进行合并
这样就能解决
合并产生新的 master
合并操作会有 master管理员 来操作
如果档主分支 master 在一次保存中 创建了一个新分支 然后主分支 有不断的 进行更新
合并产生新的 master
合并操作会有 master管理员 来操作
rebase 改变子分支的基础点 就可以解决这个问题

链接github

远程连接法

第一设置key
第二github 创建项目  
第三获取项目ssh  git@github.com:chaodada/demo.git
第四本地克隆项目   git clone git@github.com:chaodada/demo.git
最后
git push 

本地连接法

在本地创建项目
然后链接
 git remote add origin git@github.com:chaodada/demo2.git

查看是否连接
git remote -v

将本地对的 推送到远程
git push -u origin master

查看所有分支 包含远程分支

git branch -a

本地创建完分支 推送到远程 让远程也创建分支

 git push --set-upstream origin index

默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行 git push origin [tagname] 即可:

git push origin v1.5

如果要一次推送所有本地新增的标签上去,可以使用 --tags 选项:

git push origin --tags

克隆分支之后 请求 将指定分支克隆到本地

git pull origin 分支:分支

远程分支合并 大概意思就是 本地合并完成 然后推送到 远程分支
建议本地合并时候 先git pull master将本地主分支 更新到最新 然后将其他分支进行 git rebase master 然后执行合并操作 然后推送到云端

删除远程分支 本地分支不会删除

git push origin --delete index