Git 备忘
一.安装
linux1.redhat:yuminstallgit
2.ubuntu:apt-getinstallgit
windows下载http://msysgit.github.io/安装,一切默认
设置用户名及邮箱
gitconfig--global(local为仓库级)user.name"yourname"
gitconfig--globaluser.email"youremail@***.com"
二.关联github
获取ssh秘钥:ssh-keygen-trsa-C"youremail@***.com"
将当前用户目录下~/.ssh/id_rsa.pub(公钥)内容添加至github的sshkey(相当于防伪标识)
关联远端仓库:[email protected]:yourgithubName/yourRepo.git
查看仓库地址:gitremote-v
三.克隆、推送、同步
克隆:[email protected]:yourgithubName/yourRepo.git
推送:(gitpush<远程主机名><本地分支名>:<远程分支名>)gitpushoriginbranchname(一般为主分支master视开发情况而定)
同步:(gitpull<远程主机名><远程分支名>:<本地分支名>)gitpullorigin若出错提示无当前分支追踪信息,则gitbranch--set-upstream本地分支origin/远端分支使本地分支与远端关联
gitpulloriginmaster----allow-unrelated-histories
四.自己玩
创建分支:gitbranchbranchname
切换分支:gitcheckout(-b并创建)branchname
删除分支:gitbranch-dbranchname
合并分支:gitmergebranchname
查看分支:gitbranch
查看远程分支:gitbranch-r
查看所有分支:gitbranch-a
获取远程分支:gitcheckout-b本地分支名远程分支名
删除远程分支:gitbranch-r-dorigin/branch-name
添加文件:gitaddfilename(暂存区)
提交文件:gitcommit-m"yourcomment"
雪藏未提交修改:gitstash
查看雪藏:gitstashlist
回复雪藏:gitstashapply[stash@{1}]
删除雪藏:gitstashdrop[stash@{1}]
弹出雪藏:gitstashpop
查看状态:gitstatus
查看提交历史:gitlog(--graph图形)
比较差别(当前与repo):gitdifffilename
查看命令历史:gitreflog
退回到某一次提交:gitreset--hardcommitId(丢掉commitId后的提交内容)
gitreset--softcommitId(commitId后的提交内容退回工作区)
撤销工作区的修改:gitcheckout--filename
在提交代码(push-uoriginmaster)的过程中如果遇到“Permissiondenied(publickey,gssapi-keyex,gssapi-with-mic).”错误
Windows:
1.打开CMD
2.echo.hostgithub.lngtop.com>>%HOMEPATH%\.ssh\config
3.echo.hostnamegithub.lngtop.com>>%HOMEPATH%\.ssh\config
4.echo.port2222">>%HOMEPATH%\.ssh\config
Linux/MacOS:
1.echo-e"hostgithub.lngtop.com\nhostnamegithub.lngtop.com\nport2222">>~/.ssh/config
(github.lngtop.com换成自己在github上的repo地址)
五.
1.忽略部分文件(如编译后的class文件、settings等不必提交到远端的东东)
在代码目录下新建.ignore文件,内如如下
*.class//要忽略的文件后缀名*为通配符
*.classpath
*.project
pay/.settings///要忽略的路径
pay/WebRoot/WEB-INF/classes/
如果这些文件还没提交到远端,一切Ok。
若果已经提交了那么需要先gitrm(settings要先备份)再重新gitcommit,然后再gitpush提交到远端(再将备份还原)。以后git就不会再检查这些文件了
2.创建空分支
gitcheckout--orphanbranchname(新建分支没有commitlog,但内容俱全)
gitrm-rf.清空所有内容(此时branchname分支为空,执行commit后分支可见)
六.日常工作流程
1.gitcheckoutdevelop(若develop分支已存在)切换到日常开发分支
2.gitpullorigindevelop同步远程develop到本地develop分支
3.gitcheckout-bfeature1基于develop分支创建并切换到feature1分支
4.开始开发...完成后commit(可以有多个)
5.gitcheckoutdevelop切换到develop分支
6.gitpullorigindevelop再次同步远程develop到本地develop分支,因为有可能在自己进行开发时别人向远程提交了代码,这时要在提交前保持本地与远程同步
7.gitcheckoutfeature1再次切换到feature1分支
8.gitrebasedevelop
1)没有冲突:
gitpushoriginfeature1:develop将本地feature1分支推送至远程develop分支
2)有冲突:
修改冲突文件
gitadd.
gitrebase--continue继续rebase(gitrebase--abort取消rebase回到rebase开始前的状态)
gitpushoriginfeature1:develop将本地feature1分支推送至远程develop分支
七.fork别人的项目clone到本地后,远程分支有修改,需要同步远程分支,使得本地代码与远程分支一致。
1、gitremote-v:
orgin:为本地分支的
upstream:为远程分支
2、gitremoteaddupstream<原作者项目的URL>(上一步操作没有upstream,则需要添加uptream)
完成后,执行gitremote-v确认与上图一致。
3、gitfetchupstream将远程分支同步到本地
4、gitcheckoutmaster检查本地代码变更
5、gitmergeupstream/master合并分支