git | git 2023 详细版
创始人
2024-05-31 22:45:48
0

文章目录

  • 一、Git命令
    • 1.2 设计用户签名
    • 1.3 初始化本地库
    • 1.4 查看本地库状态
    • 1.5 添加至暂存区
    • 1.6 从暂存区删除
    • 1.7 将暂存区的文件提交到本地库
    • 1.8 查看版本信息
  • 二、Git分支
    • 2.1 查看分支
    • 2.2 创建分支
    • 2.3 切换分支
    • 2.4 合并分支
  • 三、GitHub
    • 3.1 代码克隆clone
    • 3.2 给库取别名
    • 3.3 推送本地分支到远程仓库
    • 3.4 拉取远程库
    • 3.5 邀请加入团队
    • 3.6 idea集成GitHub
      • 3.6.1 配置忽略文件
      • 3.6.2 定位 Git 程序
      • 3.6.3 集成 Git
      • 3.6.4 切换版本
      • 3.6.5 创建分支
      • 3.6.6 切换分支
      • 3.6.7 合并分支
      • 3.6.8 解决冲突

在这里插入图片描述

一、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 ..." to update what will be committed)(use "git restore ..." to discard changes in working directory)modified:   hello.javano 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 	-- 提交者
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.java1 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 newBranchdell@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
111dell@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     masterdell@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     masterdell@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_nicknamedell@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_HEADbde7239..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 按钮,手动合并

相关内容

热门资讯

怎么解除订阅安卓系统,安卓系统... 你是不是也和我一样,手机里订阅了好多服务,结果现在想解除订阅,却一头雾水?别急,今天就来手把手教你如...
安卓系统停用怎么开启,轻松恢复... 亲爱的手机控们,你是否曾经遇到过安卓系统突然停用的情况,让你手忙脚乱,不知所措?别担心,今天就来教你...
安卓系统电池健康度,电池健康度... 你有没有发现,你的安卓手机最近是不是有点儿不给力了?电池续航能力大不如前,充电速度也慢了不少?别急,...
安卓系统按键怎么截图,安卓系统... 你是不是也和我一样,有时候想截个图分享给朋友,却发现安卓手机的截图功能有点神秘呢?别急,今天就来手把...
购票系统安卓源代码,架构设计与... 你有没有想过,那些我们每天离不开的购票系统,它们背后的秘密是什么呢?今天,就让我带你一探究竟,揭开购...
安卓手机系统后台测试,深度解析... 你有没有发现,你的安卓手机后台总是悄悄地忙碌着?别小看了这些后台程序,它们可是手机系统稳定运行的关键...
安卓系统重启的图标,解锁设备新... 手机突然重启,是不是心里有点慌?别急,今天就来和你聊聊安卓系统重启的图标,让你一眼就能认出它,再也不...
车载智慧屏安卓系统,智能出行新... 你有没有发现,现在的车载智慧屏越来越智能了?尤其是那些搭载了安卓系统的,简直就像是个移动的小电脑,不...
安卓系统连上网权限,解锁设备无... 你有没有发现,你的安卓手机里有些应用总是偷偷连上网?别小看这个小小的网络权限,它可是能影响你隐私、消...
安卓谷歌操作系统,探索安卓谷歌... 你知道吗?在智能手机的世界里,有一个操作系统可是无人不知、无人不晓,那就是安卓谷歌操作系统。它就像一...
安卓系统手写%怎样调出,具体实... 你有没有遇到过这种情况:在使用安卓手机的时候,突然想用手写输入法来记录一些灵感或者重要信息,可是怎么...
安卓手机重置 系统设置,轻松恢... 手机用久了是不是感觉卡顿得厉害?别急,今天就来教你怎么给安卓手机来个大变身——重置系统设置!想象你的...
win如何安装安卓系统,Win... 哇,你有没有想过,让你的Win系统也能玩转安卓应用?没错,就是那种在手机上轻松自如的安卓系统,现在也...
苹果qq和安卓系统,跨平台体验... 你有没有发现,现在手机市场上,苹果和安卓的较量可是越来越激烈了呢!咱们就来聊聊这个话题,看看苹果QQ...
显示最好的安卓系统,探索最新旗... 你有没有想过,为什么安卓系统那么受欢迎呢?它就像一个魔法盒子,里面装满了各种神奇的魔法。今天,就让我...
安卓app怎么降级系统,系统版... 你有没有发现,有时候安卓手机的系统更新后,新功能虽然炫酷,但老系统用起来更顺手呢?别急,今天就来教你...
雷军脱离安卓系统,引领科技变革... 你知道吗?最近科技圈可是炸开了锅,因为我们的雷军大大竟然宣布要脱离安卓系统,这可真是让人大跌眼镜啊!...
安卓系统自动开网络,安卓系统自... 你有没有发现,手机里的安卓系统有时候会自动开启网络连接,这可真是让人又爱又恨啊!有时候,你正专心致志...
安卓系统怎样控制后台,因为服务... 手机里的安卓系统是不是感觉越来越卡了?后台程序太多,不仅耗电还影响性能。别急,今天就来教你怎么巧妙地...
安卓系统打游戏推荐,一触即达! 你有没有发现,现在手机游戏越来越好玩了?不管是休闲小游戏还是大型MMORPG,都能在手机上畅玩。但是...