Git

78 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情


⭐️前面的话⭐️

✉️坚持和努力一定能换来诗与远方!
💭推荐书籍:📚《王道408》,📚《深入理解 Java 虚拟机-周志明》,📚《Java 核心技术卷》
💬算法刷题:✅力扣🌐牛客网
🎈Github
🎈码云Gitee


常用命令

  • 获取 Git 仓库的 2种方法

    • 在现有目录中初始化仓库:进入项目目录运行 git init 命令,该命令将创建一个名为 .git 的子目录。
    • 从一个服务器克隆一个现有的 Git 仓库: git clone [url]
1
# 初始化
2
git init;
3
​
4
# 添加远程库(本地库关联远程库)
5
git remote add gitee https://gitee.com/Lemonade19/Java_notes.git
6
git remote add github https://github.com/cat0501/Java_notes_code.git
7
​
8
# 远程仓库的移除与重命名
9
git remote rename test test1
10
git remote rm test1
11
​
12
# 查看提交历史
13
git log
14
## 只看某个人的提交记录
15
git log --author=bob
16
​
17
# 用户名和邮箱配置(项目级别)
18
git config user.name Lemonade19
19
git config user.email 17782975312@163.com
  • 提交更新到仓库(本地库同步到 Github、Gitee等)
1
# 检测当前文件状态
2
git status
34
# 添加到本地(暂存区)
5
git add .
67
# 提交更新到 版本库
8
git commit -m "github";
910
# 推送改动到 远程仓库
11
git push github master
12
git push origin master
1314
# 修改最后一次 commit 的注释信息
15
git commit --amend 
16
# 修改某几次 commit 的信息
17
git rebase -i HEAD~2
18
// 或者
19
git rebase -i {commitID} // 例如 git rebase -i d95ddfb
202122
# git配置大小写敏感
23
$ git config core.ignorecase
24
true
25
# 下面设置大小写敏感为敏感
26
$ git config core.ignorecase false
2728
# cmd git页面中文显示为数字,不是乱码
29
git config --global core.quotepath false
  • 分支
