git 是什么?为什么要使用git ? 使用前,先去看看他的简介 Git 简介
Git 操作简介
安装
windows版本: Git-1.9.5-preview20150319.exe
TortoiseGit32位:TortoiseGit-1.8.14.0-32bit.msi
TortoiseGit64位:TortoiseGit-1.8.14.0-64bit.msi
ps:先安装 Git-1.9.5-preview20150319.exe 再安装小乌龟
安装成功后点开始-git–git bash 打开
打开git bash 默认位置是C盘,每次都要切换到D盘 workspace,这个地方可以自行修改
点桌面的快捷方式,右键属性,然后更改启始位置
安装完成
用户名和邮箱配置
git config --global user.name
"wangshoufang"
git config --global user.email wangshoufang@jd.com
如果git库地址是http格式,可以设置保存密码
git config --global credential.helper store
查看自己的所有配置
git config --list
less ~/.gitconfig
git 账号密码既自己erp账号密码
取得项目的 Git 仓库
有两种取得 Git 项目仓库的方法。
第一种是从已有的 Git 仓库克隆出一个新的镜像仓库来。
第二种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库。
第一种:
git clone http://source.jd.com/app/tuan_gittest.git
cd tuan_gittest
新开开发分支
git branch my_branch
切换到开发分支
git checkout my_branch
这两步可以合并成一个命令
git checkout -b my_branch
查看当前所在分支
git branch
查看服务器所有分支
git branch -r
删除本地分支
git branch -d branchName
删除远程分支
git push origin --delete <branchName>
删除远程tag
git push origin --delete tag <tagname>
分支切完了,开始干活
先建一个文件练练手 touch doc.txt
然后往里面写点内容 echo "helloworld" >>
doc.txt
更改完了就提交呗
提交之前需要把新加的内容添加到index中,有哪些是新加的呢?
一个命令搞定 git status -s
然后添加到索引 git add doc.txt
如果add的内容太多你可以一次性添加所有 git add xxx.txt xxx2.txt xxx3.txt 或者 git add .
添加之后然后提交 git commit -m "add helloworld by
wsf" doc.txt
这个地方需要说一下 commit 只是提交到本地的缓存区,并没有提交到真正主干,
你可以在本地commit很多次,然后再提交到主干,提交主干命令 git push origin my_branch
当两个人在同一个分支开发,不免要用到别人写的东西,这个时候你需要更新下别人的代码
git pull 更新别人的代码
代码开发完了要合并trunk ,直接合并trunk?万一有问题怎么办?
解决办法先把trunk 合并到自己的分支上
步骤1: git checkout my_branch
步骤2: git merge master 把主干的分支合并到自己分支,然后测试环境上回归下
测试通过后再合并主干
git checkout master
git merge my_branch
过程中有可能有冲突,冲突解决完了再提交
上线之前还有一个问题,上线之前把自己合并后的代码打tag,
为什么要打tag呢?有可能你上线后发现应用有问题,你准备回滚,但是trunk上也已经修改目前还不能上线,这个时候回滚就麻烦了
如果每次上线之前我们给应用打tag的话,我们就可以拿上次的tag上线
git tag -a tagname
第二种
Step1:创建项目
mvn archetype:create -DgroupId=com.jd.tuan -DartifactId=web -DarchetypeArtifactId=maven-archetype-webapp
Step2:初始化项目
cd web
git init 然后通过 ls -alt 查看会创建一个.git 文件,你的所有操作都会保存在这里面
git add . 把当前目录下的所有文件添加索引,有时候你 mvn clean package 之后会生成 target目录,这里面的内容你是不想添加到索引并且提交的,你可以通过 .gitignore 文件类过滤
touch .gitignore 然后把过滤你不想添加的内容配置如下: target/ 就可以了,git 操作的时候就会忽略里面的内容
git commit -a 第一次提交直接 -a 提交所有
最后就是push 到git 库了,这个时候到git服务器上创建一个git库,并拷贝url
git remote add origin git库地址
最后 git push origin master
这个地方提示下:一定在分支下建立一个.gitignore 文件,把编辑器默认生成的.project .setting xxx.iml target/ 放进去,避免有时候一不小心给提交进去,合并的时候很麻烦并且这些东西跟项目没关系
开发过程中的小问题
查看日志 git log
美化日志 git log --oneline
git diff HEAD
-- doc.txt 当前目录和缓存区的不同
发现自己改的某个文件乱七八糟想重新来怎么办?(未提交到缓存区,之前有提交过,这个过程不可逆)
git checkout
-- doc.txt
git reset HEAD 可以用来清除已经add到缓存区但是不想进一步提交的内容。
git reset –hard HEAD^恢复到上一版本上 (已经提交到分支上)
git reset
–hard commitid恢复到某个commitid上面 (已经提交到分支上)
当你恢复到之前版本时,发现回滚错误,使用git log 也没有的时候怎么办?
git reflog 查看所有所有log
问责,查看某个文件的提交人
git blame filename
查看某次提交具体提交的内容
git show commitid
git revert HEAD 还原最近一次提交的修改
git revert commitid 还原指定版本的修改:
场景: 某天你正在coding,然后xxx领导跑来跟你说,线上有个紧急的bug,你赶紧去把问题给fix掉!这个时候你的第一反应是不是从当前master上面重新切个分支?git checkout -b 20141210_xxx_bug ?
这个时候会有一个问题的,你刚刚写的内容和这个bug是没关系的,是不想提交的,并且不想带入当前分支的怎么办?
git stash暂存未提交的代码 然后切换到master上面重新切分支
git stash pop恢复并且删除stash里面内容
git stash
apply stash@{1}恢复但是不删除stash里面内容
git stash
drop stash@{1}删除stash里面内容
### 有写常用的命令可以保存快捷方式
vim ~/.bashrc
alias ll="ls -lt"
source ~/.bashrc
### git log
--oneline:单行显示历史信息,包括7位的commit哈希值和注释信息的首行
-数字:显示指定条数的log信息,可以跟任意整数
--graph --all:以图形的方式显示多条分支的历史信息,一般配合--oneline参数执行
--stat:显示每次提交的文件变动列表
-p:显示每次文件变动的具体内容
文件名:显示某个文件的历史变动
提交范围:显示某一个范围的提交,使用提交的哈希值标识(git log fwj9e8..HEAD 显示从fwj9e8到最新点的信息)
### 本地文档查看
git [command] --help
### 参考文档