git | git 2023 详细版


在这里插入图片描述

一、Git命令

如果出现了下面的报错,是因为复制粘贴时 git 前面不小心多加了个空格,算了个字符就会报错,删掉即可解决。

bash: $'\302\203git': command not found

基于开发命令中常用的git命令

1.2 设计用户签名

-- git config --global user.name 用户名
git config --global user.name ffideal
-- git config --global user.email 邮箱
git config --global user.email 1359975xxx@qq.com

1.3 初始化本地库

git init

1.4 查看本地库状态

哪个分支、哪些文件、只要库被修改且未被追踪工作区

git status

测试结果

On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
.... 

修改一个文件之后

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   hello.java

no changes added to commit (use "git add" and/or "git commit -a")

1.5 添加至暂存区

-- git add 文件名
git add hello.java

1.6 从暂存区删除

git rm --cached hello.java

注意:工作区中 hello.java 还在的

1.7 将暂存区的文件提交到本地库

-- git commit -m "日志信息" 文件名
git commit -m "我的第一个提交的java文件" hello.java

测试结果

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git commit -m "我的第一个提交的java文件" hello.java
[master (root-commit) cbe2bf8] 我的第一个提交的java文件
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 hello.java

1.8 查看版本信息

-- 查看版本日志信息
git log
-- 查看版本详细日志信息,包括版本号、提交者、日期、日志信息
git reflog

测试结果

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$git creflog
cbe2bf8 (HEAD -> master) HEAD@{0}: commit (initial): 我的第一个提交的java文件

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git log
commit cbe2bf893a34fa9790374af38260b6bcf272137f (HEAD -> master)	-- 版本号
Author: FFIDEAL <xxxxx@qq.com>	-- 提交者
Date:   Fri Oct 14 19:29:18 2022 +0800	--日期

    我的第一个提交的java文件		-- 日志信息

⑧ 版本穿梭(切换不同的版本)

git reset --hard cbe2bf893a34fa9790374af38260b6bcf272137f

测试结果

HEAD is now at cbe2bf8 我的第一个提交的java文件

这命令可以让指针指向相应的软件版本

比如,提交修改后的 hello.java 文件

$ git commit -m "修改后的hello.java" hello.java
[master 0289986] 修改后的hello.java
 1 file changed, 1 insertion(+)

查看日志,可以发现版本号是不一样的。这些版本分别是:0289986,cbe2bf8

$ git reflog
0289986 (HEAD -> master) HEAD@{0}: commit: 修改后的hello.java
cbe2bf8 HEAD@{1}: reset: moving to cbe2bf893a34fa9790374af38260b6bcf272137f
cbe2bf8 HEAD@{2}: commit (initial): 我的第一个提交的java文件

此时我们发现,head指针指向0289986,现在我要让他指向cbe2bf8,就可以使用以下命令

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$git reset --hard cbe2bf8
HEAD is now at cbe2bf8 我的第一个提交的java文件
-- 测试结果
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git reflog
cbe2bf8 (HEAD -> master) HEAD@{0}: reset: moving to cbe2bf8	-- 指向了cbe2bf8
0289986 HEAD@{1}: commit: 修改后的hello.java
cbe2bf8 (HEAD -> master) HEAD@{2}: reset: moving to cbe2bf893a34fa9790374af38260b6bcf272137f
cbe2bf8 (HEAD -> master) HEAD@{3}: commit (initial): 我的第一个提交的java文件

此外,在本地,可以进入工作区

方案一:进入 .git 文件夹,在 .git/HEAD 记录了谁提交

方法二:进入 .git/refs/heads/main(用户名) 记录了版本号

在git中,当前版本是用HEAD版本来标识的,前一个版本使用 HEAD^ 来表示,上上个版本使用 HEAD^^ 来表示。那么前100个版本如何表示呢?我们不可能写100个 ^ ,我们有简便写法,那就是 HEAD^100。用这种简便写法,上上个版本可以这样表示HEAD^2

