常用命令 Git 配置 git config --global 初始化Git git init 添加文件到GIt仓库 添加: git add dir/files example:git add Readme.txt 提交: git commit -m "commit instruction(本次提交的说明)" 查看仓库当前状态 git status 查看上一次修改 git diff 版本回退 查看提交日志: git log / git log --pretty=oneline 版本回退: git reset --hard commit_id git reset --hard HEAD(HEAD当前版本,HEAD^上个版本,HEAD~100上一百个版本) 重返未来: git reflog 查看命令历史,然后在其中确定commit_id 撤销修改 撤销工作区修改: git checkout -- file example: git checkout -- Readme.txt 撤销暂存区修改: git reset HEAD file 然后 git checkout -- file 删除文件 删除本地文件: rm file 然后通过 git status 可以查看删除记录 撤销删除本地文件: git checkout -- file 从git 库删除: git rm file 然后 git commit 同步 上传 要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git; 关联后,使用命令git push -u origin master第一次推送master分支的所有内容; 此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改; 下载 第一次通过Clone git clone git@github.com:michaelliao/gitskills.git git clone git@github.com:UserName/FolderName.git 平时直接用Sync 分支操作 Git鼓励大量使用分支: 查看分支:git branch 创建分支:git branch <name> 切换分支:git checkout <name> 创建+切换分支:git checkout -b <name> 合并某分支到当前分支:git merge <name> 删除分支:git branch -d <name> 分支策略 在实际开发中,我们应该按照几个基本原则进行分支管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活; 那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本; 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。 所以,团队合作的分支看起来就像这样: 小结: Git分支十分强大,在团队开发中应该充分应用。 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。 来源: <http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758410364457b9e3d821f4244beb0fd69c61a185ae0000> 其它分支 BUG 分支 修复bug时,可以另外建立一个bug分支,修改完后切换回master并合并分支,删除bug分支 去修复bug前,你要保存当前工作区,通过git stash 修复完成后返回工作区(git stash apply、git stash drop、)git stash pop Feature分支 当为系统添加新功能时可以建立一个Feature分支 多人协作 git remote 查看远程库的信息 git remote -v显示更详细的信息 git push origin master将本地所有提交推送到远程库的master分支上 git push origin dev推送到远程库的dev分支上 master分支是主分支,因此要时刻与远程同步; dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步; bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug; feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。 多人协作的工作模式通常是这样: 首先,可以试图用git push origin branch-name推送自己的修改; 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并; 如果合并有冲突,则解决冲突,并在本地提交; 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功! 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。 这就是多人协作的工作模式,一旦熟悉了,就非常简单。 小结 查看远程库信息,使用git remote -v; 本地新建的分支如果不推送到远程,对其他人就是不可见的; 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交; 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致; 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name; 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。 标签操作 发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。 Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。 打新标签 git tag <name> git tag -a v0.1 -m "version 0.1 released" 3628164 -a指定标签名,-m指定说明文字 3628164 指定commit id 查看标签git tag 查看标签信息git show <tagname> 小结 命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id; git tag -a <tagname> -m "blablabla..."可以指定标签信息; git tag -s <tagname> -m "blablabla..."可以用PGP签名标签; 命令git tag可以查看所有标签。 其它操作 git log 之后按q键返回正常模式 查看commit id:git log --pretty=oneline --abbrev-commit 当出现分支合并问题后,可以用下面这句查看分支合并图:git log --graph --pretty=oneline --abbrev-commit