建立远程仓库,无非就是想把本地创建的git仓库上传到github仓库,达到本地和github的同步,首先进入github官网创建一个账号,然后进行项目的创建 , 点击“Create repository”按钮
然后使用github创建好的SSH 进行本地仓库的克隆
首先找到本地的一个目录,使用 git clone 本项目在github上的SSH地址
克隆好之后,把你本地创建好的项目中的内容复制到本地克隆好的仓库的目录下
克隆好之后,把你本地创建好的项目中的内容复制到本地克隆好的仓库的目录下
然后使用 git add -A 进行全部内容的添加,先添加到暂存区,在使用 git commit -m"this is first commit" 把暂存区的内容提交到本地仓库中,在使用push 到远程仓库中, 达到同步的目的。
创建与合并分支
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout -b name
合并某分支到当前分支:git merge name
删除分支:git branch -d name
用git log --graph命令可以看到分支合并图.
git merge --no-ff -m"merge with no-ff" dev
--no-ff 表示不使用Fast forward快速模式合并分支,如果使用这种方法 因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
合并后,我们用git log看看分支历史:
$ git log --graph --pretty=oneline --abbrev-commit
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了
用git stash list命令查看隐藏的工作区
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除
要查看远程库的信息,用git remote
或者,用git remote -v显示更详细的信息
当你的小伙伴从远程库clone时,默认情况下,你的小伙伴只能看到本地的master分支。不信可以用git branch命令看看
现在,你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支
$git checkout -b dev origin/dev
推送失败,因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送
git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接
$ git branch--set-upstream dev origin/dev
$git pull
创建标签
命令git tag name 用于新建一个标签,默认为HEAD,也可以指定一个commit id
git tag -a name -m "blablabla..."可以指定标签信息
git tag -s name -m "blablabla..."可以用PGP签名标签
命令git tag可以查看所有标签
$git tag v1.0 创建一个标签
$git tag v0.96224937 给特定的commit id 添加标签
$ gitshowv0.9 查看标签内容
$git tag -d v0.1 删除标签
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,使用命令$git push origin v1.0
或者,一次性推送全部尚未推送到远程的本地标签: $ git push origin --tags
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:$git tag -d v0.9
然后,从远程删除。删除命令也是push,但是格式如下:$git push origin:refs/tags/v0.9
要看看是否真的从远程库删除了标签,可以登陆GitHub查看
让Git显示颜色,会让命令输出看起来更醒目:$git config --global color.uitrue
如果你你发现,.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查
忽略某些文件时,需要编写.gitignore;.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
配置别名
如果敲git st就表示git status那就简单多了
我们只需要敲一行命令,告诉Git,以后st就表示status:
$git config --global alias.st status
--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用
命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区。既然是一个unstage操作,就可以配置一个unstage别名:
$git config --globalalias.unstage'reset HEAD'
当你敲入命令:$git unstage test.py
实际上Git执行的是:$ git reset HEAD test.py
配置一个git last,让其显示最后一次提交信息:$git config --global alias.last 'log -1'
配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
配置文件放哪了?每个仓库的Git配置文件都放在.git/config文件中:
$cat .git/config
别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。
而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中:
这是一个好东西
git config --globalalias.lg"log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
$git lg