1.学习目标

2.Git概述

Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。

Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。 其性能优于 Subversion、 CVS、 Perforce 和 ClearCase 等版本控制工具。

Git官网:Git (git-scm.com)

1.版本控制

版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。

版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。

1.为什么需要版本控制?

从个人开发过度到团队协作

2.版本控制工具
集中式版本控制工具

集中化的版本控制系统诸如 CVS、 SVN 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。

这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统, 要远比在各个客户端上维护本地数据库来得轻松容易。

事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。

分布式版本控制工具

Git、 Mercurial、 Bazaar、 Darcs……

像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一 次文件提取操作,实际上都是一次对整个文件仓库的完整备份。

分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:

1.服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)

2.每个客户端保存的也都是整个完整的项目(包含历史记录, 更加安全)

2.工作机制和代码托管中心

工作机制

代码托管中心

局域网

  • GitLab
    互联网
  • GitHub(外网)
  • Gitee 码云(国内网站)

3.Git安装

在官网下载git的安装包

选择安装目录,next

选择默认编辑器

总结:一路next

查看版本:安装成功

4.Git常用命令

说明:签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。 Git 首次安装必须设置一下用户签名,否则无法提交代码

注意: 这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系。

01.设置用户签名

打开Git Bash

验证:在当前用户目录下找到,打开

无误,则用户签名设置完成

02.初始化本地库:git init

案例:新建一个文件夹,当前目录进入Bash命令界面


创建了一个名为.git非空隐藏文件夹

03.查看本地库状态:git status

新增hello.txt

查看工作区有hello.txt,但是没有提交到暂存区

04.添加暂存区:git add 文件名

此时hello.txt已经提交在暂存区,git可以追踪到

05.提交本地库:git commit -m “日志信息” 文件名

再次查看

查看日志:

git log与git reflog区别

git log 命令可以显示所有提交过的版本信息,如果感觉太繁琐,可以加上参数 --pretty=oneline,只会显示版本号和提交时的备注信息。

git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)。例如,执行 git reset --hard HEAD~1,退回到上一个版本,用git log则是看不出来被删除的commitid,用git reflog则可以看到被删除的commitid,我们就可以买后悔药,恢复到被删除的那个版本

06.修改文件

修改hello.txt内容,git status会提示该文件修改过

erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
//修改文件信息
$ vim hello.txt erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ 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.txtno changes added to commit (use "git add" and/or "git commit -a")erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
//添加到缓存区
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directoryerhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)modified:   hello.txterhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
//第二次提交
$ git commit -m "second commit" hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory
[master 1eb2fb2] second commit1 file changed, 1 insertion(+), 1 deletion(-)erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git log
commit 1eb2fb245fbf8d5a28d35fb1072b80befb67e4c2 (HEAD -> master)
Author: syb <903923381@qq.com>
Date:   Fri Mar 18 11:22:18 2022 +0800second commitcommit 4c9e1f045b47f30f3e84c0a19ee4ac641762db9d
Author: syb <903923381@qq.com>
Date:   Fri Mar 18 11:11:30 2022 +0800first commit

07.版本穿梭:git reset --hard 版本号

  • git reset --hard 版本号
# 首先查看当前的历史记录
abc@DESKTOP-R85C9HV MINGW64 ~/Desktop/HelloGit (master)
$ git reflog
41f776b (HEAD -> master) HEAD@{0}: commit: third commit
6967bf0 HEAD@{1}: commit: second commit
b0006bc HEAD@{2}: commit (initial): first commit# 切换到 b0006bc 版本,也就是第一次提交的版本
abc@DESKTOP-R85C9HV MINGW64 ~/Desktop/HelloGit (master)
$ git reset --hard b0006bc
HEAD is now at b0006bc first commit# 切换完毕之后再查看历史记录,当前成功切换到了 b0006bc 版本
abc@DESKTOP-R85C9HV MINGW64 ~/Desktop/HelloGit (master)
$ git reflog
b0006bc (HEAD -> master) HEAD@{0}: reset: moving to b0006bc
41f776b HEAD@{1}: commit: third commit
6967bf0 HEAD@{2}: commit: second commit
b0006bc (HEAD -> master) HEAD@{3}: commit (initial): first commit# 然后查看文件 hello.txt,发现文件内容回到第一版本
abc@DESKTOP-R85C9HV MINGW64 ~/Desktop/HelloGit (master)
$ cat hello.txt
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!

