文章目錄

git1

基本命令

git config –global user.name “Your Name”
git config –global user.email “email@example.com”
git init
git add file
git commit -m “xxx”
git status
git diff
git checkout -b dev
git merge –no-ff -m “merge with no-ff” dev
git branch -d dev

git2
checkout命令通常用来从仓库中取出文件,或者在分支中切换。
checkout命令让git把文件复制到工作目录和暂存区域。比如git checkout HEAD~ foo.c把文件从foo.c提交节点HEAD~ (当前提交节点的父节点)复制到工作目录并且生成索引。注意当前分支没有变化。
reset命令把当前分支指向另一个位置,并且有选择的变动工作目录和索引。也用来在从历史仓库中复制文件到索引,而不动工作目录。
如果不给选项,那么当前分支指向到那个提交。如果用–hard选项,那么工作目录也更新,如果用–soft选项,那么都不变。

git reset –hard HEAD^ 回退到上个版本
git reset –hard commit_id 回退到某个版本
git log 查看提交历史
git reflog 查看命令历史

Git跟踪并管理的是修改,而非文件,每次修改,如果不add到暂存区,那就不会加入到commit中。

git rm 删除一个文件

提交代码的更改一共分2个阶段。

  • 从工作目录,提交到stage。
  • 从stage提交到master。
    从工作目录提交到stage,需要用add或者rm命令,只提交到stage,而没有提交到master,是不会自动同步到master的。
    从stage提交到master用commit命令。
    退回也是要分两步,一个是从master退回到stage,然后再从stage退回到工作目录。
    对于还没有提交到stage的,可以从stage用checkout命令退回,这一步会取stage中的文件状态,覆盖掉工作目录中文件的状态,跟master完全没关系。
    对于已经到达stage的,想把state中的文件状态用master中的覆盖掉,就用reset命令,这样就把stage中修改用master的状态覆盖掉了,完全跟工作目录没关系

ssh-keygen -t rsa -C “youremail@example.com”
//本地库关联到github远程库 先有本地后有远程
git remote add origin git@server-name:path/repo-name.git
git push -u origin master
git push origin master
//github远程库关联到本地库 先有远程后有本地
git clone git@server-name:path/repo-name.git
git push origin master

git checkout -b dev 创建并切换分支
git branch 查看分支
git checkout master 切换回master分支
git merge dev 合并指定分支到当前分支
git merge –no-ff -m “merge with no-ff” dev 加上–no-ff参数,删除分支后,不会丢掉分支信息
git branch -d dev 删除分支

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
git stash
git checkout master 之前在dev分支开发,先切回主线
git checkout -b issue-101
修改bug
git commit -m “fix bug 101”
git checkout master
git merge –no-ff -m “merged bug fix 101” issue-101
git branch -d issue-101
git checkout dev
git stash pop

丢弃一个没有被合并过的分支,可以通过git branch -D name强行删除

git tag name 新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag 查看所有标签。
git show tagname
git push origin tagname 推送本地标签;
git tag -d tagname 删除一个本地标签;
git push origin :refs/tags/tagname 删除一个远程标签。

忽略某些文件时,需要编写.gitignore文件,放在仓库根目录
git config –global alias.st status 配置别名
git config –global alias.lg “log –color –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)\<%an>%Creset’ –abbrev-commit”
或者修改配置文件.git/config 添加
[alias]
co = checkout
ci = commit
br = branch
st = status
仓库目录下的.git/config是当前仓库配置
用户主目录下的一个隐藏文件.gitconfig是全局配置

参考
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
http://my.oschina.net/xdev/blog/114383
http://marklodato.github.io/visual-git-guide/index-zh-cn.html
http://www.worldhello.net/gotgithub/index.html

文章目錄