---Git常用基本指令------
ls
cd
mkdir learnGit
cd learnGit
pwd
ls -ah
git init
git add readme.txt
git commit -m "说明"
git status
git diff
git log
git log --stat
git log --pretty=oneline
git reset --hard Head^
git reset --hard Head~100
git reset --hard 版本号
git reflog 后悔药
git diff HEAD -- readme.txt 查看版本库最新版本HEAD和工作区,文件差别
git checkout -- readme.txt 撤销修改(丢弃工作区的修改)
git reset HEAD readme.txt 撤销add到暂存库中的文件到工作区
git bash 进入 INSERT编辑状态,退出方法:
①若为INSERT输入状态,先ESC退出输入状态
②shift+:
③输入q!或wq!(q!表示不保存退出/ wq!表示保存退出)
-----远程仓库----
注册GitHub ,GitHub与Git本地仓库之间通过SSH加密传输,需要配置:
1.创建SSH Key 。GitBash 主目录下
$ssh-keygen -t -rsa -C "youremail@example.com" 一路回车
2.登录GitHub ,打开Account settings ,SSH Keys 页面:
然后,点"Add SSH Keys" ,天上任意Title,在Key文本框里粘贴 id_rsa.pub 文件的内容
(先有本地库想要远程库)本地与远程库关联:
关联本地库方法,本地库路径下:
git remote add origin https;//github.com/ merrily01/learngit.git
关联后即可,推送本地库内容到远程。
git push -u origin master (第一次提交时,添加了 -u 参数,不但可将本地内容推送到远程,还讲本地master分支和远程master分支关联。随后本地再做提交,就可以不加参数-u通过上面指令推送到远程)
(先有远程库想要本地库)克隆远程库:
git clone +远程库地址(GitHub上有,支持不止一种,可以git:// 或者 Https://)
远程库修改内容后,本地更新:
git pull
----------分支-------------
查看分支: git branch (会列出所有分支,当前所在分支前标*)
创建分支: git branch <name>
切换分支: git checkout <name>
创建并切换到dev 分支:git checkout -b dev (相当于 git branch dev ; git checkout dev 两条语句)
修改文件,在dev分支下add并commit,并没有改变master分支内容。确认dev分支下修改好后,提交合并到master分支即可:
在master分支下,git merge dev 即可将dev分支下提交的内容合并到master中
合并某分支到当前分支: git merge <name>
git merge --no-ff -m "说明" <branchname>
若合并冲突,手工消解,再add , commit
删除dev分支:git branch -d <name>
------Bug分支------------
修复bug时,通过创建新的bug分支进行修复,然后合并到master解决bug,最后删除bug分支。
当手头工作没完成时,可把dev工作分支git stash 一下,然后修复bug操作,最后通过指令git stash pop 恢复工作现场。
期间可通过git stash list 查看分支是否有stash记录,通过git stash apply stash@{0} 指令恢复到想到的状态。
git stash 的应用场景是:当前在dev分支开发,开发工作还未完成,不能提交,但是此时maste有bug需要修复,且修复好后想将bug处理的代码合并到dev,以免有其他影响(这样除了工作开发的代码外dev才和master同步)。所以操作应该是:先git stash dev开发分支,然后在master上新建bug分支,修复提交并合并到master上,确保master的bug已经被修复。此时切换到dev分支,先不恢复工作区(此时dev的status是没有修改状态),在dev分支下 git merge master ,即将master上修复bug 的代码合并到dev开发分支,此时dev分支和当前的master分支是一致的;然后 git stash pop 恢复工作区(此处相当于在修复好bug的dev分支上将之前的开发代码恢复回来),这是后会有合并冲突,手工消解后,现在的dev开发分支,就是修复了bug且还原到之前开发的状态!这下就可以继续正常开发,直到开发完成,然后add,commit等操作,并将dev合并到master分支中。
----新功能feature分支-----
dev开发分支工作进行时,要有新功能添加,可在dev上checkout出一个新的feature-branch 分支,用于新功能开发,新功能完成后合并到dev分支即可。合并后可删除feature分支,若中途feature功能不再进行,需删除(此时Git会提示feature分支有修改没合并)可用git branch -D feature-branch (-D表示 强制删除)。
-------分支推送----------
git remote 查看远程仓库信息 或 git remote -v 显示详细信息
git push origin master 推送其他分支如 git push origin dev
origin 是远程仓库的默认名
一般来说,master分支是主分支,需时刻与远程同步;dev分支是开发分支,团队所有成员开发工作都基于此,也需与远程同步;bug和feature分支视情况而定,一般不需要。
你的同伴从远程仓库clone时,只能看到本地的master分支,他要在dev分支上开发,就必须创建远程origin的dev,可用
git checkout -b dev origin/dev 指令创建
若你的同事已经向origin/dev分支推送了他的提交,而碰巧你也对同样的文件作了修改,并试图推送,此时提交会有冲突,Git会提示我们先git pull 把最新的代码从origin/dev抓下来,然后在本地合并,解决冲突,再push推送。
若git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接。根据提示,设置dev和origin/dev的链接:
git branch --set-upstream dev origin/dev 再 pull
------标签管理---------
创建新标签,切换到需要添加标签的分支下: git tag <tag-name>
查看所有标签: gittag
看某个标签的详情: git show<tag-name>
默认标签是打在最新提交的commit上的,要想在历史提交上打标签,需要先get log 到想要打的提交的 id,然后:gittag <tag-name>id
删除标签: git tag -d <tag-name>
推送某个标签到远程: gitpush origin<tag-name>
或一次性推送全部尚未推送到远程的本地标签: git push origin --tags
如果标签已经推送到远程,想要删除远程标签,需要现在本地删除 git tag -d <tag-name> ,
然后从远程删除,删除命令也是push,但是格式为: git pushorigin :refs/tags/<tag-name>
-----配置别名-------
git config --global alias.ststatus 这样就可以,用st代表status
类似的还可以设置:
git config --global alias.cocheckout
git config --global alias.cicommit
git config --global alias.brbranch
传说中丧心病狂的lg:
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文件中
取消别名: git config --global --unset alias.st
或 别名就在【alias】后面,需要删除别名,直接对应删除即可。
-------------fork了别人的项目,时间久了后,怎么更新到与原作者当前代码一致-----------------------
在本地机器上操作。
fork别人的项目后,是建立了一个分支在自己的GitHub中,可以将其Clone到自己本地机器上进行开发和修改。代码改动后,可以进行add/commit操作,然后push到我们自己的GitHub上。在GitHub上有个Pull Request 是将你修改的推送给原作者,审查决定是否合并到他的项目中。
但是,当时间久了,原作者代码可能已经有了很大的改变,怎么保持与他的最新的代码保持一致?
本地操作:
git remote add sri https://github.com/kraih/mojo (添加原作者项目remote地址) git fetch sri (从远程获取最新sri版本到本地) git merge sri/master (在本地master分支下操作,代表将sri/master 合并到本地master分支)
然后确定合并成功后,即可add、commit、push 到自己GitHub远程上。
-----搭建Git服务器------
--------------------------------
Git官网:http://git-scm.com