距离我接触 git 已经 1 年半了,在最开始的时候自己学了 git 却没有怎么使用。但是我相信机会是留给有准备的人的,后来中联的代码管理逐渐由 SVN 转向 git 的过程中,我都不需要怎么学习就能直接使用了。也从侧面说明,不论什么时候都应该做好知识储备,以应对环境的变化,才不会被淘汰。
今年 6 月我换了一家公司,离开了中联。在这边我可以做得更多,也可以成长得更快一些。这篇文章只是作为最近前端代码管理中之前很少用到的一些 git 命令的总结。
记住密码
在同步、提交的时候,有时候会出现输入用户名和密码,但又没有记住密码,所以每次都会输入,神烦。好在 git 为我们提供了记住密码的功能,怎么保存密码呢?
永久记住密码
1 | git config --gloabl credential.helper store |
这样就会在主目录的.gitconfig文件中生成下面的配置:
1 | [credential] |
如果没有--global,则在当前项目下的.git/config文件中添加。当然,你也可以直接复制上面的配置到配置文件中。
临时记住密码
默认记住 15 分钟:
1 | git config –global credential.helper cache |
自定义配置时间(1 小时)
1 | git config credential.helper `cache –timeout=3600` |
ssh 记住密码
除了上面两种方式,还可以通过配置 ssh
生成密钥(假设我们已经设置过了 git 的 user name 和 email)
1
ssh-keygen -t rsa -C "your email"
然后会提示你输入存放的目录,我们使用默认的设置就好,一直回车,直到生成密钥。你的用户文件夹里会发现一个.ssh 文件夹,里面有一对密钥:id_rsa 和 id_rsa.pub, 其中的 id_rsa.pub 公钥就是我们需要的
添加密钥到 ssh-agent
确保 ssh-agent 是可用的。ssh-agent 是一种控制用来保存公钥身份验证所使用的私钥的程序,简单来说就是一个密钥管理器,在运行 ssh-agent 以后,使用 ssh-agent 将私钥交给 ssh-agent 保管,其他程序需要验证身份的时候可以将验证申请交给 ssh-agent 来完成整个认证过程。
1
2
3
4eval $(ssh-agent -s)
Agent pid 59566 // pid这个不用管
<!-- 添加生成的ssh key到ssh-agent -->
ssh-add ~/.ssh/id_rsa添加 ssh key 到 git 服务器(github 或码云等)
将你 id_rsa.pub 的内容复制到 git 服务器的 authorized_keys 文件中即可
测试
1
ssh -T git@github.com
本地关联远程仓库
本地关联远程仓库本来是一个比较基础的操作,但大多数时候我们都是直接从远程克隆一个仓库到本地,也就没有这个问题。可实际上很多时候我们都会在本地先写一部分代码在直接关联到远程仓库。
本地仓库关联远程仓库(假设我们已经创建了远程仓库,也已经执行了本地初始化仓库)
1 | git remote add origin git@[your git server]:[your origin repertory path] |
注意: 如果不添加(提交)代码可能会报以下错误,如:
分支管理
分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。在不同的分支上进行不同的工作,在你需要的时候再将它们进行合并。
- 查看分支
1
2git branch // 本地分支列表,当前分支前有*
git branch -a // 所有分支,远程分支 默认为红色 - 创建分支
1
git brnach [branch name] // 本地创建分支
- 切换分支 但是我们拉去远程分支到本地不存在的分支怎么做呢?
1
2git checkout [branch name] // 本地切换分支
git checkout -b [branch name] // 本地创建并切换到分支如果出现提示:1
git checkout -b [local branch] origin/[remote branch] // 拉去远程分支到本地不存在分支
则表示拉取不成功:1
2fatal: Cannot update paths and switch to branch 'dev2' at the same time.
Did you intend to checkout 'origin/dev2' which can not be resolved as commit?1
2git fetch // 先创建并更新本 地远程分支
git checkout -b [local branch] origin/[remote branch] - 推送本地分支到仓库
1
git push prigin [origin branch]:[lacal branch]
- 合并分支
1
git merge [branch name] // 将[branch name]分支合并到当前分支
- 删除分支
1
2git branch -d [branch name] // 删除本地分支
git push origin -delete [branch name] // 删除远程分支
常见错误
gitThere is no tracking information for the current branch. Please specify which branch …
1
2
3
4
5
6gitThere is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> merged0.9.6原因是本地分支和远程分支没有建立联系(使用 git branch -vv 可以查看本地分支和远程分支的关联关系),根据命令行提示只需要执行以下命令即可:
1
git branch --set-upstream-to=origin/远程分支的名字 本地分支的名字
fatal: refusing to merge unrelated histories
出现这个问题是两个不相干的 git 仓库(本地和远程的),本地推送代码的时候,远程仓库觉得这个和自己没有关系,拒绝合并.
第一种解决方法就是把远程的代码重新下载到本地,再将当前本地的代码(修改的代码也一样)覆盖,然后重新提交即可.
第二张是使用强制合并
1
2git pull origin master --allow-unrelated-histories
git push
[越努力,越幸运!]