1
# 列出本地分支
2
git branch
3
# 查看远程分支
4
git branch -r
5
​
6
# 新建一个本地分支 test
7
git branch test
8
# 切换当前分支到 test
9
git checkout test
10
​
11
# 创建分支并切换过去(上面两条命令的合写)
12
git checkout -b feature_x
13
​
14
# 切换到主分支
15
git checkout master
16
​
17
# 合并分支(可能会有冲突)
18
 git merge test
  • 整体流程

  • git init:创建 Git 库。

  • git status :查看当前仓库的状态。

  • git show :# 显示某次提交的内容 git show $id

  • git diff :查看本次修改与上次修改的内容的区别。

  • git add <file> :把现在所要添加的文件放到暂存区中。

    • git log -p <file> :查看每次详细修改内容的 diff 。

    • git rm <file> :从版本库中删除文件。

    • git reset <file> :从暂存区恢复到工作文件。

    • git reset HEAD^ :恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改` 。

      HEAD 本身是一個游标,它通常會指向某一个本地端分支或是其它 commit,所以你也可以把 HEAD 当做是目前所在的分支(current branch)。 可参见 《Git 中 HEAD 是什么东西》

  • git commit :把 Git add 到暂存区的内容提交到代码区中。

  • git clone :从远程仓库拷贝代码到本地。

  • git branch:查看当前的分支名称。

    • git branch -r :查看远程分支。
  • git checkout :切换分支。

  • git merge <branch> :将 branch 分支合并到当前分支。

  • git stash:暂存。

    • git stash pop :恢复最近一次的暂存。
  • git pull:抓取远程仓库所有分支更新并合并到本地。

    • git push origin master :将本地主分支推到远程主分支。

Git 工具?

1)命令行

只能说十个里面九个菜,还有一个是大神,虽然命令行提供了全部的功能,但是很多用 GUI 工具可以很便捷解决的问题,命令行做起来都比较麻烦。

当然并不是让大家不要去命令行,通过命令行可以对 git 的功能和原理有一个更深入的了解。

2)IDEA Git 插件

IDEA Git 插件越来越强大,很多时候,我们日常使用 Git ,更多使用它。具体的教程,可以看看 《IntelliJ IDEA 下的使用 git》

3)SourceTree

可以说是最好用的 Git 工具,没有之一。

日常使用的一个图形化的 Git 增强工具,而最好用的功能就在于它集成了 GitFlow ,让开发者可以更简单、更规范的去做一些 Git 操作;

另外它还提供了更友好的 merge 界面,但是操作起来不是很顺手,因为它只支持整行删除。

4)其它

Git 和 SVN 的优缺点?

Git 是分布式版本控制系统,SVN 是集中式版本控制系统。

1)🦅SVN 的优缺点

  • 优点

    • 1、管理方便,逻辑明确,符合一般人思维习惯。
    • 2、易于管理,集中式服务器更能保证安全性。
    • 3、代码一致性非常高。
    • 4、适合开发人数不多的项目开发。
  • 缺点

    • 1、服务器压力太大,数据库容量暴增。
    • 2、如果不能连接到服务器上,基本上不可以工作,因为 SVN 是集中式服务器,如果服务器不能连接上,就不能提交,还原,对比等等。
    • 3、不适合开源开发(开发人数非常非常多,但是 Google App Engine 就是用 SVN 的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。

2)🦅Git 优缺点

  • 优点

    • 1、适合分布式开发,强调个体。
    • 2、公共服务器压力和数据量都不会太大。
    • 3、速度快、灵活。
    • 4、任意两个开发者之间可以很容易的解决冲突。
    • 5、离线工作。
  • 缺点

    • 1、学习周期相对而言比较长。
    • 2、不符合常规思维。
    • 3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

所以,很多公司的开发团队使用 Git 作为版本管理,而产品团队使用 SVN 。

Git 服务器

  • 公有服务方案

    • Github
    • Gitee
  • 私有化部署方案

    • GitLab
    • Gogs
    • Bitbucket

注意,Gitlab 和 Bitbucket 也提供公有服务的方案。

  • 一般情况下,大多数公司使用 GitLab 作为 Git 服务器。

    • GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
    • 不过因为 GitLb 使用 Ruby on Rails 实现,所以占用的系统资源会比较多。
    • 它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

参考&推荐

一些其它问题

一个本地库能不能既关联 GitHub,又关联 Gitee 呢?

答案是肯定的,因为 git 本身是分布式版本控制系统,可以同步到另外一个远程库,当然也可以同步到另外两个远程库。 使用多个远程库时,我们要注意,git 给远程库起的默认名称是 origin,如果有多个远程库,我们需要用不同的名称来标识不同的远程库。

1)取消全局设置

1
# 查看
2
git config user.name
3
git config user.email
45
# 取消
6
git config --global --unset user.name
7
git config --global --unset user.email

2)配置秘钥

由于你的本地 Git 仓库和 GitHub 仓库之间的传输是通过 SSH 加密的,所以我们需要配置验证信息。

  • 使用以下命令生成 SSH Key:
1
# 后面的 your_email@youremail.com 改为你在 Github 或Gitee上注册的邮箱,
2
# 之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。
3
$ ssh-keygen -t rsa -C "youremail@example.com"
45
ssh-keygen -t rsa -C "17782975312@163.com"
6
ssh-keygen -t rsa -C "pxzjl123@icloud.com"
  • 成功的话会在 ~/ 下生成 .ssh 文件夹,进去打开 id_rsa.pub,复制里面的 key。

注:根据runoob官网,只用在本地~/下.ssh 文件夹中生成一个秘钥就好,但是我根据思否博主建议对每个账户(GitHub、Gitee)生成了一个秘钥然后改名并分别配置到了GitHub和Gitee中,秘钥文件如上图。

id_rsa是私钥 id_rsa.pub是公钥

3)关联 GitHub 和 Gitee

  • 先关联 GitHub 的远程库:
1
$ git remote add github git@github.com:tianqixin/runoob-git-test.git

注意,远程库的名称叫 github,不叫 origin 了。

  • 接着,再关联 Gitee 的远程库:
1
$ git remote add gitee git@gitee.com:imnoob/runoob-test.git

同样注意,远程库的名称叫 gitee,不叫 origin。

  • 现在,我们用 git remote -v 查看远程库信息,可以看到两个远程库。
1
$ git remote -v
2
gitee    git@gitee.com:imnoob/runoob-test.git (fetch)
3
gitee    git@gitee.com:imnoob/runoob-test.git (push)
4
github    git@github.com:tianqixin/runoob.git (fetch)
5
github    git@github.com:tianqixin/runoob.git (push)

4)推送改动

1
# 添加和提交
2
git add .
3
git commit -m "xxx"
45
# 推送到 GitHub
6
git push github master
7
# 推送到 Gitee
8
git push gitee master

这样一来,我们的本地库就可以同时与多个远程库互相同步:

如下:

Github 如何设置 master 为默认分支?

  • 需要在当前项目的 setting 里面修改默认分支,账户里面修改无效。

git push -u的含义和用法

测试一下本地私钥和网站公钥配置是否成功?

在config文件中,给GitHub网站配置的别名就是github,所以直接使用别名,就是

1
ssh -T git@github
  • 遇到问题:
1
The authenticity of host 'github.com (20.205.243.166)' can't be established.

image-20211230195845819

  • 解决:Google之后明白,少了一个 known_hosts 文件,本来密钥文件应该是三个,现在是两个,便报了这样的错误,此时选择yes回车之后,便可同时生成了缺少了的 known_hosts文件。

image-20211230200047967

秘钥

www.jianshu.com/p/be58fa27a…

Git配置多个用户

blog.csdn.net/Jumping_cod…

终端配置

更新完 zsh 说我目录权限问题的解决 www.jianshu.com/p/f2545c1fe…

报错内容如下:

1
[oh-my-zsh] For safety, we will not load completions from these directories until
2
[oh-my-zsh] you fix their permissions and ownership and restart zsh.
3
[oh-my-zsh] See the above list for directories with group or other writability.
45
[oh-my-zsh] To fix your permissions you can do so by disabling
6
[oh-my-zsh] the write permission of "group" and "others" and making sure that the
7
[oh-my-zsh] owner of these directories is either root or your current user.
8
[oh-my-zsh] The following command may help:
9
[oh-my-zsh] compaudit | xargs chmod g-w,o-w
1011
[oh-my-zsh] If the above didn't help or you want to skip the verification of
12
[oh-my-zsh] insecure directories you can set the variable ZSH_DISABLE_COMPFIX to
13
[oh-my-zsh] "true" before oh-my-zsh is sourced in your zshrc file.

解决方案

1
chmod 755 /usr/local/share/zsh
2
chmod 755 /usr/local/share/zsh/site-functions

\