当你在切换版本后,再更改文本内容提交:

abc@DESKTOP-R85C9HV MINGW64 ~/Desktop/HelloGit (master)
$ vim hello.txtabc@DESKTOP-R85C9HV MINGW64 ~/Desktop/HelloGit (master)
$ 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.txtno changes added to commit (use "git add" and/or "git commit -a")abc@DESKTOP-R85C9HV MINGW64 ~/Desktop/HelloGit (master)
$ git add hello.txtabc@DESKTOP-R85C9HV MINGW64 ~/Desktop/HelloGit (master)
$ git commit -m "forth commit"
[master 5f8dbf6] forth commit1 file changed, 1 insertion(+), 1 deletion(-)abc@DESKTOP-R85C9HV MINGW64 ~/Desktop/HelloGit (master)
$ git reflog
5f8dbf6 (HEAD -> master) HEAD@{0}: commit: forth commit
b0006bc HEAD@{1}: reset: moving to b0006bc
41f776b HEAD@{2}: commit: third commit
6967bf0 HEAD@{3}: commit: second commit
b0006bc HEAD@{4}: commit (initial): first commit

再次切换到第一版本:

abc@DESKTOP-R85C9HV MINGW64 ~/Desktop/HelloGit (master)
$ git reset --hard b0006bc
HEAD is now at b0006bc first commitabc@DESKTOP-R85C9HV MINGW64 ~/Desktop/HelloGit (master)
$ git reflog
b0006bc (HEAD -> master) HEAD@{0}: reset: moving to b0006bc
5f8dbf6 HEAD@{1}: commit: forth commit
b0006bc (HEAD -> master) HEAD@{2}: reset: moving to b0006bc
41f776b HEAD@{3}: commit: third commit
6967bf0 HEAD@{4}: commit: second commit
b0006bc (HEAD -> master) HEAD@{5}: commit (initial): first commitabc@DESKTOP-R85C9HV MINGW64 ~/Desktop/HelloGit (master)
$ cat hello.txt
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!
hello, git!

Git 切换版本, 底层其实是移动的 HEAD 指针。

08.分支

什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来, 开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)

分支的好处

同时并行推进多个功能开发,提高开发效率。

各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

分支操作命令

1.查看分支:git branch -v
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git branch -v
* master 1eb2fb2 second commit
2.创建分支:git branch 分支名
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
#创建hot+-fix分支
$  git branch hot-fixerhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
#再次查看分支可以看到之前创建的hot-fix分支
$ git branch -vhot-fix 1eb2fb2 second commit
* master  1eb2fb2 second commit

刚创建的新的分支,并将主分支master的内容复制了一份

3.切换分支:git checkout 分支名
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
#切换hot-fix分支
$ git checkout hot-fix
Switched to branch 'hot-fix'erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
#查看分支
$ git branch -v
* hot-fix 1eb2fb2 second commitmaster  1eb2fb2 second commit

切换分支后,在新分支修改文件:

erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ vim hello.txterhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ cat hello.txt
hello Git!22222
hot fix
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ git status
On branch hot-fix
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.txtno changes added to commit (use "git add" and/or "git commit -a")erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directoryerhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ git commit -m "hot-fix first commmit"
[hot-fix 38e0799] hot-fix first commmit1 file changed, 2 insertions(+), 1 deletion(-)erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ git reflog
38e0799 (HEAD -> hot-fix) HEAD@{0}: commit: hot-fix first commmit
1eb2fb2 (master) HEAD@{1}: checkout: moving from master to hot-fix
1eb2fb2 (master) HEAD@{2}: reset: moving to 1eb2fb2
1eb2fb2 (master) HEAD@{3}: reset: moving to 1eb2fb2
1eb2fb2 (master) HEAD@{4}: commit: second commit
4c9e1f0 HEAD@{5}: commit (initial): first commiterhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ git log
commit 38e07995526da81a660c2711765d9102494a327b (HEAD -> hot-fix)
Author: syb <903923381@qq.com>
Date:   Fri Mar 18 14:15:46 2022 +0800hot-fix first commmitcommit 1eb2fb245fbf8d5a28d35fb1072b80befb67e4c2 (master)
Author: syb <903923381@qq.com>
Date:   Fri Mar 18 11:22:18 2022 +0800second commitcommit 4c9e1f045b47f30f3e84c0a19ee4ac641762db9d
Author: syb <903923381@qq.com>
Date:   Fri Mar 18 11:11:30 2022 +0800first commit
4.合并分支(正常合并):git merge 分支名

在 master 分支上合并 hot-fix 分支(将hot-fix的合并到master)。

# 首先要切换到master分支上
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ git checkout master
Switched to branch 'master'#将hot-fix的合并到master
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git merge hot-fix
Updating 1eb2fb2..38e0799
Fast-forwardhello.txt | 3 ++-1 file changed, 2 insertions(+), 1 deletion(-)#合并后,可以在master分支上看到hot-fix上分支对文件的修改
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ cat hello.txt
hello Git!22222
hot fix
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!#合并后,hot-fix分支依然存在,并未消失
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git branch -vhot-fix 38e0799 hot-fix first commmit
* master  38e0799 hot-fix first commmiterhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git branch hot-fix
fatal: a branch named 'hot-fix' already exists
5.冲突合并:

冲突产生的原因

并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。 Git 无法替我们决定使用哪一个,因此,必须人为决定新代码内容。

产生冲突

首先,在master修改文件hello.txt最后修改内容,并提交:

erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ vim hello.txterhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ cat hello.txt
hello Git!22222
hot fix
master test
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!

提交至本地库区:

#提交至暂存区
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git add hello.txt#提交至本地库
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git commit -m "master test" hello.txt
[master 3288538] master test1 file changed, 1 insertion(+)

然后,在hot-fix修改文件hello.txt最后一行内容,并提交:

#切换至hot-fix
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ vim hello.txt#查看修改
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ cat hello.txt
hello Git!22222
hot fix
hot fix test
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!#提交暂存区
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ git add hello.txt#提交本地库
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ git commit -m "hot fix test" hello.txt
[hot-fix 0dad068] hot fix test1 file changed, 1 insertion(+)

切换到master分支,然后将hot-fix分支的合并到master,冲突产生:

#切换分支
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ git checkout master
Switched to branch 'master'#冲突产生 代码合并失败
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git merge hot-fix
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.# MERGING 出现,表示有冲突待解决
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master|MERGING)
$ git status
On branch master
You have unmerged paths.(fix conflicts and run "git commit")(use "git merge --abort" to abort the merge)Unmerged paths:(use "git add <file>..." to mark resolution)both modified:   hello.txtno changes added to commit (use "git add" and/or "git commit -a")#查看 <<<当前分支的代码===     ===要合并的代码>>>
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master|MERGING)
$ cat hello.txt
hello Git!22222
hot fix
<<<<<<< HEAD
master test
=======
hot fix test
>>>>>>> hot-fix
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!

解决冲突

编辑有冲突的文件,删除特殊符号,决定要使用的内容