二、Git分支

分支特性:分支创建、分支转换、分支合并、代码合并冲突解决

一个分支就是一个副本

2.1 查看分支

git branch -v

测试结果

$ git branch -v
* master cbe2bf8 我的第一个提交的java文件

2.2 创建分支

git branch newBranch

测试结果

$ git branch newBranch

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git branch -v
* master    cbe2bf8 我的第一个提交的java文件
  newBranch cbe2bf8 我的第一个提交的java文件

2.3 切换分支

git checkout newBranch

测试结果

git checkout newBranch
Switched to branch 'newBranch'

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (newBranch)		-- 测试结果,已经切换至newBranch

2.4 合并分支

-- git merge 分支名
git merge newBranch

测试流程和结果

-- 1,newBranch 分支下修改了hello.java
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (newBranch)
$ cat hello.java
222     newBranch
111

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (newBranch)
$ git add .

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (newBranch)
$ git commit -m "测试冲突newBranch修改了hello.java文件" hello.java
[newBranch ccb3ef2] 测试冲突newBranch修改了hello.java文件
 1 file changed, 1 insertion(+), 1 deletion(-)

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (newBranch)
$ git checkout master
Switched to branch 'master'

-- master 分支下修改了hello.java
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ cat hello.java
222
111     master

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git add .

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git commit -m "测试冲突master修改了hello.java文件" hello.java
[master 5ff3ad3] 测试冲突master修改了hello.java文件
 1 file changed, 1 insertion(+), 1 deletion(-)


dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git merge newBranch
Auto-merging hello.java
CONFLICT (content): Merge conflict in hello.java	--出现了合并冲突
Automatic merge failed; fix conflicts and then commit the result.

查看 hello.java 文件,文件内容如下:

<<<<<<< HEAD
222
111	master
=
222     newBranch
111
>>>>>>> newBranch

我们如下内容,只需要把其他内容删掉

222     newBranch
111	master
<<<<<<< HEAD	-- 删除
222		-- 删除
111	master		-- 保留
=		-- 删除
222     newBranch		-- 移动位置
111			-- 删除
>>>>>>> newBranch		-- 删除

完成后提交,注意,这里 git commit -m "合并了master和newBranch冲突之后最终得到的hello.java文件" 是不能带文件名的

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master|MERGING)
$ git add .

-- 这里不能带文件名
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master|MERGING)
$ git commit -m "合并了master和newBranch冲突之后最终得到的hello.java文件"
[master 3751ec1] 合并了master和newBranch冲突之后最终得到的hello.java文件

查看提交后的 hello.java 的内容。但是,由于是 master 合并 newBranch 分支的内容,所以在 master 分支下可以看到合并后的内容,但是在 newBranch 分支并没有被修改。这就是为什么在团队合作中,push 提交到远程库之前要 pull 一下远程库的内容,以保持内容的一致性

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ cat hello.java
222     newBranch
111     master


dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git checkout newBranch
Switched to branch 'newBranch'

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (newBranch)
$ cat hello.java
222     newBranch
111

三、GitHub

在 github 上创建一个远程库,我的远程库名称为 git_test

然后把该库 clone 到本地

3.1 代码克隆clone

git clone git@github.com:ffideal/git_test.git

3.2 给库取别名

-- git remote add 别名 远程库
git remote add name git@github.com:ffideal/git_test.git

测试结果

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git/git_test (master)
$ git remote -v
name    git@github.com:ffideal/git_test.git (fetch)
name    git@github.com:ffideal/git_test.git (push)
origin  git@github.com:ffideal/git_test.git (fetch)
origin  git@github.com:ffideal/git_test.git (push)

删除别名

-- git remote remove <别名>
git remote remove gitit_nickname

