我这里以为例gitee说明。
1. 添加远程仓库
1.添加公钥
$ ssh-keygen -t ed25519 -C "Gitee SSH Key"
# -t key 类型
# -C 注释
2.创建远程仓库
通常情况下远程仓库名称和本地名称一致,方便区分。
3.关联仓库并提交文件
根据提示,既可以新建本地仓库与远程仓库,也可以使用已有的本地仓库。
$ git remote add origin git@gitee.com:xie_xuchun/study_git.git
origin
是给远程仓库起的名称。
$ git push -u origin "master"
把本地库的内容推送到远程,用git push
命令,实际上是把当前分支master
推送到远程。
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送到远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
$ git push origin master
说明:当你第一次使用Git的clone或者push命令连接Gitee时,会得到一个警告,这是因为Git使用SSH连接,而SSH连接在第一次验证Gitee服务器的Key时,需要你确认Gitee的Key的指纹信息是否真的来自Gitee的服务器,输入yes回车即可。Git会输出一个警告,告诉你已经把Gitee的Key添加到本机的一个信任列表里了。
2. 删除仓库
在删除仓库之前,我们需要先查看当前仓库的信息。
$ git remote -v
然后,根据名字删除,比如删除origin:
$ git remote rm origin
说明:“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。
3. 从远程库克隆
上面我们是先有本地库,然后才创建和关联的远程库。现在我们不创建本地库,直接从远程库进行克隆。
1.创建远程库
为了方便查看变化,给他初始化一个readme的文件。
2.克隆到本地
$ git clone git@gitee.com:xie_xuchun/we-are-study.git
说明:Gitee给出的地址不止一个,还可以用
https://gitee.com/xie_xuchun/we-are-study.git
这样的地址。实际上,Git支持多种协议,默认的git://
使用ssh,使用https除了速度慢以外,每次推送都必须输入口令。
4. Bug分支
每个Bug都可以通过创建临时分支来修复。修复后,合并分支,然后即可删除临时分支。
问题?我的dev分支代码还没完成,就创建临时分支,该如何提交?
方法:可以通过stash
把当前现场储藏起来,等以后恢复现场后再继续工作。
$ git stash
假定我们现在要在master分支修复代码,这时就可以在master分支上创建临时分支。
$ git checkout master
$ git switch -c issue-101
# 然后进行代码修复
$ git add readme.txt
$ git commit -m "update bug" # 18dda07
然后切换到master分支进行合并,再删除bug分支。
$ git switch master
$ git merge --no-ff -m "merge bug" issue-101
现在bug修复完成了,我们又可以回到dev分支继续干活了。
$ git switch dev
$ git status
此刻dev分支是干净的,因为我们之前将现场储藏了起来,可以通过
$ git stash list
查看。可以发现有一个隐藏。
现在我们就可以恢复现场了。
$ git stash apply
# 或者使用
$ git stash pop
# 两个区别就是恢复完成之后是否删除stash内容,使用后者会进行删除。
当然,你如果有多次stash,可以恢复指定的stash。
$ git stash apply stash@{0}
思考:刚才是在新建的临时分支上修改的bug,但是我当前工作的分支并没有这个修改,如果重新写一遍就是重复造轮子了,怎样让这些修改在dev分支上重放?
这时,我们可以查看之前新建分支上提交的commit_id
,将他重放到dev上。
在储藏的情况下先做重放,然后回复现场。
$ git cherry-pick 4c805e2
git给dev分支自动做了一次提交。使用了cherry-pick
,就不需要在dev分支重复修改bug了。
5. feature分支
实际的工作中,各种新功能是非常多了,但是我们又不希望新的功能将主分支搞乱,这个时候对于新的功能需求,就可以新建一个feature分支,在上面开发,完成后合并,最后删除该feature分支。
$ git switch -c feature
$ git add readme.txt
$ git commit -m "new"
一切顺利的话,就可以切换到dev合并代码了
$ git switch dev
但是这时出了意外,新功能不需要了,那么直接删除feature分支就可以。
$ git branch -D feature
说明:如果我们合并过了,可以使用-d
,但是这种没有合并就删除的情况需要使用-D
进行强制删除。
6. 标签管理
1. 创建标签
在Git中打标签非常简单,首先,切换到需要打标签的分支上,比如dev分支:
$ git switch dev
然后在当前分支打标签
$ git tag v1.0
默认标签是搭载最新提交的commit上的。如果要对历史某一次提交打标签,需要找到历史的某次提交commit_id,然后打标签。
$ git tag v0.9 db6707e
还可以创建带有说明的标签,用-a
指定标签名,-m
指定说明文字。
git tag -a v0.1 -m "This is v0.1" f8d7e15
查看标签
$ git tag
$ git show v0.9
git tag
列出所有的标签。git show v0.9
,列出某一个tag的详细信息。
2. 操作标签
本地删除标签
$ git tag -d v0.1
创建的标签只存储在本地,不会自动推送到远程。可以安全删除。
远程推送标签
如果要推送某个标签到远程,使用命令git push origin <tagname>
$ git push origin v0.9
或者,一次性推送全部未推送到远程的本地标签:
$ git push origin --tags
远程删除标签
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
$ git tag -d v0.9
然后,从远程删除。格式如下:
$ git push origin :refs/tags/v0.9