老师文档
https://gitee.com/houdunren/code/blob/master/docs/Git.md
git --vension 看git版本
cd 进入家目录
mkdir edu 新建edu文件夹
ls / ll / dir / ls -a (-a可以看到隐藏的文件) 查看文件夹下的所有文件
ls 查看出来的文件,前面是第一个是-的,说明是文件,如果是d开头的,说明是文件夹
rm -rf edu 强制删除edu文件夹
rm -rf * 强制当前目录里所有的文件和文件夹
pwd 看当前的文件所在的路径
chmod -R 777 ./edu 加权限
git config --global user.email 'whm2416@qq.com'
git config --global user.name 'haima1004'
这里是声明全局的名字
执行上面的两条命令后,在cd回车,进入家目录
cat .gitconfig 就可以查看刚新建的全局配置文件了.
.gitconfig里记录的就是上面声明的邮箱和名字
vim .gitconfig 可以编辑这个文件 (要在家目录里执行这个命令)
编辑完后,esc退出 -> shift+; -> wq 保存并退出
在git文件夹里输入 git init 在你要新建版本库的文件夹里创建一个初例化的仓库
git config user.email '228654416@qq.com'
git config user.name 'haima'
ls -a
cat config
这样在git文件夹里就声明了当前仓库的用户信息
新建项目时.
在干净的文件夹里输入命令 `git init`
建好文件后就会有一个.git的隐藏文件,如果把它删除了,就会断开git的连接
管理线上已经有的项目时
在干净的文件夹里输入命令`git clong 加https`里的仓库地址
git的基本工作流程
提交代码的流程:
本地编辑完后,add. 添加到运输车,然后再commit -m "操作说明" 到本地的版本仓库
然后再git push到线上的代码仓库里.
工作流程
touch a.php 新建文件,
git add a.php 放入小推车
git status 查看工作环境:
有红色的文件,就是没有提交到运输车里的文件,没有版本控制的文件
vim b.php > i > 输入文字 > shift+; > wq
git status 查看工作环境:
绿色的文件,就是已经放到运输车里的的文件,但是也是没有版本控制的
有红色的文件,就是没有提交到运输车里的文件,没有版本控制的文件
git add b.php 把b.php文件也放入小推车里.
git add . 是一次把所有的文件都放入到小推车里
git status 查看工作环境,此时都是绿色的文件了,说明都放入到小推车里了.
git commit -m '提交说明' 把小推车里的文件提交到本地仓库里.
git status 查看此时工作环境就是干净的了.
此后再修改完文件后,重复上面的步骤,提交到本地仓库里.
vim .gitignore 新建忽略配置文件
在.gitignore文件里添加规则,
*.txt 忽略所有的.txt格式的文件,忽略后add . 命令就是不会提交到小推车里.
!a.txt 除了a.txt文件不忽略.
/vendor/*.php 忽略vendor目录里的.php格式的文件
/vendor/* 忽略vendor目录里的所有文件
/vendor/**/*.php 忽略vendor目录及子文件里的所有.php格式的文件
/vendor 忽略vendor的文件夹.
线上的代码仓库一般大概会给一个G左右的空间
在git里如果是空文件夹默认不会跟踪.
git status也是看不到的,所以文件夹里必需有文件,并且文件没有被忽然的,才能被提交小推车里.
mkdir vendor 建新vendor文件夹,
touth vendor/a.txt 在vendor文件夹里新建a.php文件
git status 如果vendor没有被.gitignore忽略,就可以看到vendor文件夹了.
删除仓库里的文件
1.删除仓库里的文件,本地的文件同时也会被删除
如果有些文件错放入仓库里的了,想要称除它.
git rm a.txt 这样本地和代码库里的文件就都会被删除.(默认本地和仓库里的代码应该是同样的).
![](https://img2018.cnblogs.com/blog/1441611/201903/1441611-20190301071425638-810451420.png)
2.只删除仓库里的vendor/b.php,本地的vendor/b.php保留
git rm --cached ./vendor/b.php
git rm --cached -r vendor 只删除仓库里的文件,本地的vendor保留
git status 查看本地的vendor文件夹会被跟踪,认为没有在版本里
删除暂存区(提交车)里的文件
当文件提交到暂存区,还没有commit时,发现文件提交错了
可以把文件撤消回来
git reset HEAD a.php //只撤消a.php
git reset HEAD * //撤消所有
git checkout -- c.php //还原c.php到最初状态(没有修改之前的状态).
git reset hard 864b3c6 //恢复到864b3c6版本
改名字
git mv a.php b.php //把本地的a.php改为b.php
git add 'b.php' //改完后再添加到运输车里
git commit -m 'change b.php' //提交改完后的b.php到仓库里
查提交的日志
git log //看提交信息
git log -p //看提交的详细信息
git log -p -1 //看最后一次提交的信息.
git log -p 2 //看最后二次提交的信息.
git log --oneline //看简短的文件变化信息
git log --oneline -p //看简短的详细点的文件变化信息
git log --name-log //查看文件的发生变化
git log --name-status //查看文件发生了什么变化,是add 还是删除了
git log --name-only 看最近提交的文件
git reflog //查看简短提交信息
修改提交的备注
把本次更改的文件合并到上次提交的日志里
把更改的文件git add . 件提交到运输车后
git commit --amend //进入vim编辑器后,修改上次提交的备注.
保存退出后.就样就把本次更改的文件合并到上次提交里了.
不会另创一条提交日志了
git命令全局别名
git config --global alias.a add . //给add . 启个a别名
其实操作的就是家目录里的.gitconfig文件.
我们可以直接去到家目前里用vim修改它
cd 回车
vim .gitconfig
[alias]
a = add .
c = commit //没有添加-m,所以直接git c时会自动进入vim编辑提交的说明
l = log
s = status
保存退出
系统Alias
在家目录里 ls -a
可以看到 ~/.bash_profile 文件,
在它里面写上,此时就定义了系统别名,之前定义的全局依然生效
alias gs="git status"
alias gc="git commit -m "
alias gl="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit "
alias gb="git branch"
alias ga="git add ."
alias go="git checkout"
标准的分支操作工作流
分支的原理
当开发新功能时可以新建分支,在分支里开发完成后,把最终版再合并到master上,测试没有问题了,就可以pull到服务器的主要线了
查看分支
git branch //查看本地的分支
git branch -a //查看所有分支(本地加线上)
创建本地分支
git branch ask //创建ask分支(就是复制一份master主线的代码到ask分支上)
切换分支
git checkout ask //切换到ask分支
在ask分支上操作的代码不会影响到master分支,它们是各自独立的
git checkout -b bbs //创建并切换到bbs分支上
合并分支
当bbs分支的代码开发完后,切到master主分支上
git merge ask //合并bbs分支的代码到master主分支上
解决冲突问题
当两个分支(这里以ask和bbs两个分支为例),都修改了同一个文件时,他们都合并到到master主分支上时,
就会产生冲突,此时就会在解决冲突的状态下.按提示手动修改冲突的文件.再重新提交到仓库里.
查看已经合并的分支
git branch --merged //显示分出来的所有分支里面的代码都是一致的.
查看没有合并的分支
git branch --no-merged //此时就举看到没有合并的分支
删除分支
git branch -d bbs //删除bbs分支(如果是没有合并的分支是删除不了的)
git branch -D bbs //大D可以强制删除没有合并的分支(慎用大D)
git push origin --delete 线上支付的名字
![](https://img2018.cnblogs.com/blog/1441611/201912/1441611-20191220205451315-2102057746.png)
暂存区
1.查看暂存区列表
git stash list
2.保存到暂存区
git stash //把已经add.到运输车里的文件(还没有commit),保存到暂存区
当编辑完文件后,没有 `add .` 添加到提交车里前,或者没有commit前,不许切换到别的分支的.
此时可以先保存到暂存区里,再切换到别的分支,把别的分支里的事件处理完后,
再回到此分支里恢复暂存后,再删除暂存就可以了.
3.恢复暂存区
git stash apply
恢复暂存区后,暂存区里的文件依然存在,需要手动删除
4.恢复暂存区,并删除暂存区里的暂存
git stash pop
5.删除暂存区
git stash drop stash@{0} //删除暂存区0号文件
标签
git tag //看标签列表
git tag 1.0 //把当前代码打上1.0的版本
git tag 2.0 //把当前代码打上2.0的版本
当完成一个功能模块后(测试稳定了),想要发布后,可以打上标签.
git tag -a tagName -m "my tag" //带备注的tag
git show tagName //查看tag详细信息
git push origin [tagName] //将tag同步到远程服务器
git tag -d v0.1.2 //删除本地tag标签
git push origin :refs/tags/v0.1.2 //删除远程tag标签
更多详情:
https://www.jianshu.com/p/cdd80dd15593
生成zip代码发布压缩包
git archive master --prefix='haima/' --form=zip > haimamaster.zip
此时会把所有master主分支里的文件放在haima文件夹里,然后压缩成haimamaster.zip文件
rebase
git rebase master //把指针指向在master的最新提交点
场景,在master主分支创意ask分支,当ask分支改变内容后commit时,同时master主分支的内容也改变了,
此时在master主分支上合并ask分支的代码就会产生冲突.这时只能由master管理来解决冲突问题了.
这样是不合理的.
解决方式:
当ask分支改变内容后,添加->提交
git add .
git commit -m 'edit ask'
git rebase master //把指针指向在master的最新提交点
git checkout master 再切到master主分支上
git merge ask 此时就不会再产生冲突了
创建新仓库(github上)
这里有两种方式:
1.本地已经有项目代码时,在线上创建一个干净的没有提交的项目.
关联远程
创建本地库并完成初始提交
echo "# hd-xj" >> README.md
git init
git add README.md
git commit -m "first commit"
添加远程仓库
git remote add origin git@github.com:houdunwang/hd-xj.git
查看远程库
git remote -v
推送数据到远程仓库
第一次推送数据到线上仓库,线上仓库里没有当前推送的这个新分支,需要加-u,(这时就会在线上新建这个分支,推并关联它)
git push -u origin master
第二次再推送数据时
git push 即可
删除远程仓库关联
git remote rm origin
2.本地没有代码时,把线上的代码 用`git clong 项目ssh地址` 命令克隆到本
通过 clone 克隆的仓库,本地与远程已经自动关联,上面几步都可以省略。
生成秘钥
使用ssh连接Github发送指令更加安全可靠,也可以免掉每次输入密码的困扰。
在命令行中输入以下代码(windows用户使用 Git Bash)
` ssh-keygen -t rsa -C “YOUR_EMAIL@YOUREMAIL.COM”`
一直按回车键直到结束。系统会在~/.ssh 目录中生成 id_rsa和id_rsa.pub,即密钥id_rsa和公钥id_rsa.pub。
把公钥放到线上的仓库里,就ok了.
详细参考:
`https://cloud.tencent.com/developer/article/1343014`
向GitHub添加秘钥
clone https 的方式下载的代码,配置公钥后,pull/push数据还是要输入账号密码
解决方法:
vim .git/config
url = https://gitee.com/haima1004/layhm.git 替换为
url = git@gitee.com:haima1004/layhm.git
测试是否配置成功
完成后可以在命令行测试是否配置成功,首次建立链接会要求信任主机
ssh -T git@github.com //github
ssh -T git@gitee.com //码云
在服务器添加完公钥后报错
sign_and_send_pubkey: signing failed: agent refused operation
haima@haima-PC:~/go/src/haimait/gin_web$ ssh -T git@github.com
sign_and_send_pubkey: signing failed: agent refused operation
Permission denied (publickey).
haima@haima-PC:~/go/src/haimait/gin_web$ eval "$(ssh-agent -s)"
Agent pid 25192
haima@haima-PC:~/go/src/haimait/gin_web$ ssh-add
Identity added: /home/haima/.ssh/id_rsa (/home/haima/.ssh/id_rsa)
haima@haima-PC:~/go/src/haimait/gin_web$ ssh -T git@github.com
Hi haimait! You've successfully authenticated, but GitHub does not provide shell access.
提交代码到远程仓库
提交代码之前一定要把git pull origin master //先把线上的代码更新下来
先把代码commit到本地的仓库里,
git push origin master //提交到线上的仓库里
如果向远程仓库推送代码没有反应,可以清空~/.ssh 目录中的 known_hosts文件里的内容,再重新生成并添加密钥到仓库里,就可以了
本地分支与GITHUB远程分支同步
1.创建远程ask分支
在本地ask分支环境上,
git push --set-upstream origin ask
本地ask分支创建远程ask分支,并关联远ask程分支,并推关本地ask分支代码送到远程ask分支上
2.删除远程ask分支
git push origin --delete ask
3.删除本地ask分支
git branch -d ask
git branch -D ask //强行删除没有合并的ask分支
pull 拉取代码
拉取远程主机某个分支的更新,再与本地的指定分支合并。
克隆完线上的仓库下来后,本地只有一个master
1.git pull origin ask:ask
此时本地就把线上的ask分支的代码也拉取下来了,本地就是ask分支了
2.拉取origin主机的ask分支与当前分支合并 git pull origin ask
3.如果远程分支与当前本地分支同名直接执行 git pull
push 提交代码到远程仓库
git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相似。
将当前分支推送到origin主机的对应分支(如果当前分支只有一个追踪分支 ,可省略主机名)
git push
使用-u选项指定一个默认主机 ,这样以后就可以不加任何参数直播使用git push。
$ git push -u origin master
删除远程ask分支 git push origin --delete ask
![](https://img2018.cnblogs.com/blog/1441611/201912/1441611-20191220205511006-1684164123.png)
本地ask分支关联远程分支并推送 git push --set-upstream origin ask
本地关联远程分支
例:使用场景:远程仓库里已经有dev代码 本地也有dev代码 但是还没有添加上关联
git branch --set-upstream-to=origin/远程要关联的分支名 本地分支名称
git branch --set-upstream-to=origin/dev dev
管理远程分支
1、查看项目的分支们(包括本地和远程)
命令行 : $ git branch -a
2、删除本地分支
$ git branch -d <分支的名字>
3、删除远程分支
命令行 : $ git push origin --delete <BranchName>
4、查看删除后分支们
命令行 : $ git branch -a