git status 查看工作区状态
git diff 查看改动部分
git add 添加文件到工作区
git add -A表示添加所有内容
git add .表示添加新文件和编辑过的文件不包括删除的文件
git add -u 表示添加编辑或者删除的文件,不包括新添加的文件
git commit 提交工作区内容至github服务器
git commit -m "你的注释"
git log 查看之前提交的版本快照
git的时光机 在git中HEAD表示当前版本,那么上一个版本为HEAD^,上上个版本为HEAD^^,但过多情况下比如HEAD100表示为HEAD~100
git reset --hard HEAD^ 返回上一个版本
git reset --hard "版本号id" 返回下面第N个版本
git reflog 记录你的每一次命令
git checkout --文件名 未提交到工作区,撤回该文件操作
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
git reset HEAD 文件名 提交工作区后,撤回工作区操作
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
$ git remote add origin git@github.com:michaelliao/learngit.git 关联git
$ ssh-keygen -t rsa -C"youremail@example.com" 建立sshkeys
内容推送至远程仓库
$ git push -u origin master
内容克隆
$ git clone git@github.com:michaelliao/learngit.git 关联git
切换dev分支
$ git checkout -b dev 命令加上-b参数表示创建并切换
git branch 命令查看当前分支
$ git merge dev 合并分支
$ git branch -d dev 删除分支dev
创建并切换到新的dev分支,可以使用:
$ git switch -c dev
直接切换到已有的master分支,可以使用:
$ git switch master
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并
$ git stash可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令看看:
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:
同样的bug,要在dev上修复,我们只需要把4c805e2 fix bug 101这个提交所做的修改“复制”到dev分支。注意:我们只想复制4c805e2 fix bug 101这个提交所做的修改,并不是把整个master分支merge过来。
为了方便操作,Git专门提供了一个cherry-pick命令,让我们能复制一个特定的提交到当前分支:
$ git branch
* dev
master
$ git cherry-pick 4c805e2
[master1d4b803] fix bug101
1file changed,1insertion(+),1deletion(-)
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
当你的小伙伴从远程库clone时,默认情况下,你的小伙伴只能看到本地的master分支。不信可以用git branch命令看看:
$ git branch* master
现在,你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支:
$ git checkout -b dev origin/dev
推送失败,因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送:
$ git pullThere is no tracking informationforthe current branch.Please specify which branch you want to mergewith.See git-pull(1)fordetails. git pull If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/dev
git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:
$ git branch--set-upstream-to=origin/dev devBranch 'dev'setuptotrack remote branch'dev'from'origin'.
再pull:
$ git pullAuto-merging env.txtCONFLICT(add/add):Mergeconflictinenv.txtAutomaticmerge failed; fix conflictsandthencommit the result.
查看远程库信息,使用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 <name>就可以打一个新标签:
$ git tag v1.0
add merge这次提交打标签,它对应的commit id是f52c633,敲入命令:
$ git tag v0.9f52c633
命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;
命令git tag可以查看所有标签。
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。