概述

  • 官网: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仓库隐藏目录.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 refloggit 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


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集成的更多相关文章

  1. Git学习笔记(10)——搭建Git服务器

    本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...

  2. GIT学习笔记(4):远程分支

    GIT学习笔记(4):远程分支 远程分支 远程分支是什么 远程分支是对远程仓库中的分支的索引.它们是一些无法移动的本地分支:只有在GIT进行网络交互时才会更新.远程分支就是书签,提醒着你上次连接远程仓 ...

  3. GIT学习笔记(3):分支管理

    GIT学习笔记(3):分支管理 何谓分支 GIT是如何存储数据的 GIT不是存储文件差异或者变化量,而是一系列文件的快照.在Git提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存内容 ...

  4. GIT学习笔记(2):时光机穿梭与远程仓库

    GIT学习笔记(2):时光机穿梭与远程仓库 撤销操作 1.GIT如何跟踪修改 在我们修改了代码内容后,执行了git add和git commit命令来将其交由Git进行版本控制.我们前面举的例子是这样 ...

  5. Git学习笔记(二) · 非典型性程序猿

    远程库的使用 前面说到的都是git在本地的操作,那么实际协作开发过程中我们肯定是要有一个远程版本库作为项目的核心版本库,也就是投入生产使用的版本.这里我们以 Github为例.Github是一个开放的 ...

  6. Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  7. Git学习笔记(四)

    一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们 ...

  8. git 学习笔记6--remote & log

    git 学习笔记6--remote & log 创建SSH Keys ssh-keygen -t rsa -C "1050244110@qq.com" 本地关联远程 git ...

  9. Git学习笔记---协作的一般流程

    一般的操作流程 1.pull 王小坤与另一个同事张大炮一起开发一个项目,张大炮昨天修改了数据库读写的api,优化了执行速度,并把read()函数改名成了Read(),下午下班之前把这些代码push到服 ...

  10. 【转帖】Git学习笔记 记录一下

    本文内容参考了廖雪峰老师的博文,并做了适当整理,方便大家查阅. 原帖地址 https://wangfanggang.com/Git/git/ 常用命令 仓库初始化 - git init 1 git i ...

随机推荐

  1. C# 反射调用拓展类方法

    今天封装Protobuf封包时候遇到一个问题: Protobuf的反序列化方法MergeFrom,是写在扩展类里的:c#拓展类 通过反射获取不到这个方法,就没法使用Type来泛型封装... 然而仔细一 ...

  2. 来自开发者的点赞!HMS Core荣获多个行业奖项

    2021年,HMS Core发布全新HMS Core 6,为全球开发者提供多终端.跨OS.全场景的华为移动服务核心能力,和开发者共同成长.通过和开发者在行业解决方案.业务场景创新和商业增长上的持续合作 ...

  3. Linux 学习2

    1.配置好阿里云yum源生成yum缓存下载nginx,并且启动nginx服务,使用浏览器访问,nginx页面 yum源的工作目录是? https://www.cnblogs.com/dlh-lmsh/ ...

  4. asyncio和aiohttp

    asyncio官网 https://docs.python.org/zh-cn/3/library/asyncio-task.html 下面为伪代码: import aiohttp import as ...

  5. Lesson1——Pandas是什么

    pandas目录 一.简介 Pandas 是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来,享有数据分析"三剑客之一"的盛名(Num ...

  6. ApacheCN 深度学习译文集 20201218 更新

    新增了四个教程: Python 人工智能中文版 0 前言 1 人工智能简介 2 人工智能的基本用例 3 机器学习管道 4 特征选择和特征工程 5 使用监督学习的分类和回归 6 集成学习的预测分析 7 ...

  7. AT2400 [ARC072B] Alice&Brown

    通过打表后可以发现,当初始石头数 \(|X - Y| \le 1\) 时先手必败否则先手必胜. 我们考虑使用归纳证明这个结论,显然 \((1, 0), (1, 1)\) 时是成立的. 基于观察,我们可 ...

  8. response.getWriter().write()和 response.getWriter().print()的区别 以及 PrintWriter对象 和 out对象 的区别

    感谢原文作者:krismile__qh 原文链接:https://blog.csdn.net/krismile__qh/article/details/89926001 一.response.getW ...

  9. 【JS】函数提升变量提升以及函数声明和函数表达式的区别

    今天看js的变量提升问题,里面提到了函数提升.然后发现自己之前一直把函数声明和函数表达式弄错,导致函数提升出错 一.变量提升 console.log(a) var a=100 //undefined ...

  10. Java内存分析简单介绍

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11904422.html Java内存分析简单介绍: 1. # 设置内存溢出时自动生成堆内存快照 ...