连接配置:
前述:
远程仓库是指托管在网络上的项目仓库,现在互联网上有很多项目托管平台,比如github、gitlab等。为了不公开自己项目代码,可以在自己的服务器上搭建自己的项目仓库,最常见的是搭建GitLab。
本地Git与远端服务器GitLab之间连接方式主要分为:SSH方式和HTTP方式。
HTTP方式:这种方式要求project在创建的时候只能选择“Public”公开状态,Private和Internal私有模式下不能使用http方式进行连接,如果考虑到安全性必须进行安全设置。
SSH方式:这是一种相对安全的方式,本地git仓库和远端gitlab仓库之间的传输是通过SSH加密,SSH方式在三种project模式下都可以使用。
生成SSH 密钥
在.ssh 目录下右键打开Git Bash(.ssh目录不存在,手动创建) 生成秘钥:ssh-keygen -t rsa -C
“your_email@youremail.com” ,直接Enter就行,然后会提示输入密码(可输可不输)
说明:命令中的email,就是gitlab中的账号,需要保持一致
GitLab添加公钥
在搜索框中搜索:SSH Keys 点击 Add SSH Keys
拷贝公钥文件(即上面生成的id_rsa.pub)中的信息到key输入框中,title可以随便起,见名知意即可。然后点击Add Keys。至此Git/GitLab连接配置完成。
关联本地库远程库
git remote add origin git@github.com:username/repostery.git //关联本地仓库,远程库的名字为origin
git push -u origin //第一次把当前分支master推送到远程,-u参数不但推送,而且将本地的分支和远程的分支关联起来 master
git push origin master //把当前分支master推送到远程
git clone git@github.com:username/repostery.git //从远程库克隆一个到本地库
常用操作:
第一次创建分支并提交代码:
git init #生成本地./git 文件
git add . #添加需要上传的文件
git commit -m "**" #双引号内对上传文件描述
git branch -a #查看所有分支
git branch new #创建new分支
git checkout new #切换到new分支
git remote add origin url
#关联远程仓库,添加后,远程库的名字就是 origin,这是 Git 默认的叫法,也可以改成别的,但是 origin 这个名字一看就知道是远程库。
git push origin new #上传到gitlab的new分支
之后提交:
$ git add --all
$ git commit -m "信息"
$ git push
删除远程文件/文件夹
在github上只能删除仓库,却无法删除文件夹或文件, 所以只能通过命令来解决。首先进入你的master文件夹下, Git Bash Here ,打开命令窗口。
$ git pull origin master # 将远程仓库里面的项目拉下来
$ dir # 查看有哪些文件夹
$ git rm -r --cached test # 删除test文件夹
$ git commit -m '删除test文件夹' # 提交,添加操作说明
$ git push -u origin master # 将本次更改更新到github项目上去
提交部分:
git init //初始化代码仓库
git add learngit.txt //把所有要提交的文件修改放到暂存区
git commit -m 'add a file' //把暂存区的所有内容提交到当前分支
git status //查看工作区状态
git diff //查看文件修改内容
git log //查看提交历史
git log --pretty=oneline //单行显示
git reset --hard HEAD^ //回退到上一版本,(HEAD^^(上上版本),HEAD~100(往上100个版本))
其中说明 工作区(Working Directory)
版本库(Repository)
#.git stage(index) 暂存区
master Git自动创建的分支
HEAD 指针
git diff HEAD -- <file> //查看工作区和版本库里最新版本的区别
git checkout -- <file> //用版本库的版本替换工作区的版本,无论是工作区的修改还是删除,都可以'一键还原'
git reset HEAD <file> //把暂存区的修改撤销掉,重新放回工作区。
git rm <file> //删除文件,若文件已提交到版本库,不用担心误删,但是只能恢复文件到最新版本
分支
git checkout -b dev //创建并切换分支
#相当于git branch dev 和git checkout dev
git branch //查看当前分支,当前分支前有个*号
git branch <name> //创建分支
git branch -a //查看所有分支
git checkout <name> //切换分支
git merge <name> //合并某个分支到当前分支
git branch -d <name> //删除分支
git log --graph //查看分支合并图
git merge --no-ff -m 'message' dev //禁用Fast forward合并dev分支
git stash //隐藏当前工作现场,等恢复后继续工作
git stash list //查看stash记录
git stash apply //仅恢复现场,不删除stash内容
git stash drop //删除stash内容
git stash pop //恢复现场的同时删除stash内容
git branch -D <name> //强行删除某个未合并的分支
//开发新feature最好新建一个分支
git remote //查看远程仓库
git remote -v //查看远程库详细信息
git pull //抓取远程提交
git checkout -b branch-name origin/branch-name //在本地创建和远程分支对应的分支
git branch --set-upstream branch-name origin/branch-name //建立本地分支和远程分支的关联
拉取远程分支到本地进行开发
本地操作:
git init # 初始化
git remote add origin git@github.com:XXXX/nothing2.git #关联远程仓库
git fetch origin dev(dev为远程仓库的分支名)#把远程分支拉到本地,git fetch是拉取所有分支
git checkout -b dev(本地分支名称) origin/dev(远程分支名称) #在本地创建分支dev并切换到该分支
git pull origin dev(远程分支名称) #把某个分支上的内容都拉取到本地
远程分支本地看不到
直接git fetch进行更新一下,再进行git branch -a就可以看到了。
项目太大,git clone总是网络错误
git clone --depth=10 xxxx
想要将当前分支a,merge到某个分支b
先切换到某个分支b,再进行git merge a即可
基于某个分支a,新拉取一个分支b
切换到分支a,再git checkout -b b,新建分支b,再切换到分支b,将该分支推到远程 git push -u origin b,这样,远程库就能看到该分支了。
撤销上一次commit操作
第一种情况,如果还没有push,只是在本地commit,执行git reset --hard <commit_id> ,进行退回即可
第二种情况,如果已经push:git revert <commit_id>
强制将远程上代码覆盖本地:
git fetch --all
git reset --hard origin/master
git pull
提交merge时出现冲突,pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
如果想要保留本地修改:
git stash #本地快照
git pull origin master
git stash pop #发生冲突的本地修改还在
如果不想保留修改:
git reset --hard #直接将本地的状态恢复到上一个commit id
git pull origin master