关于基本信息的配置
项目本机部署过程中的若个问题中提过从远程仓库克隆一个项目首先要配置用户信息,下面信息是默认用户信息配置
git config --global user.name "nick"
git config --global user.email "nick@example.com"
然后执行ssh-keygen -t rsa -C "nick@example.com",生成sshkey,粘贴到托管平台上
git clone git@git.example.com:XX/project.git克隆一个项目
但有时侯特定项目需要特定的用户信息,则进入项目根目录执行
git config user.name "yyyanother"
git config user.email "yyyanother@example.com", 要查看当前信息,执行git config –list
注意生成针对该账户的ssh时会覆盖原来的rsa文件
有时候别人已经用http的方式将项目克隆下来,当执行
git pull origin master的时候还是会要求你输入口令,以http的方式传输,通过命令
git remote -v 查看远程信息其地址还是以http开头。
执行git remote set-url origin git@git.oschina.net:xxxxx/product.git改成以ssh方式,并生成粘贴sshkey。
一般操作流程
git pull origin master 从远程库获取最新版本并merge到本地
格式为
git pull <远程主机名> <远程分支名>:<本地分支名>
如果与当前分支合并,则可以省略本地分支名。
如果想保险一点,可以先获取origin/master分支,与当前分支比较,再将其合并到当前分支:
git fetch origin master
git diff master origin/master
git merge origin/master
git status 查看库中状态
git add . 将当前工作目录所有文件添加到暂存区
git commit -m ‘message’ 将暂存区内容添加到本地仓库
git commit -am "<message>" git add和git commit -m的组合,前提是被改文件被tracked
git diff 比较工作区和暂存区的差异,加上 --chached 后比较暂存区和上一次提交快照的差异
git push origin master 将本地分支推送到远程仓库
关于撤销操作
git checkout -- filename 撤销工作区文件修改,使文件内容与版本库一致
若该文件修改已经添加到暂存区(git add),则git checkout操作后文件内容与暂存区一致,
这个时候需要先执行git reset HEAD filename 将暂存区修改撤销,再执行上面git checkout命令。
若文件已经提交到本地仓库(git commit),则需要先回退版本,执行git reset --hard HEAD^ 回退到上一个版本。也可以通过git reset --hard commitid命令,commitid可通过
git log --pretty=oneline 获取。注意,这个时候由于使用了--hard参数,暂存区和工作区的修改都会被撤销掉。该命令同样可以用来撤销还没commit的merge。
--soft – 暂存区和工作区都不改变
--mixed – 默认选项。缓存区和commit同步,但工作区不受影响
--hard – 缓存区和工作区都同步到指定的commit
如果想回到reset之前版本,则可通过git reflog获取commitid,再次执行命令git reset --hard commitid。
关于分支
git默认克隆整个远程仓库,但本地只默认创建一个master分支,如果要在其他分支上工作,则可以通过git branch -a命令查看分支,针对某个分支执行命令:
git checkout -b branchname origin/branchname
git branch 查看分支
git branch -a 列出本地分支和远程分支
git branch branchname 创建分支
git checkout branchname 切换分支
git merge another 合并another分支到当前分支
合并有冲突,必须解决冲突,然后git add命令标记冲突已解决,最后提交版本库。
git branch -d branchname 删除分支
其他
1、有时候版本管理时我们需要忽略一些文件,工作区根目录下有个.gitignore文件,示例内容如下:
/target/
.classpath
.project
*.log
2、
想象下你正在开发一个功能,突然有一个不得不解决的bug,你新建一个bug分支,但是当前dev分支的工作正做到一半,你不得不先commit再去切换分支,或者强制切换分支,这样就会把当前修改带入bug分支,产生冲突,所以在切换分之前,要保持一个清洁的工作区域,可以先commit,但最好使用stash命令:
git stash 保存当前工作状态以切换到其他分支
git stash list 查看储藏状态列表
git stash apply stashname 切换到原来分支后,切换到当时的工作状态
参考链接:
http://www.cnblogs.com/lwzz/archive/2013/02/23/2921426.html
http://www.ruanyifeng.com/blog/2014/06/git_remote.html