<<<<<<< HEAD
当前分支的代码
=======
合并过来的代码
>>>>>>> hot-fix
#选择要和合并的代码
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master|MERGING)
$ vim hello.txterhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master|MERGING)
$ cat hello.txt
hello Git!22222
hot fix
master test
hot fix test
hot-fix
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!#提交后才能合并成功
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master|MERGING)
$ git status
On branch master
You have unmerged paths.(fix conflicts and run "git commit")(use "git merge --abort" to abort the merge)Unmerged paths:(use "git add <file>..." to mark resolution)both modified:   hello.txtno changes added to commit (use "git add" and/or "git commit -a")#提交暂存区
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master|MERGING)
$ git add hello.txt#提交本地库 注意此时不能带文件名 否则会爆错
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master|MERGING)
$ git commit -m "meger test"
[master 1572ab3] meger test#查看是否提交成功
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ cat hello.txt
hello Git!22222
hot fix
master test
hot fix test
hot-fix
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!

此时只会修改master 的内容 不会修改hot-fix的内容

erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git checkout hot-fix
Switched to branch 'hot-fix'erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ cat hello.txt
hello Git!22222
hot fix
hot fix test
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!

5.Git团队协作机制

团队内协作

跨团队协作

6.GitHub操作

官网:GitHub: Where the world builds software · GitHub

创建远程仓库

1.登录:

登陆后点击右上角+号,选择new respository创建远程库

生成远程库链接

远程仓库操作

命令名称 作用
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址 起别名
git push 别名 分支 推送本地分支上的内容到远程仓库
git clone 远程地址 将远程仓库的内容克隆到本地
git pull 远程库地址别名 远程分支名 将远程仓库对于分支最新内容拉下来后与 当前本地分支直接合并

1.创建远程库别名:

  • git remote -v : 查看当前所有远程地址别名
  • git remote add 别名 远程地址 :起别名
#此时没有别名
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ git remote -v#创建别名
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ git remote add gitdemo https://github.com/peacelovea/gitdemo.git#创建别名成功
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ git remote -v
gitdemo https://github.com/peacelovea/gitdemo.git (fetch)
gitdemo https://github.com/peacelovea/gitdemo.git (push)

2.推送本地库到远程仓库

基本语法:git push 别名 分支

将master分支推送到远程仓库:

erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (hot-fix)
$ git checkout master
Switched to branch 'master'erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ cat hello.txt
hello Git!22222
hot fix
master test
hot fix test
hot-fix
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!#网络可能失败
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git push gitdemo master
fatal: unable to access 'https://github.com/peacelovea/gitdemo.git/': Failed to connect to github.com port 443 after 21082 ms: Timed out

弹出github登录框

我这里选择第二个使用code登录

输入完code后

推送成功

erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git push gitdemo master
Enumerating objects: 18, done.
Counting objects: 100% (18/18), done.
Delta compression using up to 8 threads
Compressing objects: 100% (12/12), done.
Writing objects: 100% (18/18), 1.35 KiB | 275.00 KiB/s, done.
Total 18 (delta 5), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (5/5), done.
To https://github.com/peacelovea/gitdemo.git* [new branch]      master -> master

刷新github后,可以在远程库看到本地库的代码

3.远程库拉取到本地库

基本语法:git pull 别名 分支

在Github(远程库)上修改hello.txt文件,并提交。

拉去代码到本地库:

erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git pull gitdemo master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 690 bytes | 32.00 KiB/s, done.
From https://github.com/peacelovea/gitdemo* branch            master     -> FETCH_HEAD1572ab3..e61407f  master     -> gitdemo/master
Updating 1572ab3..e61407f
Fast-forwardhello.txt | 1 +1 file changed, 1 insertion(+)erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git status
On branch master
nothing to commit, working tree clean# 和Github代码一致
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ cat hello.txt
hello Git!22222
hot fix
master test
hot fix test
hot-fix
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
Edit from Github first commit

4.克隆远程库到本地

基本语法:git clone 远程地址

创建一个新文件夹

在远程库获取地址URL

注意:在gitClone目录打开Bash命令

erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitClone
$  git clone https://github.com/peacelovea/gitdemo.git
Cloning into 'gitdemo'...
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 21 (delta 6), reused 17 (delta 5), pack-reused 0
Receiving objects: 100% (21/21), done.
Resolving deltas: 100% (6/6), done.#进入到gitdemo
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitClone
$ cd gitdemo#查看别名
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitClone/gitdemo (master)
$ git remote -v
origin  https://github.com/peacelovea/gitdemo.git (fetch)
origin  https://github.com/peacelovea/gitdemo.git (push)

克隆成功

clone 会做如下操作:

  1. 拉取代码。
  2. 初始化本地仓库。
  3. 创建别名。

5.GitHub_团队内协作

一、选择邀请团队成员。(在仓库设置里操作)

二、填入成员账号,将成员添加到仓库。

三、复制邀请函(链接)发送给成员 ,如:https://github.com/atguiguyueyue/git-shTest/invitations。

四、成员登陆账号在github,在浏览器复制链接,点击接受邀请。

五、成员邀请成功之后,可以在Github账号上看到将来共同开发远程仓库。

六、目标合作者可以修改内容并 push 到远程仓库。

# 编辑 clone 下来的文件
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest(master)
$ vim hello.txt
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest(master)
$ cat hello.txt
hello git! hello atguigu! 2222222222222
hello git! hello atguigu! 33333333333333
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu! 我是最帅的, 比岳不群还帅
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu! master test
hello git! hello atguigu! hot-fix test# 将编辑好的文件添加到暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest(master)
$ git add hello.txt# 将暂存区的文件上传到本地库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest(master)
$ git commit -m "lhc commit" hello.txt
[master 5dabe6b] lhc commit
1 file changed, 1 insertion(+), 1 deletion(-)# 将本地库的内容 push 到远程仓库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest
(master)
$ git push origin master
Logon failed, use ctrl+c to cancel basic credential prompt.
Username for 'https://github.com': atguigulinghuchong
Counting objects: 3, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 309 bytes | 309.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/atguiguyueyue/git-shTest.git
7cb4d02..5dabe6b master -> master

七.回到发送合作邀请者的 GitHub 远程仓库中可以看到,最后一次是目标合作者提交的。

6.GitHub_跨团队协作

一、将远程仓库的地址复制发给邀请跨团队协作的人,比如东方不败。

或者直接搜索项目名称

二、在东方不败的 GitHub 账号里的地址栏复制收到的链接,然后点击 网页右上方的Fork按钮,将项目叉到自己的本地仓库

叉成功后可以看到当前仓库信息。

三、东方不败就可以在线编辑叉取过来的文件。

四、编辑完毕后,填写描述信息并点击左下角绿色按钮提交。

五、接下来点击上方的 Pull 请求,并创建一个新的请求。

六、回到岳岳 GitHub 账号可以看到有一个 Pull request 请求。

进入到聊天室,可以讨论代码相关内容。

七、如果代码没有问题,可以点击 Merge pull reque 合并代码。

7.GitHub_SSH免密登录

远程仓库中还有一个 SSH 的地址,因此我们也可以使用 SSH 进行访问。

这里提示没有ssh密钥

先到用户的主页目录,删除.ssh文件夹(如果没有.ssh文件夹,忽略此步)

打开Git Bash,运行命令ssh-keygen生成.ssh目录 敲三次回车:


erhang@DESKTOP-PNIJAHF MINGW64 ~
$ ssh-keygen -t rsa -C 903923381.com
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/erhang/.ssh/id_rsa):
Created directory '/c/Users/erhang/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/erhang/.ssh/id_rsa
Your public key has been saved in /c/Users/erhang/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:内容...
The key's randomart image is:
+---[RSA 3072]----+
|    ....E  .==   |
| .   o+++ . ...  |
|  o  oB=.+ .     |
|   o ++==o.      |
|    =.o*S..      |
| . B o+o..       |
|  * *o           |
| . o...          |
|   .++.          |
+----[SHA256]-----+

