Git学习笔记(详细)、idea集成
概述
- 官网:https://git-scm.com/
- Git是一个免费的、开源的分布式版本控制系统
- 代码托管中心(远程库):局域网GitLab、互联网GitHub、码云Gitee
安装
- 官网下载,直接默认安装即可(尽量不要修改路径),鼠标右键出现
Git Bash Here
即安装成功。 - 查看版本:git bash 里面执行
git --version
- 使用技巧
- git bash很卡,清理windows临时目录可以解决:
C:\Users\Administrator\AppData\Local\Temp
- 在某个目录下鼠标右键选择
Git Bash Here
即可进入当前目录 Ctrl + 鼠标滚轮
:可以修改字体大小- 所有的配置都在
cat ~/.gitconfig
文件里 tab
命令补全
- git bash很卡,清理windows临时目录可以解决:
- git仓库隐藏目录
.git
HEAD
:指定在哪个分支refs/heads/master
:有当前的版本号(结合分支确定在哪个分支的哪个版本上)
常用命令
工作区的任何修改都要先add到暂存区,然后commit版本库,再push到远程
git --help
查看所有命令git xxx --help
查看某个命令的网页帮助文档,-h
在命令行显示帮助文档--dry-run
显示哪些修改会提交,不实际执行
# 设置用户签名
$ git config --global user.name xxx
$ git config --global user.email xxx@example.com
# 检查配置
$ cat ~/.gitconfig
# 初始化本地库 将当前目录变成一个git仓库 会生成.git目录
$ git init
# 查看当前状态
$ git status
# 添加修改到暂存区(新文件、修改文件、删除文件或者add整个目录)
$ git add hello.txt
$ git add .
# 删除暂存区里的文件、目录
$ git rm --cached hello.txt
# 提交到本地库,-m提交说明,-a直接提交到版本库, --amend合并提交到上一条commit
$ git commit -m "first commit"
$ git commit -m "first commit" hello.txt
$ git commit -am "hot fix first commit "
git commit --amend
# 查看版本日志,引用日志用reflog,详细日志用log
$ git reflog
$ git log [-3] # 查看详细日志(提交作者和提交日期), 只有当前版本和以前的版本信息,-3表示只显示3条
$ git log --pretty=oneline # 在一行内显示
# 版本穿梭, 移动的是head指针, master分支 -> head指针 -> 具体的版本
$ git reset --hard xxxxxxx # 根据git reflog中的版本号进行穿梭版本
$ git reset --hard HEAD^ # ^^表示回退两个版本,HEAD~100表示回退100个版本
- 分支管理
$ git branch -h # 查看所有分支命令
$ git branch # 查看所有本地分支,*号表示当前分支,-v显示详细,-r显示远程分支,-a显示本地和远程分支
$ git branch hot-fix # 创建hot-fix分支,-d删除分支(必须合并到上游),-D强制删除
$ git checkout hot-fix # 切换到hot-fix分支,-b创建并切换到hot-fix分支
$ git merge hot-fix # 将hot-fix分支合并到当前分支,如果两个分支同时修改了同一个文件会有冲突,当前状态会在MERGING状态,此时需要编辑冲突的文件,修改后再提交
- 团队协作:
- 团队内协作,一个远程库,创建者邀请其他开发者,开发者clone到本地(私有仓库也可以通过添加合作开发者,仓库settings -> Manager Access -> add People,对方通过之后就可以clone仓库了)
- 跨团队协作,fork别的远程库到自己的账户,修改后push,发起pull request(PR)请求所有者拉取自己修改后的代码,审核通过后会merge到他们的远程库里
## 本地init仓库,在github上创建仓库后,将本地仓库同步到远程库(idea里面可以不用远程创建)
# 添加远程库别名,github建议使用ssh(需要配置ssh免密登录),gitee建议使用https
$ git remote add git-demo git@github.com:bingmous/git-demo.git
$ git remote add git-demo https://gitee.com/bingmous/git-demo.git
# 查看远程库,会有fetch和push两个 -v表示详细
$ git remote -v
# 重命名默认远程库别名origin为库名
$ git remote rename origin git-demo
# 推送当前库到远程库(第一次推送需要添加-u参数,为git pull/status设置上游,否则无法追踪远程库)
$ git push git-demo master
$ git push -u git-demo master
# 拉取代码 git pull 别名 分支
$ git pull git-demo master
##直接从远程库clone,做了三件事,拉取代码,初始化本地仓库,创建远程库别名(默认为origin)
$ git clone git@github.com:bingmous/git-demo.git
- 配置ssh免密登录:由于本地git仓库和远程git仓库是通过SSH加密的,配置了ssh免密登录就不用使用账号密码验证了。而且只有配置了ssh免密登录才能使用git@github.com:YourName/xxx.git push和pull代码。
# 在本地生成ssh的公钥和私钥,如果没反应在git目录usr\bin下使用cmd生成
$ ssh-keygen -t rsa -C bingmous@163.com
# 查看公钥,将公钥添加到账户的ssh key里即可
cat ~/.ssh/id_rsa.pub
- git status 颜色说明及文件恢复(discard changes 恢复已删除的文件或恢复上次修改)
- git仓库下没有被git追踪的文件,显示为xxx红色,【本地与暂存区不同】
- 修改后的文件,还没有add,显示为modified: xxx红色,【本地与暂存区不同】
- git add 修改后,显示为modified: xxx绿色,表示修改已经add到暂存区,【本地与暂存区相同】
- rm -rf 直接删掉本地文件,显示为deleted: xxx红色,表示本地已经删除文件,【本地与暂存区不同】
- git rm -rf 直接删掉暂存区文件,显示为deleted: xxx绿色,表示本地和暂存区已经删除文件,【本地与暂存区相同】
综上:
红色表示本地与暂存区不同,绿色表示暂存区与版本库不同。
xxx红色表示本地存在但暂存区没有,也即是没有被git追踪。
modified/deleted: xxx红色表示本地已修改/删除,与暂存区不同(待add)。
modified/deleted: xxx绿色表示本地已修改/删除,且add到暂存区,但与版本库不同(待commit)。
因此,在红色modified/deleted: xxx下(本地rm删除)可以使用git restore xxx恢复本地文件,使其与暂存区一致。在绿色modified/deleted: xxx下(暂存区git rm删除或rm删除然后add了)可以使用git restore --staged xxx恢复暂存区文件,再使用git restore xxx恢复本地文件。
总之,如果本地文件删除了,还没有add到暂存区,显示为红色,可以从暂存区恢复,git restore。如果已经add到暂存区了或者git rm直接把暂存区删除了(同时本地也会删除),需要git restore --staged先从本地库恢复暂存区,再git restore从暂存区恢复到本地
- 其他使用
stash changes
/unstash changes
:意思是先将变化保存到本地库,并撤销本地的所有改动,此时pull不会有冲突,执行unstash changes
将之前的改动合并到本地,如果有冲突修改即可,这样可以先拉取最新代码,再合并
总结
git大全,常用命令参考:https://gitee.com/all-about-git
之前的博客:https://www.cnblogs.com/bingmous/p/15643755.html
- 代码提交
git status
查看状态git add [file/dir]
提交暂存区git commit -m "comment"
提交版本库,-a
直接提交版本库git reflog
,git log
查看日志
- 恢复
git restore [file/dir]
从暂存区恢复到本地,--staged
从本地库恢复到暂存区git reset --hard [hashCode]
版本回滚
- 分支操作
git branch hot-fix
创建分支git branch -v
查看分支git checkout [branchName]
切换分支,-b
创建并切换分支
- 远程操作
git remote -v
查看远程库git clone [url]
克隆仓库git push [url] [branchName]
提交远程库git pull [url] [branchName]
拉取最新代码(必须是clond的或者时本地加-u参数push的)
idea使用git
- 配置git.exe路径:
File | Settings | Version Control | Git
,这样idea就可以使用git了 - 配置当前工程为git仓库:
- 如果当前工程不是git仓库:将当前工程初始化为git仓库:在最上方菜单栏点击VCS(Version Control),点击Enable Version Control Integration为当前工程创建仓库(会把所有的文件都添加到暂存区,包括.idea目录,建议使用后者)。或者点击Create Git Respostory选择当前工程目录创建仓库(既然可以选目录,那么也可以创建别的目录为仓库)
- 如果当前工程已经是git仓库:
File | Settings | Version Control
配置当前工程为git仓库即可 - 如果在git仓库目录下创建工程,idea会自动识别当前仓库,git里的操作都是针对仓库的
- 配置忽略文件.gitignore:在工程目录下创建
.gitignore
文件,加入git忽略追踪的文件或目录,这样git就会忽略响应的文件或目录了(git status不会显示未追踪的红色文件或目录)
# ignored file
*.iml
*.ips
*.iws
*.class
# ignored directory
*/.idea
*/target
- git操作:
- 在项目文件右键选择Git进行add、commit、分支、推送等操作
- 也可以点击顶部菜单栏Git(原来是VCS)进行操作,工具栏有update、pull、push快捷按钮
- 左下角会有Git标签,可以查看log信息,可以右键进行git操作,如果没有选择
View | Tool Windows
调出即可 - 在右下角会显示分支信息,可以进行创建、切换、合并、push等操作
idea使用github
建议使用ssh
- 添加github账号:
File | Settings | Version Control | GitHub
,可以使用token登录(较快),在github/setting/Developer settings
下生成一个token,选择所有的权限,注意口令只显示一次。左下角选择使用ssh clone打钩,github使用ssh更快。 - 上传本地库:本地仓库上传到远程库(不用github创建),通过
Git(原来是VCS) -> GitHub -> Share progect on GitHub
直接推送 - push:建议使用ssh,在推送界面上,可以使用不同的远程库,自己手动添加以下ssh的,或者修改origin为ssh的(远程仓库别名一般使用仓库名)
- pull:注意push之前先pull,因为如果远程库已经有人push了,本地库版本与远程库版本不一致,远程会拒绝push,所以修改代码前先pull,pull也可以选择远程库别名链接,github使用ssh
- clone:直接在打开idea项目的时候选择
File -> New -> Project From Version Control
,选择url或者自己GitHub的库进行clone
Gitee
国内代码托管中心,建议使用https
- idea使用gitee需要
File | Settings | Plugins
添加插件,添加账号即可 - 可以在创建仓库是导入github上的仓库,还可以同步github上的仓库
GitLab
- 官网:https://about.gitlab.com/
- 安装:https://about.gitlab.com/install/,centos的话7以上,安装ce社区版即可
- 准备服务器
- 提前下载ce安装包(比较大)
- idea使用GitLab需要安装GitLab插件
Git使用git rebase 修改提交历史中的作者及邮箱信息
git log
查看提交日志,复制要修改的那次提交的前一次提交的hashcode- 执行
git rebase -i c53a9a17ff1137340cb6657afe7c6a64b01b1bfa
- 此时进入编辑界面,记录着commit的信息,将需要修改的commit的所在行的pick改为edit,保存退出
- 执行
git commit --amend --reset-author
修改作者和邮箱,此次提交的作者和邮箱会被修改为--local级别的,如果没有会使用--global级别的。也可以手动指定git commit --amend --author="author <email@xxx.com>"
- 执行
git rebase --continue
结束rebase git log
查看提交日志,可以看到作者和邮箱已经修改了
Git学习笔记(详细)、idea集成的更多相关文章
- Git学习笔记(10)——搭建Git服务器
本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...
- GIT学习笔记(4):远程分支
GIT学习笔记(4):远程分支 远程分支 远程分支是什么 远程分支是对远程仓库中的分支的索引.它们是一些无法移动的本地分支:只有在GIT进行网络交互时才会更新.远程分支就是书签,提醒着你上次连接远程仓 ...
- GIT学习笔记(3):分支管理
GIT学习笔记(3):分支管理 何谓分支 GIT是如何存储数据的 GIT不是存储文件差异或者变化量,而是一系列文件的快照.在Git提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存内容 ...
- GIT学习笔记(2):时光机穿梭与远程仓库
GIT学习笔记(2):时光机穿梭与远程仓库 撤销操作 1.GIT如何跟踪修改 在我们修改了代码内容后,执行了git add和git commit命令来将其交由Git进行版本控制.我们前面举的例子是这样 ...
- Git学习笔记(二) · 非典型性程序猿
远程库的使用 前面说到的都是git在本地的操作,那么实际协作开发过程中我们肯定是要有一个远程版本库作为项目的核心版本库,也就是投入生产使用的版本.这里我们以 Github为例.Github是一个开放的 ...
- Git学习笔记与IntelliJ IDEA整合
Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...
- Git学习笔记(四)
一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们 ...
- git 学习笔记6--remote & log
git 学习笔记6--remote & log 创建SSH Keys ssh-keygen -t rsa -C "1050244110@qq.com" 本地关联远程 git ...
- Git学习笔记---协作的一般流程
一般的操作流程 1.pull 王小坤与另一个同事张大炮一起开发一个项目,张大炮昨天修改了数据库读写的api,优化了执行速度,并把read()函数改名成了Read(),下午下班之前把这些代码push到服 ...
- 【转帖】Git学习笔记 记录一下
本文内容参考了廖雪峰老师的博文,并做了适当整理,方便大家查阅. 原帖地址 https://wangfanggang.com/Git/git/ 常用命令 仓库初始化 - git init 1 git i ...
随机推荐
- 加深对AQS原理的理解示例一:实现一个独占锁
/** *@Desc * 这个自定义的独占锁 只是一个简单的版本,非常粗糙,只为了加深对AQS原理理解.但还有一些列问题有待解决,比如锁的重入,锁不允许被其他线程中断等! *@Author zhang ...
- VUE3 之 组件间事件通信 - 这个系列的教程通俗易懂,适合新手
1. 概述 相关定律告诉我们:这个世界上的任何事物之间都会存在一定联系,"城门失火,殃及池鱼"就是一个很好的例子.因此如果我们能够尽早发现这些看不见的联系,就能很好的解决更多遇见的 ...
- spring 定时任务?
一.什么是定时任务? 我们在项目中遇到的需求: 需要定时送异步请求. 二.怎么实现? 2.1 mvc中启用定时任务. <?xml version="1.0" encodin ...
- mysql 相关练习题
/* 自己查询自己 把一张表看成是两张表. 表的设计. SELECT * FROM depart; SELECT d1. NAME '部门', d2. NAME '分部门' FROM depart d ...
- 「Celeste-B」Say Goodbye
做法一 提供一个后半部分略微不同的做法. 首先,基环旋转同构肯定是用 Burnside 那套理论求不动点来解,设 \(f(n, m)\) 为每种颜色 \(/m\) 构成 \(n\) 棵(树之间有标号) ...
- JAVA多线程学习十三 - 同步工具CyclicBarrier与CountDownLatch
一.CyclicBarrier CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序 ...
- JVM学习九-(复习)HotSpot 垃圾收集器
HotSpot 虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,虽然我们要对各个收集器进行比较,但并非为了挑选出一个最好的收集器.我们选择的只是对具体应用最合适的收集器. 新生代垃圾收集器 Se ...
- web常用开发工具
1.WebStorm[推荐] WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.目前已经被广大中国JS开发者誉为"Web前端开发神器"." ...
- Java开发环境及工具安装配置
Java开发环境及工具安装配置 Windows JDK 下载地址 https://www.oracle.com/java/technologies/javase-downloads.html 安装配置 ...
- 什么是UILabel
UILabel极其常用,功能比较专一:显示文字 UILabel的常见属性 @property(nonatomic,copy) NSString *text; 显示的文字 @property(nonat ...