bingmous

欢迎交流,不吝赐教~

导航

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仓库隐藏目录.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查看提交日志,可以看到作者和邮箱已经修改了

一些报错解决办法

Failed to connect to github.com port 443 after 21080 ms

进入ipaddress.com网站,查询:github.comgithub.global.ssl.fastly.net的ip地址,然后配置到C:\Windows\System32\drivers\etc目录的hosts文件里

cmd执行命令:ipconfig /flushdns,刷新DNS缓存

posted on 2021-11-26 17:30  Bingmous  阅读(143)  评论(0编辑  收藏  举报