重新生成了.ssh目录

查看公钥

erhang@DESKTOP-PNIJAHF MINGW64 ~
$ cd .ssherhang@DESKTOP-PNIJAHF MINGW64 ~/.ssh
$ cat id_rsa.pub
ssh-rsa .............

将生成的公钥添加至Github账号SSH设置

打开setting/SSH and GPG keys

添加成功

添加公钥后,可不用输入Github账号密码便可推送。

接下来通过SSH方式提交hello.txt。

erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ cat hello.txt
hello Git!22222
hot fix
master test
hot fix test
hot-fix
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
hello Git!
Edit from Github first commit#修改本地仓
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ vim hello.txterhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git add hello.txterhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)modified:   hello.txterhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git commit -m "ssh test"
[master 81efd31] ssh test1 file changed, 1 insertion(+)# 通过SSH推送
erhang@DESKTOP-PNIJAHF MINGW64 /d/tool/Git/GitSpace/gitdemo (master)
$ git push git@github.com:peacelovea/gitdemo.git
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 270 bytes | 270.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:peacelovea/gitdemo.gite61407f..81efd31  master -> master

推送成功。

7.IDEA集成Git

环境准备

1.配置 Git 忽略文件

如:

为什么忽略:

一般我们只希望保存pom文件和代码,这些文件与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。例如,Maven工程根据src生成的target。

怎么忽略:

1.创建忽略文件XXXX.ignore(前缀名随便起,建议是git.ignore),这个文件的存放位置原则上哪里都可以,为了便于~/.gitconfig文件引用,建议也放在用户家目录下

git.ignore 文件模版内容如下:

# Compiled class file
*.class# Log file
*.log# BlueJ files
*.ctxt# Mobile Tools for Java (J2ME)
.mtj.tmp/# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml

将文件模板复制到git.ignore后

在.gitconfig 文件中引用忽略配置文件(此文件也在 Windows 的家目录中)

[user]name = sybemail = xxxxxxxx@qq.com
[core]excludesfile = C:/Users/erhang/git.ignore

注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”

2.idea中定位Git程序

打开设置

选中bin/git.exe

点击右上角test,弹出git的版本,保存配置,定位成功

3.初始化Git

点击导航栏VCS,选择create git repository

选中项目的根目录(默认就选中了),点击ok

可以看到项目根目录出现了.git文件

同时项目颜色变成了红色(git红色表示文件未被追踪,即文件还没被添加到暂存区)

4.添加到暂存区

这里我创建一个名叫HelloGit的Maven工程。重复3的操作

创建一个HelloGit类,将其添加Git暂存区。

创建完类后idea会自动提醒是否添加暂存区。

点击add,该类变绿色(绿色说明添加到了暂存区,还没有添加到本地库)

也可以右键单击文件,Git->add,手动添加

也可以将这整个项目一次性add,右键单击文件根目录,手动add

5.提交本地库

右键单击项目根目录,选择Git->Commit Directory。

添加成功,控制待打印信息

被提交的类变为正常的黑色

6.切换版本

修改一行代码

此时被修改的文件变蓝,蓝色说明被追踪过但是又被修改了

我们要重新add,commit,可以看到代码的不同

再添加第三个版本,

因为已经被被追踪过,这里我们可以直接commit

此时有三个版本了

可以看到修改信息

切换版本:

右键选择要切换的版本,然后在菜单里点击 Checkout Revision。

此时头指针指向第二版本,文件也变为第二版本的文件

7.创建分支

右键点击HelloGit,Git -> Branches,或者点击IDEA的右下角,点击New Branche:

或:

弹出框,输入分支名:

8.切换分支

点击右下角分支选择checkout,可以切换分支

或者在log窗口,右键点击分支,选择checkout:

9.合并分支(正常合并)

在hot-fix分支修改类并commit提交:

切换到master分支

