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
查看提交日志,可以看到作者和邮箱已经修改了
一些报错解决办法
Failed to connect to github.com port 443 after 21080 ms
进入ipaddress.com网站,查询:github.com
和github.global.ssl.fastly.net
的ip地址,然后配置到C:\Windows\System32\drivers\etc
目录的hosts文件里
cmd执行命令:ipconfig /flushdns
,刷新DNS缓存
本文来自博客园,作者:Bingmous,转载请注明原文链接:https://www.cnblogs.com/bingmous/p/15605587.html