- 生成公钥,添加公钥的参考
- Mac本地生成SSH Key 的方法
- 服务器上的 Git - 生成 SSH 公钥
- 添加公钥到码云上的项目公钥的管理中心即可,注意是部署公钥还是个人公钥要区分开,然后
git clone 地址
就可以了
一、Git常用命令
-
git add 目录/* // 将目录下的文件添加到本地
-
git reset HEAD 目录 // 将git add 添加到缓存的文件取出来
-
git pull // 将master分支下的远程仓库中的git库文件最新版本pull下来,前提是没有修改当前目录下的git文件,若
-
git pull origin dev-conn // 将origin dev-conn的分支下的代码pull下载下来
-
git pull --rebase // 从暂存区把你之前提交的内容取出来,跟拉下来的代码合并,不会产生Merge的提交;
-
git commit -m “此次更新的概要” // 为添加到本地的文件进行注释
-
git log // 检查git版本的log
-
git status // 检查git版本的状态
-
git stash //备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
-
git diff // 检查当前克隆的文件的修改的情况
-
git format-patch -s ed1ec367528f850f978 // 为当前已经提交到本地的git库文件打patch,可以不用将该文件上传到服务区,然后将该patch直接传给别人,放到相同的git库clone的目录下
-
git am 0001-sleepace-review.patch // 将别人发过来的patch,放到相同的git库的目录下之后,执行该命令,即在代码中增加了patch,然后可以通过git log查看是否添加成功
-
git reset --hard dbb6e410b7123dcf315106f22e6a1ed3a3dc05c0 // 回滚到这个commit号的git代码文件状态下
-
git remote // 不带参数,列出已经存在的远程分支
-
git remote show origin // 先查看远程地址,origin 是默认的远程版本库名称
-
git remote -v | --verbose // 列出详细信息,在每一个名字后面列出其远程url
-
git remote set-url origin // 更换远程仓库地址。把更换为新的url地址。
git remote set-url origin https://github.com/AnkieEatApple/ThinkInJava.git,这里不是初始化git项目的时候使用的,初始化项目请参考下文 -
git config --global user.name “ankie” // 配置全局用户名,不加global就是本文件夹内的
git config --global user.email ankie@163.com // 配置全局用户邮箱
git commit --amend --reset-author // 最后一次配置作者信息
git config user.name // 查看当前用户名
git config user.email // 查看当前邮箱名 -
git fetch //刷新git服务器端的分支,更新本地的现有分支
-
git reset HEAD^ // 撤销本次本次提交,指提交到本地还没有提交到服务端的commit
-
添加ssh-key
- cd .ssh // 打开ssh目录
- ssh-keygen // 生成keygen,一路yes即可
- cat id_rsa.pub // 检查生成的keygen,打开git的SSH-KEYS目录,将生成的key复制粘贴到key中,然后git clone ssh的地址即可
-
git commit --amend: 修改已经commit的最后一行的commit信息,未push上去的
二、切换分支
- git branch // 检查当前的分支(本地分支)
- git branch -a // 检查当前的所有分支(包括服务器上的)
- git branch mybranch // 创建mybranch分支
- git checkout . // 清理当前的git分支下的代码,一般是无用的代码,直接清空
- git checkout mybranch // 切换到mybranch分支上,这个时候需要把本地的代码提交完,也就是工作空间没有需要提交的代码
- git checkout -b mybranch origin/mybranch // 创建一个新的分支,并切换到该分支,该分支是基于origin/mybranch创建的
- git branch -vv // 本地分支关联(跟踪)的远程分支之间的对应关系,本地分支对应哪个远程分支
- git push origin 分支名 // 远程分支就是本地分支push到服务器上,比如master就是一个典型的远程分支
- git checkout —track origin/分支名 // 远程分支和本地分支需要区分好,所以,在从服务器上拉取特性分支的时候,需要指定远程分支的名字
- git push origin HEAD -u // 创建完之后本地分支之后,提交该分支到服务器
- git push origin <local_branch_name>:<remote_branch_name> // 提交分支数据到远程服务器,一般当前如果不在该分支时,使用这种方式提交,如果在当前分支名下,也可以直接提交:git push
- git branch -d origin:develop //删除远程分支
- git merge v1.0 // 将当前分支和v1.0分支和并,当前遇到的情况是目前分支为master,然后将dev的v1.0分支合并到master上,合并之后需要
git push
到服务端上 - git tag -a 1.0 77e1cc1d6567d26c01 -m “后台可发布版本1” // 将目前的版本打一个tag,也需要push到服务端
git push origin --tags
, 方便之后查找,在打完tag之后可以在网站上点发布版本,可以通过git tag
上查看当前的tag。 - git branch --set-upstream-to=origin/develop develop,本地分支关联远端分支
在原有分支上,向切换到另一个分支上,本地且没有的情况下,不能直接checkout 到想下载的分支,要先在本地创建一个分支,然后在将该分支和远程代码链接,再pull,具体可以参照命令5,直接一步到位。然后再 git pull 下。
若当前查看git branch -a没有查看到所需要的分支,则对当前执行git fetch,含义为获取远程的所有的分支。
三、git pull 情况说明
当同一个代码在不同地方被修改,但是修改不是同一文件的时候,可以通过git pull --rebase来解决直接git pull产生的自动commit的Merge的情况,但在使用git pull --rebase时使用步骤:
- 先git add自己的代码,然后git commit -m “本次提交的概要”;
- 然后执行git pull --rebase ,有冲突修改冲突,没有冲突直接可查看git log;
- 当服务器文件和自己本地文件有冲突时,打开命令行提示的文件,打开该文件,修改文件中head之后的重复的部分,修改过程中,尽量只是修改提示冲突的地方,然后将git status,将发现有冲突的文件已经修改,然后git add,将该文件提交至本地,此次不必在commit,然后git rebase --continue,会自动commit上次提交的内容,此时本地就已经更新完,可以通过git log查看,然后可以通过git push提交该文件到服务器上;
- rebase 在拉代码前要确保你本地工作区是干净的,如果你本地修改的内容没完全 commit 或者 stash,就会 rebase 失败;
- rebase就是假装你这份代码是从你指定的那个commitment开始改的,git会重新计算diff,然后存进去。主要是为了减少一些垃圾commitment出现在history里面。
在gitlab中clone代码的时候,遇到了HTTP Basic: Access denied,此时在网上搜索的解决问题有存在登陆账号密码错误的情况,直接清空账号密码,还有可能是需要使用Personal Access Tokens来登陆
- sudo git config --system --unset credential.helper // 清空账号密码,再次clone的时候需要重新设置 user.name和 user.email
- 生成Personal Access Tokens: 在个人
settings
里面的Access Tokens
里面的Personal Access Tokens
选项中,添加自己的账号,选择api
选项,然后点击生成create personal access token
,将上面的Your New Personal Access Token
的密码记住,这个token
密码就是clone
登陆的账号密码,而不是登陆gitlab
的密码。 - git pull --force // 强制拉去代码到本地,一般不推荐使用,如果只是想放弃本地的临时提交,强制将远程仓库的代码覆盖到本地分支。
四、Commit message格式
- Commit message 都包括三个部分:Header,Body 和 Footer,格式如下:
- git commit -m “fix(设置): 还原设置操作没有等待底层回调结果.”
- feat:新功能(feature)
- fix:修补bug
- modify:修改代码
- add:追加代码
- feat:新功能(feature)
五、创建新工程关联到Github上的流程
- 首先建立工程,先不着急添加项目代码,先和github先关联上,首先应该创建一个README.md文件,里面写个题目就好了
- 打开本地项目的根目录,然后执行git命令:git init
- 将项目的所有文件添加到仓库中:git add .
还是的git add . 因为到时候git pull 下来的东西无法运行啊 - 将add的文件添加到本地仓库中:git commit -m “first commit”
- 去github上创建自己的Repository,点击下面的Create repository,就会进入到类似下面的一个页面,拿到创建的仓库的https地址
- 重点【关联】,将github和本地仓库关联起来:git remote add origin https://github.com/hanhailong/CustomRatingBar
- 上传github之前,要先pull一下,执行如下命令:git pull origin master
- 最后一步,将代码上传到远端的github远程仓库:git push -u origin master
- 上面的这个,这里若是想强制将本地的代码直接替代云服务上的代码,一般都是首次提交使用,可以直接使用git push -u origin master -f
- 然后开创新的分支,git checkout -b v1.0 origin/master
- 提交到服务器,git push origin HEAD -u
- 可以查看,本地的分支和服务端的远程分支,git branch -vv
- 这里提交push的时候出现failed to push some refs to git的时候,并且使用git push -u origin master不好用的时候,可能是由于当前的本地仓库中没有readme文件,不在本地代码的目录中,这里将使用git pull --rebase origin master,合并代码后,再push即可
六、保存缓存
- git stash :将开发的代码保存到缓存区
在当前代码正在开发中,然后需要跳转到其他分支的情况下,所有的代码不能revert的情况下,需要将当前写的代码保存起来,可以使用git缓存机制 - git stash list : 查看缓存起来的所有的代码
- git stash pop --index stash@{0} :恢复stash编号为0的缓存的代码,
git stash pop [–index] [] 恢复工作进度,
–index 参数:不仅恢复工作区,还恢复暂存区
指定恢复某一个具体进度。如果没有这个参数,默认恢复最新进度 - git stash save “保存进度的注释” : 可以直接保存当前的进度,同时还对该保存的进度添加了注释,相当于git stash + 注释
- git stash drop []: 删除某一个进度,默认删除最新进度
- git stash clear: 删除所有进度
- git stash branch 基于进度创建分支
八、合并本地分支和修改commit的数据
- git rebase -i fd76c72cabe88b70481 : 将提交该fd76c72cabe88b70481版本号上面的所有分支合并起来
- 进入Vim的界面,此时若是执行出现Could not execute editor错误,需要将vim配置成git的专用编辑器,使用命令为
git config --global core.editor vim - 在打开的界面中选中不需要的commit,在其前面将pick改为s,然后保存退出,会直接打开另一个界面,打开这个界面后,将不需要的commit语句直接删除掉,然后保存退出,这样就保存成功啦!
- git commit --amend : 修改已经提交上本地的commit的语句,在打开的界面修改之后,保存退出即可。