代码拉取完成,页面将自动刷新
同步操作将从 廖雪峰/learngit 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
常用命令
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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。