linux安装Git
1.使用yum形式安装,会直接把依赖的包都装上
# yum install git
2.使用源码形式安装
官网地址 http://git-scm.com/
源码下载地址:https://git-core.googlecode.com/files/git-1.9.0.tar.gz
源码形式需要调用 curl, zlib, openssl, expat, libiconv等库代码,所以需要先安装这些依赖工具。
# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
安装文件下载到指定文件夹后使用如下命令安装
# tar -xvzf git-1.9.0.tar.gz
# cd git-1.9.0
# ./configure --prefix=/usr/local
# make
# make install
安装后看看版本
# git --version
git version 1.9.0
初次使用需要配置用户信息,配置个人信息可以针对三种情况,1:针对系统,2:针对当前登录用户,3:针对单个项目。
当前登录用户配置如下:
$ git config --global user.name "youname"
$ git config --global user.email "youname@example.com"
如果要针对系统则使用 --system, 针对项目则去掉--global选择就可以了
$ git config -l # 查看用户配置
服务器上创建纯仓库,--shared选项是设置该仓库加入到可写的组
# git init firstproject.git --bare --shared
进入指定目录后,clone远程仓库代码
$ git clone ssh://root@192.168.0.126:6022/data/git/firstproject.git
$ git clone ssh://root@192.168.0.126:6022/data/git/firstproject.git newproject # 自定义项目名称
$ git clone --bare ssh://root@192.168.0.106:6022/data/git/teacherapi.git # 克隆纯仓库
进入到本地项目目录后,右键菜单打开git bash
$ git init # 初始化git项目
$ git add . # 添加到暂存(staged)区域,只处理添加和修改,不处理删除
$ git add -A 处理所有:添加、修改、删除
$ git add -u 处理修改和删除,不处理新添加文件
$ git reset HEAD filename # 取消已暂存的文件
$ git reset --hard "log_hash" # 强制重置到指定版本,之后提交的文件都会被删除,并且相关提交日志也会跟着删除
$ git reset "log_hash" # 重置到指定版本,之后提交的日志都会被删除,但是之后提交的文件会恢复到未跟踪状态
$ git reset HEAD^ # 取消最后一次提交,与git reset "log_hash"效果一样
$ git revert "log_hash" # 撤销某次操作, 那次添加的文件会被删除,但提交日志不会删除,同时会增加撤销操作执行的日志
$ git reflog # 查看所有HEAD的历史,reset操作日志会记录到这里,再次使用git reset "reflog_hash"可以恢复已删除的记录
如果因为reset等操作丢失一个提交的时候,总是可以把它找回来。除非你的操作已经被git当做垃圾处理掉了,一般是30天以后。
$ git commit -m "initial project version" # 提交到本地仓库
$ git commit -a -m "commit project" # 不通过暂存区域直接提交已跟踪的文件
$ git commit --amend # 修改最后一次提交message内容
$ git checkout -- filename # 取消对文件的修改, 取消后在使用git status 查看状态应该是未修改状态
# 忽略已跟踪的文件
$ git rm --cached logs/xx.log (--cached参数表示删除仓库文件同时保留本地文件) 然后更新 .gitignore 忽略掉目标文件,在然后 git commit -m "We really don't want Git to track this anymore!" 最后推送到远程仓库 git push origin master:master
有的时候工程里面会有很多没有追踪的文件和目录,一个一个地删除太麻烦。 git clean可以帮你批量删除,非常的方便。下面介绍一下git clean的使用:
$ git clean -n 显示要删除的文件
$ git clean -dn 显示要删除的文件和目录
$ git clean -di 进入交互模式
$ git clean -f 删除未追踪的文件
$ git clean -dff 删除未追踪的目录
$ git clean -df 删除未追踪的文件和目录(不包含ignored中文件)
$ git clean -dxf # 清除所有未跟踪文件,包括纳入ignored的文件
远程仓库使用
$ git remote add origin ssh://root@192.168.0.125:6022/var/git/firstproject.git # 添加远程仓库
$ git remote rm repository_name # 删除远程仓库
$ git remote rename old_name new_name # 修改远程仓库名称
$ git remote -v # 查看远程仓库信息
$ git remote show origin # 查看指定远程仓库信息
$ git push origin master:master or git push origin master # 推送到远程分支 语法:git push[远程名] [本地分支]:[远程分支], 克隆操作会自动使用默认的 master 和 origin 名字
$ git fetch origin master # 从远程仓库抓取数据, 语法:git fetch [remote-name], 注:fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支
$ git pull origin master # 自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支,如果发生冲突可以使git rebase --abort 终止合并
$ git fetch origin # 将远程分支信息获取到本地,某些时候本地想创建分支的时候直接跟踪远程分支,但本地并无远端分支信息,就可以用该命令先获取在跟踪
$ git mv readme.txt readme # 修改文件名,需要执行commit和push命令才能更新到版本库
$ git rm *.bak # 删除文件,需要执行commit和push命令才能更新到版本库
$ git rm --cached log/*.log # 删除仓库文件的同时,保留本地文件
# 忽略文件,使用vi命令创建一个.gitignore的文件
# 在pull过程中遇到冲突问题,编辑冲突文件后,使用git add命令重新添加到缓存区后,就可以正常执行git commit命令
分支使用
$ git branch hotfix # 创建分支
$ git checkout hotfix # 切换分支,切换过程中尽量避免存在缓存区文件
$ git checkout -f develop # 强制切换分支
$ git checkout -b branch_name # 创建新分支并切换到新分支
$ git checkout -b local-branchname origin/remote_branchname # 获取远程分支的同时创建本地分支
$ git merge develop # 这个命令把分支"develop"合并到了当前分支(master)里面, 注意合并前先checkout到master分支
$ git branch -d hotfix # 删除分支
$ git branch -D hotfix # 强制删除为未并的分支
$ git branch # 查看当前分支
$ git branch -a # 查看所有分支
$ git branch -r # 查看远程分支
$ git branch -v # 查看个分支最后一次提交信息
$ git branch --no-merged # 查看未合并的分支
$ git push origin hotfix:serverfix # 本地分支hotfix推送到远程分支serverfix,如果远程分支不存在则创建
$ git checkout -b serverfix origin/serverfix # 获取到本地一份新的远程分支
$ git checkout --track origin/serverfix # 跟踪分支, 与该语句“git checkout -b serverfix origin/serverfix”效果一样
$ git push origin :serverfix # 删除远程分支
$ git push origin --delete develo # 删除远程分支
$ git branch -r -d origin/develo # 删除本地跟踪记录
$ git remote prune origin # 清除远程不存在的分支
$ git remote show origin # 查看remote地址,远程分支,还有本地分支与之相对应关系等信息。
如果当前分支已经修改了,这时候正常切换是不允许的,可以使用git stash把修改的文件暂存起来,等切换过来后在使用git stash apply 恢复之前的状态
提交记录
$ git log --all # 查看提交日志
$ git log --author=myname # 查看指定用户的提交记录
$ git log --cherry develop # 查看指定分支提交记录
合并
$ git merge hotfix # hotfix代码合并到master分支(相当于在master分支上拉取hotfix分支代码), 注意合并前先checkout到master分支
$ git merge develop --squash # 作为一个整体合并到当前分支,不会将develop里面乱七八糟的提交记录更新到当前分支,这相当于copy 操作,所以执行merge后还需要再次commit 。
$ git merge <commit-id> # 根据提交记录合并
$ git merge 合并的时候有冲突解决完 执行git rebase --continue 来继续合并。
指定文件合并,例如将bug分支explain_edit.html文件合并到develop分支explain_edit.html,可以这样操作
$ git checkout develop # 先切换到develop
$ cd zhishidian/themes/manager/knowledge/explain # 进入文件所在文件夹
$ git checkout bug -- explain_edit.html # 合并文件,合并后文件处于修改状态,注意--后面有空格。
标签使用
$ git tag -a v0.1.2 -m "发布0.1.2版本" # 创建标签
$ git fetch --tags # 获取标签
$ git checkout [tagname] # 切换标签与切换分支命令相同
$ git show v0.1.2 # 查看标签信息
$ git tag -d v0.1.2 # 删除标签
$ git push origin :refs/tags/标签名
$ git tag -a v0.1.1 9fbc3d0 # 补打标签,"9fbc3d0"通过git log获取某个提交对象的校验
$ git push origin v0.1.2 # 将v0.1.2标签提交到git服务器
$ git push origin v0.1.2:refs/tags/v0.1.2 # 指定标签提交到服务器指定位置
$ git push origin --tags # 将本地所有标签一次性提交到git服务器
$ git tag -l or --list # 查看所有标签
$ git for-each-ref --sort=taggerdate --format '%(tag)' refs/tags|tail -3 # 按时间倒序取最后3条
# 也可以这样排序
git log --tags --decorate --simplify-by-decoration
git log --tags --simplify-by-decoration --pretty="format:%ai %d"
其它
$ git rebase branch_name # 分支变基,已指定分支为基础,把当前分支已经提交的记录在追加到指定更新的分支上,这和当前分支上使用pull other_branch结果是一样的,只是执行过程不一样
$ git rebase --abort # 终止rebase,如果rebase过程中遇到冲突问题,可以使用--abort参数终止操作,解决冲突后还可以使用--continue继续rebase
$git show HEAD # 查看当前分支当前的历史状态,HEAD表示当前分支最新版本,HEAD^表示HEAD父母的信息,HEAD~4表示HEAD上溯四代的信息
git是不能add空目录的,如果想add空目录的,则需要在目录里面添加一个文件才能正常添加上,这个时候可添加.gitignore文件当一个占位符。
如果想一个(大)文件永久删除,既不要在版本库历史记录里面看到也不要占用版本库空间的话,可以使用filter-branch,具体用法参考官方文档。
$ git filter-branch --tree-filter 'rm -f testme.txt' HEAD
$ git diff settings.py # 对比文件修改内容
总结:
git里面的文件有以下几种状态
--未跟踪 (untracked)
--已跟踪 (tracked)
--已修改 (modified)
--已暂存 (staged)
--已提交 (commited)
--正常
拓展知识
SSH登录使用RSA证书认证代替密码认证
创建RSA证书
打开git bash后输入 ssh-keygen -t rsa -C "youname@example.com" 之后会在C:UsersAdministrator.ssh生成两个文件id_rsa,id_rsa.pub,这两个一个是私钥,一个是公钥,创建过程中会提示输入密码,直接忽略就行了。
把已生成的id_rsa.pub(公钥)上传到linux服务器上后,把该文件内容添加到/root/.ssh/authorized_keys文件中
可以使用如下命令:
$ scp ~/.ssh/id_rsa.pub root@192.168.0.124:/tmp/id_rsa3.pub # 使用git bash将本地文件上传到服务器
# cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys
使用git bash登录linux服务器
$ ssh root@192.168.0.126 或 $ ssh -l username remotehost
$ ssh root@192.168.0.126 -p6022 # 带端口访问
退出ssh可以使用exit命令
git命令自动补全
$ find / -name git-completion*
$ cp /usr/share/doc/git-1.8.3.1/contrib/completion/git-completion.bash ~/.git-completion.bash
$ chmod +x ~/.git-completion.bash # 设置执行权限
在 .bashrc 中加入下面这行代码,然后执行source ~/.bashrc 使其生效。
source ~/.git-completion.bash
这几篇Git文章写的不错
Git 版本管理工具(一)
http://blog.csdn.net/ithomer/article/details/7527877
Git 常用命令详解(二)
http://blog.csdn.net/ithomer/article/details/7529022
Git 常用命令速查表(三)
http://blog.csdn.net/ithomer/article/details/7529841
http://rongjih.blog.163.com/blog/static/335744612010112562833316/