我们要将hot-fix分支合并到master分支:

点击右下角master,选择hot-fix分支,选择Merge into Current

如果代码没有冲突, 分支直接合并成功,分支合并成功以后,代码自动提交,无需手动提交本地库。

10.合并分支(冲突合并)

分别在master,hot-fix分支修改HelloGit类同一行,并提交,故意制作冲突:

此时两分支代码是一样的,我们切换到hot-fix分支,修改一行代码

提交,

提交成功后,切换到master分支,修改同样位置代码

提交

这里我不小心创建了两个

在master分支上合并hot-fix分支

点击Merge into Current,弹出冲突框,点击Merge手动合并

点击apply,合并成功,自动提交本地库

查看日志信息,可以看到hot-fix-commit-2和master commit-2合并成了一个版本

IDEA集成GitHub

1.设置GitHub账号

在菜单栏File->Setting->搜索栏搜GitHub,添加GitHub账号:

弹出网页,授权即可


2.分享项目到GitHub

在github主页可以看到项目

点击History可以看到本地库对应的版本

3.push推送代码到远程库

注意: push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,
push 的操作是会被拒绝的。也就是说, 要想 push 成功,一定要保证本地库的版本要比远程库的版本高! 因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!

https协议push

在app类中新增一行代码push test并提交到本地库

此时远程库是没有该代码的,点击Git->push

push成功

在远程库可以看到新增代码

ssh协议push

如果由于网络问题,无法push,我们之前设置过ssh免密登录,也可以用ssh方式push

在远程库HelloGit中,复制ssh链接

app类新增代码并提交到本地库

点击push,选择ssh push commit,点击push

push成功

回到github主页可以看到代码push成功

注意:如果你开的有vpn,https很快就能push,但是ssh会因为网络代理的问题push失败,ssh方式push时把vpn关掉

4.pull拉取远程库到本地库

我们在远程库即github主页对代码进行更新,并提交

此时远程库的代码已经比本地库的代码更新了

注意: pull 是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动
合并,如果自动合并失败,还会涉及到手动解决冲突的问题,所以在pull时尽量不要改写本地库的代码。

右键点击项目,可以将远程仓库的内容 pull 到本地仓库:

拉取成功

注意:我这里pull fail了好几次,原因是开启了vpn 关掉即可

5.clone远程库代码到本地

我们已经把代码托管到了github上,本地的代码相当于一个备份,这里我直接删除HelloGit项目,利用clone 将代码重新克隆到本地

1.删除项目

2.重新打开idea

在GitHub主页上复制HelloGit项目的链接,我这里复制的是ssh链接

Clone成功后,项目从远程库重新克隆到了本地

Gitee(码云)

简介

GitHub 服务器在国外, 使用 GitHub 作为项目托管网站,如果网速不好的话,严重影响使用体验,甚至会出现登录不上的情况。针对这个情况, 大家也可以使用国内的项目托管网站-码云。使用方式跟 GitHub 一样,而且它还是一个中文网站,如果你英文不是很好,它是最好的选择。

官网:https://gitee.com

账号注册登录

创建远程库

跟Github的类似。点击+号->新建仓库

也可以从GitHub与GitLab中导入仓库。

创建成功

IDEA集成Gitee

首先,要在IDEA安装Gitee插件。

在菜单栏选File->Settings->Plugins,搜Gitee。

安装插件成功后,重启IDEA。

功能跟在IDEA的Github插件,功能类似,如添加Gitee账号等,可参考IDEA的Github插件。

连接码云,和之前类似:

push推送代码到远程库

可以将本地项目发布到码云上

如果不想点这个,也可以用push推送到码云仓库

打开码云主页,可以看到项目成功被push到远程仓

演示一下完整过程:

本地库新增一行代码

提交

选择码云的链接push

push成功:

pull拉取代码到本地库

在gitee上修改项目,并提交

选pull按钮,这里要选择码云的路径,不要pull错了

