大多数 Git 服务器都会选择使用 SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个。生成公钥的过程在所有操作系统上都差不多。首先你要确认一下本机是否已经有一个公钥。
SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录。进去看看:
1.查看是否已经有了ssh密钥:cd ~/.ssh
如果没有密钥则不会有此文件夹,有则备份删除
2.生存密钥:
ssh-keygen -t rsa -C "你注册github时使用的邮箱"
按3个回车,密码为空。
1、查看你生成的公钥:
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0X6L1zLL4VHuvGb8aJH3ippTozmReSUzgntvk434aJ/v7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8vR3c8E7CjZN733f5AL8uEYJA+YZevY5UCvEg+umT7PHghKYaJwaCxV7sjYP7Z6V79OMCEAGDNXC26IBMdMgOluQjp6o6j2KAdtRBdCDS/QIU5THQDxJ9lBXjk1fiq9tITo/aXBvjZeD+gH/Apkh/0GbO8VQLiYYmNfqqAHHeXdltORn8N7C9lOa/UW3KM7QdXo6J0GFlBVQeTE/IGqhMS5PMln3 admin@admin-PC
2、登陆你的github帐户。点击你的头像,然后 Settings -> 左栏点击 SSH and GPG keys -> 点击 New SSH key
3、然后你复制上面的公钥内容,粘贴进“Key”文本域内。 title域,自己随便起个名字。
4、点击 Add key。
完成以后,验证下这个key是不是正常工作:
$ ssh -T git@github.com
Attempts to ssh to github
Git 关联远程分支
创建一个空文件夹,进行初始化
git init //git仓库初始化
然后和远程仓库关联
git remote add origin git@github.com:lenve/test.git //把本地仓库和远程仓库建立关联,并把远程仓库命名为origin
这时候本地的分支和远程仓库的分支还没有任何关联,所以
git pull 拉取不到任何文件
git pull origin master //拉取远程master分支,可以拉取成功,但还是不会建立关联
git push origin master //推送提交,但还是不会建立关联
git pull --set-upstream origin master //拉取远程master分支,并建立分支关联,之后可以直接使用git pull,--set-upstream设置上游跟踪,说白一点就是和远程分支建立关联,这个参数也只用在第一次push或者pull时加上,以后直接运行git push命令即可。
git push --set-upstream origin master或者git push -u origin master //推送成功,并建立关联 --set-upstream/-u 作用一样。
git branch -a //查看远程所有的分支信息
远程仓库中已经有了某个分支了,如果我们想把某个分支也克隆下来,执行如下命令:
git checkout -b test origin/test 或者 git switch -c test origin/test //克隆远程分支test到本地,本地创建test分支,自动与远程分支建立关联,并切换到test分支
也可以通过如下命令只创建不切换:
git branch test origin/test
删除本地分支
git branch -d <分支名称>
git branch -D <分支名称> //强制删除
删除远程分支
git push origin --delete <branch_name>
别一种直接克隆
git clone 仓库地址 //拉取远程默认分支,并自动把远程分支和本地分支建立关联
git clone <repo> <directory>
- repo:Git 仓库地址
- directory:本地目录
版本回退 git撤销已经push的提交
1. git log --oneline
2. git reset --soft commitId //回退到某个提交ID
git reset --soft HEAD~1 //回退1个版本
git reset --hard commitId //回退到某个提交ID
git reset --hard HEAD~1 //回退1个版本
参数soft指的是:保留当前工作区,以便重新提交 。
还可以选择参数hard,会撤销相应工作区的修改,一定要谨慎使用。
3. git push origin master --force //强制推送到远程仓库,覆盖掉远端
这样就回退成功了,但是有人会发现,另一个同样的工程pull拉取最新代码的时候,不能拉取最新代码。这是因为有问题的工程的版本和未回退前的版本是一样的,现在回退了也就是版本降低了,pull是不可能从高版本降到低版本的。如果是这样,可以用 git branch -D step5/test 来删除本地分支,或是删除文件夹,重新下载。
当然要解决这个问题,还可以用 git revert的作用通过反做创建一个新的版本,这个版本的内容与我们要回退到的目标版本一样,但是HEAD指针是指向这个新生成的版本,而不是目标版本,这样可以保留要回退的版本,如果有其它人 pull 工程就不会取不到最新代码了。
git revert 恢复/撤销/还原
git revert -n commitId //恢复某个提交
git revert commitId //恢复某个提交后,并把此次改变创建一个新的提交
-n/--no-commit 一个作用,还原动作的变化不作为一个新的提交
官方描述
git revert HEAD~3
Revert the changes specified by the fourth last commit in HEAD and create a new commit with the reverted changes.
git revert -n master~5..master~2
Revert the changes done by commits from the fifth last commit in master (included) to the third last commit in master (included), but do not create any commit with the reverted changes. The revert only modifies the working tree and the index.
git合并提交
git rebase -i HEAD~3 //合并最近的三次提交
git rebase -i commitId //合并提交到某一次提交ID
输入命令后,会打开要合并的几次提交的记录,提交记录从上到下是从早到最新提交排序的,第一条一般是要合并到的CommitId,所以不用修改,保持为pick,其它记录,根据需要修改,一般改pick 为 s,具体参数如下:
- 选择pick指令,git会应用这个提交,以同样的提交信息(commit message)保存提交
- 选择reword指令,git会应用这个提交,但需要重新编辑提交信息
- 选择edit指令,git会应用这个提交,但会因为amending而终止
- 选择squash指令,git会应用这个提交,但会与之前的提交合并
- 选择fixup指令,git会应用这个提交,但会丢掉提交日志
- 选择exec指令,git会在shell中运行这个命令
修改完后如这样:
pick 3e60dd4 创建合并提交记录
s 627c7d7 修改合并提交记录
s 3a259d9 完成合并提交记录
然后 :wq保存,接着会提示修改 提交信息,修改或注释掉成自己想要的提交描述后,:wq保存 完成。
合并某一次提交
git cherry-pick commit_id
查找到要合并的CommitId
然后,切换到想要合并的分支,如想把develop的合并到master,切换到master,执行 git cherry-pick ee3c72,执行完之后,提交就会在master上体现了,然后push,就可以了。
Tag
命令git tag <tagname>用于新建一个标签,默认为tag建在HEAD的提交上,也就是最新的一个
命令git tag <tagname> commitId 也可以指定一个commit id建立tag;
命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;
命令git tag可以查看所有标签。
命令git show <tagname>可以查看说明文字
命令git checkout <tagname>检出标签代码
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>删除一个远程标签(先从本地删除,然后,从远程删除)。