您的位置:首页 > 其它

Git使用笔记

2015-08-31 12:12 399 查看
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 --chached 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 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 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:\Users\Administrator\.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文章写的不错

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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: