本文是向大家介绍git的基础操作、相关配置以及与idea的整合使用,希望能给开发同学带来更好的开发体验和提升开发效率,让你的开发得心应手。
一、git是什么
Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。 Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发。Git 是根据GNU通用公共许可证版本2的条款分发的自由/免费软件,安装参见:Git
GitHub是一个基于Git的远程文件托管平台(同GitCafe、BitBucket和GitLab等)。
Git本身完全可以做到版本控制,但其所有内容以及版本记录只能保存在本机,如果想要将文件内容以及版本记录同时保存在远程,则需要结合GitHub来使用。使用场景:
- 无GitHub:在本地 .git 文件夹内维护历时文件
- 有GitHub:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库
二、git的三个区
工作区(working Directory):简单的理解你在电脑里能看到的目录。
暂存区(stage):Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
版本库(Repository):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
要完成一次完整的提交,我们需要git add->git commit才可以,就像我们去购物一样,先把东西放到购物车,在去结账是一样的。
三、git常用指令及idea的git操作
git add 命令
可将该文件添加到暂存区
添加一个或多个文件到暂存区:
git add [file1] [file2] ...
添加指定目录到暂存区,包括子目录:
git add [dir]
添加当前目录下的所有文件到暂存区:
git add .
对应idea操作
推荐使用快捷键 ctrl + alt + A
git commit 指令
git commit -m [message] 提交本次修改到本地
git log 找到提交记录,找到要还原的commit的上一个commit_id
git reset commit_id :将会把commit 还原到commit_id这一步
git reset --hard commit_id : 将会把commit还原到commit_id这一步,同时会把要还原的commit的本地修改还原,谨慎使用这个
idea推荐使用快捷键 ctrl + k
pull、push指令
git pull <远程主机名> <远程分支名>:<本地分支名>
更新操作:
$ git pull
$ git pull origin
git push <远程主机名> <本地分支名>:<远程分支名>
以下命令将本地的 master 分支推送到 origin 主机的 master 分支。
$ git push origin master
相等于:
$ git push origin master:master
如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数:
git push --force origin master
idea中推荐使用快捷键
ctrl + t 拉取远程更新
ctrl + shift + k 推送到远程
git新建分支
git checkout -b iss53 新建一个分支并同时切换到分支上
Switched to a new branch "iss53"
把本地分支推送到服务器上
$ git push origin iss53
idea快捷键 ctrl + shift + ~ 按出弹窗后 可以新建分支 和 checkout 切换分支
git暂存
git stash
git stash apply
git stash save '消息';修改暂存到本地,本地恢复
git stash pop 将暂存覆盖过来
git合并分支
切换到想要合并的分支
git checkout
合并分支
git merge
删除分支
git branch -d XX
git branch -D xx 强制删除
更改分支名称
git branch -m old_branch new_branch
// Rename branch locally
git push origin :old_branch
// Delete the old branch 注意这里冒号前有一个空格
tag(标签)管理
git也可以在某个时间点打上一个版本标签,例如在某个时间打一个版本,方便标识。
git tag 查看tag(标签)列表
git tag -d v1.1 删除v1.1tag
git tag v1.0 添加本地标签v1.0
git tag -a tag_name -m '注释' 添加本地标签同时加上注释。
此时tag标签都只是在本地库里,还未提交到远程仓库。
git push origin v1.0 将 tag v1.0 提交到远程仓库
删除远端仓库的tag
git push origin :refs/tags/tag_name
根据tag创建分支
现在主分支上有一个tag为v1.0.0,主分支的名字为master.
1.执行:git origin fetch 获得更新
2.根据tag创建新的分支
git branch <new-branch-name> <tag-name>
例如:
git branch newbranch tag_v1.0.0
会以tag_v1.0.0的仓库,创建新的分支newbranch;
3.再通过
git checkout newbranch
切换到新的分支.
分支比对
推荐使用idea对比
选择上需要对比的分支或者版本
四、git配置多个代码平台
需求:有时候我们的代码托管在多个平台上,这就需要为每个托管平台设置SSH-key
1.生成一个gitee用的SSH-Key $ ssh-keygen -t rsa -C "1393081219@qq.com" -f ~/.ssh/gitee_rsa 2.生成一个github用的SSH-Key $ ssh-keygen -t rsa -C "1393081219@qq.com" -f ~/.ssh/github_rsa
在相应的远端添加公匙
如果执行ssh-add时提示”Could not open a connection to your authentication agent”
可以先执行命令:
$ ssh-agent bash
然后再重新运行ssh-add命令:
$ ssh-add ~/.ssh/id_rsa $ ssh-add ~/.ssh/github_rsa
添加后我们可以通过 ssh-add -l 来确私钥列表
$ ssh-add -l
如果想删除私钥列表,可以通过 ssh-add -D 来清空私钥列表
$ ssh-add -D
若.ssh目录(就是私钥所在的文件夹)下无config文件,那么创建
touch config
在config文件添加以下内容
# gitlab Host github.com Port 22 HostName github.com PreferredAuthentications publickey IdentityFile C:/Users/xiaohaozi/.ssh/github-rsa User xiaohaozi # smartgit Host smartgit HostName smartgit PreferredAuthentications publickey IdentityFile C:/Users/xiaohaozi/.ssh/id_rsa User xiaohaozi # 配置文件参数 # Host : Host可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和ssh文件(可以直接填写ip地址) # HostName : 要登录主机的主机名(建议与Host一致) # User : 登录名(如gitlab的username) # IdentityFile : 指明上面User对应的identityFile路径 # Port: 端口号(如果不是默认22号端口则需要指定)
在.ssh目录创建config文本文件并完成相关配置(最核心的地方)
每个账号单独配置一个Host,每个Host要取一个别名,每个Host主要配置HostName和IdentityFile两个属性即可
Host的名字可以取为自己喜欢的名字,不过这个会影响git相关命令,例如:Host mygithub 这样定义的话,命令如下,即git@后面紧跟的名字改为mygithub
例如:git clone git@mygithub:PopFisher/AndroidRotateAnim.git
HostName 这个是真实的域名地址
IdentityFile 这里是id_rsa的地址
PreferredAuthentications 配置登录时用什么权限认证--可设为publickey,password publickey,keyboard-interactive等
User 配置使用用户名
测试
$ ssh -T git@github.com
输出
Welcome to GitLab, your name!
则说明成功了。