0.关于Git
本地仓库由三棵“树”组成。1.工作目录,它持有实际文件;2.缓存区(Index),临时保存你的改动;3.HEAD,指向你最近一次提交后的结果。
1.免密登录
cd && ssh-keygen -t rsa //生成公钥:~/.ssh/id_rsa.pub
copy公钥至 git "设置" → "SSH Key",git免密码
copy公钥至 linux服务器 ~/.ssh/authorized_keys,linux免密登录
2.拉取工程
git clone http://gitlab.juren.com/root/jurenapp.git
设置提交信息
cd jurenapp
git config --global user.name "zhaosi"
git config --global user.email "zhaosi@juren.com"
3. 查看分支
git pull
git branch //本地分支
git branch -r //远端分支
git branch -vv //本地分支、提交信息、远端分支关系。(最好本地分支和远端分支都有对应)
4.建分支
git pull
git checkout -b feature/2527 origin/master (或 git checkout master && git pull & git checkout -b feature/2527) //永远都从master建出分支,如果不加"origin/master",会从当前分支复制新建(不推荐)
git push --set-upstream origin feature/2527 //提交远端并建立关联(最好同名),第一次push远端要加--set-upstream,以后直接git push即可
如第一提交远端没有--set-upstream建立关联,git pull需指明远端分支名:git pull origin feature/2527, 否则报提示:“Please specify which branch you want to merge with” 补充关联解决:git branch --set-upstream-to=origin/feature/2527 feature/2527
建分支方法二:gitlab网页端新建(基于master),本地 git pull && git checkout feature/2527
5.切换分支
git pull //更新,能看到新建的分支
git checkout feature/2527 //切换到feature/2527分支
coding 。。。。
6.确认修改
git status 查看本地修改的文件状态
git diff 查看所有的修改细节
git diff origin/master origin/feature/2527 core/dao/useModel.php 查看某个文件的修改
git diff origin/master origin/feature/2527 --stat 查看两个分支的文件变动
git diff release-20171121-1 HEAD --stat 查看
git log //查看提交信息
7.提交
git add . //提交当前目录全部文件
git add public/index.html //或者挨个提交文件
git commit -m "新增订单类型修改"
git pull //更新一下本分支有没有协同更新
git push origin feature/2527 提交git远端
8.恢复
git checkout public/index.html //替换该文件的本地改动
git reset --hard origin/feature/2527 && git pull //丢弃所有本地改动,只用远端版本
git log && git reset --hard ac3ac10ceddf717ee03d018a7b3 && git push -f origin feature/2527 // 远端仓库回滚版本,开发负责人操作,尽量避免 !!!慎重
9. 合并分支
把自己的feature合并到每周二上线发布指定的release分支(以日期命名的release/20170520)
git pull
git checkout release/20190520
git merge origin/feature/2619 //如果有冲突则解决冲突
:wq //出来提示需:wq写入
git push origin release/20170520
10.冲突
两人修改同一文件,不同行会自动合并,同一行会产生冲突,需解决冲突,再次提交:
-
git log public/index.html 找到冲突处的修改人,两人一起确认解决
-
编辑冲突文件,找到“=========>”标记,确认可用的代码块删除不用的代码块,保存
-
git add public/index.html && git commit -m "解决合并冲突 - xxx业务" && git push origin release/20170520
-
解决冲突后报错
fatal: cannot lock ref 'HEAD': Unable to create 'C:/Users/jiyan/Desktop/files/.git/refs/heads/5G-CLEN-ZJ-ERQI.lock': File exists.
Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
找到对应该的文件删掉然后git commit -m "解决合并冲突 - xxx业务" && git push
11.gitignore
编辑工程目录下的.gitignore文件,添加不想提交git版本管理的文件和目录,如:log、config、runtime、cache、临时文件、IDE生成文件、.svn等版本控制文件
12.tag操作
git checkout release/20171121 && git pull
git tag release-20171121-2
git push origin release-20171121-2
git diff release-20171121-1 release-20171121-2 --stat
git tag -r
13.分支删除
git branch -d feature/2527 //删除本地分支
git push origin :feature/2527 //删除远端分支
14.分支tag
git tag -d tagName //删除本地tag
git push origin :refs/tags/tagName //删除远端tag
15.git 批量删除tag标签
# 删除所有远程标签
git show-ref --tag | awk '{print ":" $2}' | xargs git push origin
# 删除所有本地标签
git tag -l | xargs git tag -d
16.其它相关命令学习
git stash //暂存未完成工作,恢复到最近一次提交
git stash pop //弹出最近一次保持的修改
git stash list //显示暂存栈的保存列表
git stash clear //清空暂存栈
git blame public/index.html //查看文件修改历史细节
17.git本地已经文件与git仓库关联起来
1.控制台中进入本地文件夹,执行git init命令创建.git文件
2.执行git remote add origin (仓库地址) 使本地的文件夹与远程的仓库对应起来
3.执行git pull origin master拉去远程线上代码
4.执行git status查看当前更改状态
5.执行git add .将当前的改动进行提交
6.执行git commit -am 'hahha’提交全部并加上注释
7.执行git push 把所有的东西都推送到远程服务器上
8.git remote -v 查看本地关联的远程仓库地址
9. git remote set-url 远程仓库地址 修改关联的远程仓库地址
10.git push origin --all git push origin --tags 推送全部分支与tag到远端
11.git 获取所有远端分支到本地
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done git fetch --all git pull --all
18.git报错处理
git: 'credential-manager' is not a git command. See 'git --help'.
1)运行 git config --list,部分输出如下:
core.editor=nano
credential.helper=manager
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=https://github.com/xxx.git
remote.origin.fetch=+refs/heads/:refs/remotes/origin/
branch.master.remote=origin
branch.master.merge=refs/heads/master
2)运行git config --global --unset credential.helper,之后再git push orgin master即可。