pull成功

clone远程库代码到本地库

1.关闭idea,将项目删除

2.重新打开idea

选择gitee的项目

clone成功

码云复制GitHub

Gitee可以把GitHub的项目迁移到Gitee上,迁移后可以进行同步刷新,不再赘述

git学习笔记[idea整合GitHub,Gitee](非常详细)相关推荐

  1. Git 学习笔记:6 GitHub

    Git 学习笔记:6 GitHub 账户的 创建和配置 SSH访问 头像 邮件地址 两步验证 对项目做贡献 派生(fork)项目 GitHub 流程 创建合并请求 利用合并请求 合并请求的进阶用法 将 ...

  2. ​​​​​​​Git学习笔记与IntelliJ IDEA整合

    2019独角兽企业重金招聘Python工程师标准>>> Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:htt ...

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

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

  4. Git学习笔记:中国版GItHub,码云

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  5. Git学习笔记:标签管理以及GItHub

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  6. git学习笔记(5):idea中使用github

    一.idea中配置github File-Settings-左上角搜索github.没有的话去插件下载github. 点击之后直接跳转至浏览器(github已登录状态)授权. 没有github的话,需 ...

  7. Git学习笔记使用记录

    文章目录 Git学习笔记 基本 配置环境 Install 初始化workspace Git 全局设置Global Configuration: 配置账户 创建项目仓库Create project re ...

  8. git学习笔记(全,附命令大全)

    git学习笔记(全) 注:本文参考自廖雪峰官网 下图来自Git Cheat Sheet侵删 git优点 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上. Git跟踪并管理的是修改 ...

  9. Git学习笔记(复习专用,B站狂神说)

    Git学习笔记 1.Git和Linux的历史 2.常用的Linux命令 3.Git基本理论(核心) 工作流程: 4.Git项目搭建 本地仓库搭建 5.Git文件操作 忽略文件 6.GitHub的使用 ...

最新文章

  1. KMP中next数组的理解
  2. Redis学习笔记(一)
  3. 【Android】手机端的投射
  4. 关于导入geoserver 源码到Eclipse编译运行
  5. 【渝粤教育】国家开放大学2018年春季 0089-22TInternet和Intranet应用 参考试题
  6. video 微信 标签层级过高_什么是微信小程序二级分销系统?如何玩转?
  7. Tab选项卡切换效果JavaScript汇总
  8. 如果一栋楼起火谁赔偿_太原一辆快递车起火!赶紧看看有你的包裹没?
  9. canvas一些属性
  10. 类似微信的即时通讯服务器,除了微信,还有这些常用即时通讯APP
  11. 等差数列及等比数列求和公式
  12. NETBASE DAY04(03):华为交换机设置超时闲置时间,密码以及恢复出厂设置
  13. element-ui upload 多个文件一次请求上传(Vue精简版)
  14. 【Endnote X9服务器运行失败】
  15. 干货 | 产品经理如何画脑图
  16. 苹果xsmax怎么开机_苹果11和苹果XSMax怎么选?还以为差别不大,对比后才知道差别大了!...
  17. Cause java.sql.SQLDataException Unsupported conversion from LONG to java.sql.Timestamp
  18. 数据异动类问题分析-GMV下降
  19. 投票系统开发问题合集
  20. JS调用天气其他杂谈

热门文章

  1. 【卡顿检测】深入理解
  2. matlab角频率怎么表示,[Matlab]频率f,角频率Ω和数字频率w的物理含义
  3. C#mdi 建立多窗口
  4. jetson xavier nx 系统及相关环境配置(cuda,torchvision,torch,tensorflow,opencv)
  5. 大数据技术原理与应用之【云数据库】习题
  6. 安全环保专题培训考试题
  7. 会议或期刊是否被EI
  8. Adobe Photoshop CC 2018绿色免激版
  9. 大数据技术之数据采集篇
  10. IAR 显示行号设置