-----------------------------------------------------Git安装---------------------------------------------------
可以输入git,看看系统有没有安装Git,没有安装会提示,如下:
Theprogram 'git' is currently not installed. You can install it bytyping:
sudoapt-get install git
安装Git:sudoapt-get install git
安装Git之后需要配置用户信息:
gitconfig --global user.name "Your Name"
gitconfig --global user.email "you@example.com"
---------------------------------------------------SSH密钥注册---------------------------------------------
官网生成密钥命令:ssh-keygen-t rsa -C "$your_email"
第一步生成密钥:
ssh-keygen-t rsa -C "shijinwen@ltbl.cn"
说明:如果一切顺利的话,可以在用户主目录(/home/yourhost name/)里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSHKey的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥
第二步找到id_rsa.pub文件,将文件内容复制到github的ssh管理中(新建SSH密钥)
catid_rsa.pub /gedit id_rsa.pub
--------------------------------------------Git克隆项目----------------------------------------------
克隆项目:
gitclone git@192.168.100.22:Romaker/Romaker-Admin.git
克隆项目某个分支:
gitclone -b 分支名称git@192.168.100.22:Romaker/Romaker-Admin.git
//第一步:gitclone 项目地址 //克隆项目
//第二步:cd进入下载目录 //如果项目不位于主分支,则必须进入下载目录然后切换分支下载
//第三步:gitcheckout --track origin/dev //切换分支,检出分支内容
-----------------------------------------------Git更新项目---------------------------------------------------
1.git pull //更新代码
-----------------------------------------------Git提交代码---------------------------------------------------
第一步,用命令gitadd(gitrm)把文件添加到仓库:
gitadd 文件名称(或文件目录)[添加修改] 或 gitrm 文件名(或文件目录)[删除]
提交当前目录下所有文件:gitadd ./
第二步,用命令gitcommit把文件提交到仓库:
gitcommit -m "注释内容"
第三步,用命令gitpush 把文件推送到git服务器:
gitpush -u origin sjw(分支名称)
说明:提交新增跟提交修改是同样的步骤
------------------------------------------------Git关联远程库----------------------------------------------
要关联一个远程库,使用命令gitremote add origin git@server-name:path/repo-name.git;
关联后,使用命令gitpush -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令gitpush origin master推送最新修改;
----------------------------------------------------Git分支管理-----------------------------------------------
创建并切换到dev分支:gitcheckout -b dev
说明:gitcheckout命令加上-b参数表示创建并切换,相当于以下两条命令:
gitbranch dev //创建
gitcheckout dev //切换
查看当前分支:gitbranch //gitbranch命令会列出所有分支,当前分支前面会标一个*号
合并分支:gitmerge dev
删除分支:gitbranch -d dev
查看分支合并图:gitlog --graph
查看分支:gitbranch
创建分支:gitbranch <name>
切换分支:gitcheckout <name>
创建+切换分支:gitcheckout -b <name>
合并某分支到当前分支:gitmerge <name>
删除分支:gitbranch -d <name>
-------------------------------------------------GitBug分支--------------------------------------------
软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交:
$git status
#On branch dev
#Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: hello.py
#
#Changes not staged for commit:
# (use "git add <file>..." to update what will becommitted)
# (use "git checkout -- <file>..." to discard changesin working directory)
#
# modified: readme.txt
#
并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
$git stash
Savedworking directory and index state WIP on dev: 6224937 add merge
HEADis now at 6224937 add merge
现在,用gitstatus查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。
首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:
$git checkout master
Switchedto branch 'master'
Yourbranch is ahead of 'origin/master' by 6 commits.
$git checkout -b issue-101
Switchedto a new branch 'issue-101'
现在修复bug,需要把“Gitis free software ...”改为“Gitis a free software ...”,然后提交:
$git add readme.txt
$git commit -m "fix bug 101"
[issue-101cc17032] fix bug 101
1file changed, 1 insertion(+), 1 deletion(-)
修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:
$git checkout master
Switchedto branch 'master'
Yourbranch is ahead of 'origin/master' by 2 commits.
$git merge --no-ff -m "merged bug fix 101" issue-101
Mergemade by the 'recursive' strategy.
readme.txt| 2 +-
1file changed, 1 insertion(+), 1 deletion(-)
$gitbranch -d issue-101
Deletedbranch issue-101 (was cc17032).
太棒了,原计划两个小时的bug修复只花了5分钟!现在,是时候接着回到dev分支干活了!
$git checkout dev
Switchedto branch 'dev'
$git status
#On branch dev
nothingto commit (working directory clean)
工作区是干净的,刚才的工作现场存到哪去了?用gitstash list命令看看:
$gitstash list
stash@{0}:WIP on dev: 6224937 add merge
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用gitstash apply恢复,但是恢复后,stash内容并不删除,你需要用gitstash drop来删除;
另一种方式是用gitstash pop,恢复的同时把stash内容也删了:
$git stash pop
#On branch dev
#Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: hello.py
#
#Changes not staged for commit:
# (use "git add <file>..." to update what will becommitted)
# (use "git checkout -- <file>..." to discard changesin working directory)
#
# modified: readme.txt
#
Droppedrefs/stash@{0} (f624f8e5f082f2df2bed8a4e09c12fd2943bdd40)
再用gitstash list查看,就看不到任何stash内容了:
$git stash list
你可以多次stash,恢复的时候,先用gitstash list查看,然后恢复指定的stash,用命令:
$gitstash apply stash@{0}
-------------------------------------------------Git常用命令汇总--------------------------------------------
查看当前项目的分支信息:gitremote show origin
声明分支:gitbranchsjw(分支名) //项目有多个分支存在的情况,可以声明分支,然后切换分支就可以用gitstatus 对比本地代码文件改动了
切换分支:gitcheckoutsjw(分支名)
查看文件状态:gitstatus
查看文件修改内容:gitdiff文件名
查看提交日志:gitlog --pretty=oneline 显示从近到远的提交日志列表
回退到某个版本:gitreset --hard HEAD^ HEAD~100意思是往上回滚100个版本
gitreset --hard版本id 回滚到指定版本
查看命令历史:gitreflog
查看工作区和版本库里面最新版本的区别:gitdiff HEAD -- readme.txt
丢弃工作区文件修改:gitcheckout -- file(文件名)
说明:命令gitcheckout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是:readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是:readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次gitcommit或gitadd时的状态。
丢弃暂存区的修改,重新放回工作区:gitreset HEAD file
总结:gitcheckout -- file其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
从版本库删除文件:gitrm file
//1. git add . //往暂存区域添加已添加和修改的文件,不处理删除的文件
//2. git status //比较本地数据目录与暂存区域的变化
//3. git commit -m "commit directions" //提到代码到本地数据目录,并添加提交说明
------------------------------------------------Ubuntu常用命令---------------------------------------------
查询系统历史命令信息:history
创建目录:mkdir
删除空目录:rmdir
删除非空目录:rm-rf 目录or文件
创建文件:touch文件
查看文件:cat
编辑文件:gedit
查看文件列表:ls-la
查看当前工作目录:pwd
----------------------------------创建版本库------------------------------------
Git全局设置
gitconfig --global user.name "石锦文"
gitconfig --global user.email "shijinwen@ltbl.cn"
创建新版本库
mkdirphpTest
cdphpTest
gitinit
touchREADME.md
gitadd README.md
gitcommit -m "first commit"
gitremote add origin git@192.168.100.22:jinwenShi/phpTest.git
gitpush -u origin master
推送已存在的Git仓库
cdexisting_git_repo
gitremote add origin git@192.168.100.22:jinwenShi/phpTest.git
gitpush -u origin master