测试结果

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git/git_test (master)
$ git remote -v
git_test        git (fetch)
git_test        git (push)
gitit_nickname  git@github.com:ffideal/git_test.git (fetch)		-- 删除目标
gitit_nickname  git@github.com:ffideal/git_test.git (push)
name    git@github.com:ffideal/git_test.git (fetch)
name    git@github.com:ffideal/git_test.git (push)
origin  git@github.com:ffideal/git_test.git (fetch)
origin  git@github.com:ffideal/git_test.git (push)

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git/git_test (master)
git remote remove gitit_nickname

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git/git_test (master)	-- 已被删除
$ git remote -v
git_test        git (fetch)
git_test        git (push)
name    git@github.com:ffideal/git_test.git (fetch)
name    git@github.com:ffideal/git_test.git (push)
origin  git@github.com:ffideal/git_test.git (fetch)
origin  git@github.com:ffideal/git_test.git (push)

3.3 推送本地分支到远程仓库

-- git push 别名 分支
git push origin main

测试结果,注意,如果此时该分支不存在,会被创建分支

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git/git_test (main)
$ git push origin main
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 560 bytes | 280.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'main' on GitHub by visiting:
remote:      https://github.com/ffideal/git_test/pull/new/main
remote:
To github.com:ffideal/git_test.git
 * [new branch]      main -> main

3.4 拉取远程库

-- git pull 远程库地址or别名 远程分支名
git pull origin master

测试结果

dell@DESKTOP-B06U8EQ MINGW64 /e/github/git/git_test (master)
$ git pull origin master
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
Unpacking objects: 100% (3/3), 1.41 KiB | 479.00 KiB/s, done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
From github.com:ffideal/git_test
 * branch            master     -> FETCH_HEAD
   bde7239..9edde2f  master     -> origin/master
Updating cd10529..9edde2f
Fast-forward
 ...263\250\350\247\243\350\257\246\351\233\206.md" | 80 ++++++++++++++++++++++
 1 file changed, 80 insertions(+)
 create mode 100644 "\346\263\250\350\247\243\350\257\246\351\233\206.md"

查看文件

$ dir
hello.java  main.txt  注解详集.md

3.5 邀请加入团队

① 选择合作者:进入项目 → settings → Manager access → Invite a callaborator

在这里插入图片描述

② 填入想要合作的人

③ 复制地址并通过微信等方式发送给该用户

④ 点击接收邀请 Accept invitation

⑤ 成名后,可以在该合作者账号上看到远程仓库

⑥ 可以操作该库

3.6 idea集成GitHub

3.6.1 配置忽略文件

就是在git目录下创建一个文件 xx.ignore 建议是 git.ignore

HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/

# compiled class file
*.class

# Log file
*.log

# Package Files
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

3.6.2 定位 Git 程序

settings → Version Control → Git → 选择自己的 git.exe 安装目录 → test

在这里插入图片描述

3.6.3 集成 Git

VCS → Import into Version Control → Create Git Repository → 选择项目目录(初始化本地库)右击点击项目选择Git → commit directory → 选择删文件以及在commit message 中填写描述 → commit

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.6.4 切换版本

在idea的左下角,点击version control,然后点击log 查看版本 → 右击选择要切换的版本,然后在菜单里点击Checkout Revision

3.6.5 创建分支

Git → Repository → new Branch → 填写分支名称 → 填写之后在 idea 的右下角看到我们新建的分支,说明创建成功,并已经切换到该分支了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.6.6 切换分支

在 idea 窗口的右下角:master → Checkout → 选择分支xutao → 在右下角看到了xutao即成功

在这里插入图片描述

3.6.7 合并分支

Git:master → Merge Selected into Current → 选择要合并的分支

在这里插入图片描述

3.6.8 解决冲突

若出现冲突,我们栈在master分支上合并其他分支,出现了文件的不同就会发生冲突。点击 conflicts 框中的 Merge 按钮,手动合并

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_之桐_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值