git命令使用总结
本文档分为两部分:1、git命令的使用,本地git仓库管理。2、git服务端搭建和使用。
初始状态:
设置用户名和邮箱:
git config --giobal user.name "用户名"
git config --giobal user.email "邮箱"
一、git命令的使用,本地git仓库管理:
git基本命令:
git init 创建版本库(repository)手动创建一个目录,进入该目录下执行该命令即可将该目录设定为版本库
如:mkdir /gitdata cd /gitdata git init 这时会在gitdata下生成一个隐藏的.git文件
git add 将文件添加到仓库 编写需要上传的文件,将该文件放到版本库或版本库子文件夹下,然后执行git add 文件名 即可
如:在/gitdata下编辑了一个文件readme.txt 然后在该文件夹下执行git add readme.txt
git commit 将文件提交到仓库 将刚才添加到仓库的文件进行提交 git commit -m "提交的描述信息"
如:将刚才的文件进行提交:git commit -m "is a readme"
以上git add和git commit为合并使用命令,可以先用git add添加多个文件,然后执行git commit便一次性将刚才所有添加文件进行了提交。
git是分为三个部分,1、自己的文件(工作区);2、暂存区(stage);3、本地库(分支)。git add是将自己的文件添加到了缓存区,git commit将缓存区的文件提交到了本地库,git push是将本地库的修改推送到服务器仓库中。
git log 查看git提交修改的日志 执行git log命令即可列出历史提交的详情,输入git log --pretty=oneline可以使输出更加简洁
git reset --hard HEAD^ 将文件回滚到上一次的修改状态 HEAD加一个^是回滚一次,可同时加多个^,当太多时(100次)可使用HEAD~100
文件回滚后内容也会变为上次修改之前的内容,同时git log命令也已经无法查看回滚前的信息,这时若还有回滚前的信息,可输入git reset --hard 回滚前的id,这时便以恢复到之前的最新状态。若已找不到之前最近状态的id号则可执行git reflog来查看之前所做的操作,其中记录了id号
git有关三个区域对比的命令:git diff 工作区和暂存区的对比
git diff --cached 暂存区和分支的对比
git diff HEAD --readme.txt(readme.txt是要做对比的文件) 工作区和分支的对比
git checkout -- filename 当文件发生了修改但还没有git add到暂存区时执行该命令可以将修改撤销;当文件已经git add到暂存区之后又进行了修改,则该命令会将文件撤销到和暂存区一样的内容(注意--一定要有,否则会变成其他功能的命令)(当问文件还没有git add时手动把内容改回初始内容也可以起到相同的效果)(该命令其实是用暂存区的版本替换工作区的版本,无论是修改还是删除都可以还原)
git reset HEAD filename 当文件已经git add到暂存区但是还没有git commit时用该命令可以将文件从暂存区调回工作区,这时再配合上面一个命令可将文件内容彻底撤回
git rm 想要删除一个文件是可以用该命令,有一个文件readme.txt当你已经将该文件git commit,这时你可以先删除工作区中该文件,之后再执行git rm readme.txt,再执行git commit,这时这个文件就已经在分支中删除(git rm相当于删除了暂存区中readme.txt的镜像,然后git commit是将暂存区的所有镜像覆盖分支)
远程连接github库:
1、先创建本地私钥和公钥,然后将公钥上传到github端
ssh-keygen -t rsa -C "851****44@qq.com"(自己创建github时的邮箱) 这时生成的私钥和公钥一般在/root/.ssh/下。打开id_rsa.pub,复制里面的内容到github网站相应位置
2、用自己的本地库连接到远端github库
在github上创建一个库,例如创建learngit
git remote add origin git@github.com:wylqiuqiu/learngit.git 在本地运行该命令,origin是远程库的名字(git默认为改名字,可以设成别的),后为远程库的路径
3、git push -u origin master 将本地库的内容推送至远程库,因为是第一次推送,可加上-u参数,可把本地master分支和远端origin分支关联起来,往后再推送时可不再加该参数
4、git clone git@github.com:wylqiuqiu/ceshi.git 当远端库有一个ceshi的库,而本地端没有时,可以使用此命令将远端库的内容拉到本地库,并且会新建一个可远端库相同名字的本地库
git分支管理:
git branch 分支名 创建一个分支,如:创建dev分支,可用命令git branch dev
git checkout 分支名 切换分支,如:切换到dev分支,git checkout dev
注:可用git checkout -b 分支名 可一次创建并且切换到该分支,如:git checkout -b dev,创建dev分支并且切换到该分支
git branch 查看当前所在分支,分支前有*号的表明当前所在分支
git merge 分支名 合并制定分区到当前分支,如:现在在master分支,执行git merge dev,可将dev分支合并到master分支,这时便实现了两个分支的合并,这个工能是将最新版的合并到旧版,比如现在dev的分支版本领先与master分支,然后在master分支执行刚才的命令,可以将master提升支dev的版本(合并分支有时会有分支的上冲突导致合并失败,这时需要先将冲突解决后再进行合并)
git branch -d 分支名 删除制定分支,如:git branch -d dev,删除dev分支
git log --graph 该命令可以查看分支合并图
git merge --no-ff -m "描述" 合并分支并且禁用fast forward(快速合并),--no-ff表示禁用快速合并功能,-m则为在合并时创建一个新的commit,这种方式可以在合并后查看到分支历史
git stash 该命令可以将当前工作区或者缓存去还未提交的内容暂存到一个空间中,然后可以放心切换到其它分支工作,之后再切换回该分支可以将内容调回
git stash list 查看git stash存起来的内容列表
git stash apply 将git stash存起来的内容调回工作区,但不删除git stash list列表中的内容
git stash drop 将git stash 列表中的内容删除,配合git stash apply使用
git stash pop 将git stash存起来的内容调回工作区,并且删除git stash list中的内容,相当与git stash apply和git stash drop的结合
二、git服务端搭建和使用:
1、确保本机已安装git,没有的话使用以下命令一键安装
yum -y install git
2、创建git用户,添加密码(为了安全起见最好将git用户设为不能使用/bin/bash登录)
useradd git
passwd git
3、在本机合适位置创建存放git服务端仓库(本次使用/var/www/git目录)
4、进入该目录(/var/www/git),创建和初始化git服务端仓库
git init --bare ceshi.git 一般服务端仓库都以.git结尾,习惯而已,非强制要求
5、这时在/var/www/git目录下会出现ceshi.git目录,证明成功生成了服务端
6、修改ceshi.git目录权限
chown -R git.git ceshi.git
7、直接在本机其他目录下测试git服务端仓库是否能被clone
git clone git@ip:/var/www/git/ceshi.git
执行后会告知clone了一个空仓库,然后出现ceshi目录
8、在拉下来的ceshi目录中放入一些文件,推送到git服务端仓库
cd ceshi
echo "123" > ceshi.txt
git add .
git commit -m "first commit"
git remote add origin git@ip:/var/www/git/ceshi.git #这一步执行报错,说远端已经存在origin,直接下一步
git push -u origin master 将本地master分支推送到远端origin下,远端会生成master分支,-u参数会将本地master分支与远端master分支关联起来,以后直接git push origin master就行了
9、此时远端git服务端与本地git仓库就可以正常使用了,想要每次免密和git服务端交互的话,需要在git用户家目录的.ssh/authorized_keys中添加你git仓库主机的ssh公钥