代码拉取完成,页面将自动刷新
同步操作将从 廖雪峰/learngit 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
//Sorry i copy from others , for Test
Skip to content
This repository
Explore
Gist
Blog
Help
@RoseWsp RoseWsp
Unwatch 1
Star 0
Fork 840
RoseWsp/learngit
forked from michaelliao/learngit
branch: master learngit/your-github-whatswhat.txt
@whatswhatwhatswhat on 8 Nov 2014 try fork and pull request
1 contributor
RawBlameHistory 190 lines (126 sloc) 8.403 kB
$ git init 初始化一个Git仓库
添加文件到Git仓库,分两步:
$ git add <file>
$ git commit -m "....."
$ git status
$ git diff <file> #比较工作区和暂存区文件差异 (Working Directory工作区(add操作前) 和 stage暂存区(add操作后) 的区别)
$ git diff HEAD -- <file> 查看工作区和版本库里面最新版本的区别(Working Directory工作区(add操作前) 和 Repository版本库(commit操作后) 的区别)
版本回退:
$ git reset --hard <commit_id>
$ git reset --hard HEAD^
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
$ git log 查看提交历史
$ git log --pretty=oneline
$ git reflog 查看命令历史
*
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
*
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
*
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本
撤销修改:
$ git checkout -- readme.txt 把readme.txt文件在工作区的修改全部撤销 丢弃工作区的修改
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
$ git reset HEAD file 把暂存区的修改撤销掉(unstage),重新放回工作区
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
远程仓库
$ git push -u origin master
$ git push origin master
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
从远程库克隆:
$ git clone git@github.com:whatswhat/gitskills.git 后面是仓库的地址 ssh(速度快)
$ git clone https://github.com/whatswhat/gitskills.git 后面是仓库的地址 http
分支管理
创建与合并分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
解决冲突、分支管理策略
用git log --graph命令可以看到分支合并图
$ git log --graph --pretty=oneline --abbrev-commit
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。--no-ff方式的git merge: 准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward:
$ git merge --no-ff -m "merge with no-ff" dev
Bug分支
Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
$ git stash
$ git stash list
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:
$ git stash apply
$ git stash pop
你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
$ git stash apply stash@{0}
小结
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
Feature分支
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
多人协作
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。
$ git remote 查看远程库的信息
$ git remote -v 显示更详细的信息(显示可以抓取fetch和推送push的origin的地址)
推送分支
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
$ git push origin master
如果要推送其他分支,比如dev,就改成:
$ git push origin dev
并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
*
master分支是主分支,因此要时刻与远程同步;
*
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
*
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
*
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!
抓取分支
$ git checkout -b dev origin/dev 创建远程origin的dev分支到本地
$ git branch --set-upstream dev origin/dev 设置本地dev分支与远程origin/dev分支的链接
$ git pull 把最新的提交从远程origin/dev抓下来
多人协作的工作模式通常是这样:
1.
首先,可以试图用git push origin branch-name推送自己的修改;
2.
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.
如果合并有冲突,则解决冲突,并在本地提交;
4.
没有冲突或者解决掉冲突后,再用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 tag <tagname> 新建一个标签(需先切换到要打标签的分支上)(默认为HEAD,也可以指定一个commit id)
$ git tag -a <tagname> -m "…" <commit_id> 指定标签信息
$ git tag -s <tagname> -m “…" <commit_id> 用PGP签名标签(如果报错,请参考GnuPG帮助文档配置Key。)
$ git tag 查看所有标签
$ git show <tagname> 查看标签信息
操作标签
$ git tag -d <tagname> 删除一个本地标签
$ git push origin <tagname> 推送一个本地标签
$ git push origin --tags 一次性推送全部未推送到远程的本地标签
$ git push origin :refs/tags/<tagname> (从远程删除)删除一个远程标签(需先从本地删除即先执行git tag -d <tagname>命令)
Status API Training Shop Blog About
© 2015 GitHub, Inc. Terms Privacy Security Contact
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。