前言:在多人开发场景,使用到Git,只是运用了几个命令,一致对它没有深刻了解,趁着疫情在家,这次系统学习Git -- 分布式版本控制系统。
1、Git与SVN对比
(1)SVN
(2) Git
2、Git工作流程
3、Git常用命令
(1) git config --list
$ git config --list
core.symlinks=true
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslcainfo=E:/Study Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
http.sslbackend=openssl
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge --skip -- %f
filter.lfs.process=git-lfs filter-process --skip
filter.lfs.required=true
credential.helper=manager
user.name=zhouth94
user.email=zhouth94@163.com
(2)获取Git仓库
·在本地初始化一个仓库
zhou@PC-ZTF MINGW64 /d/LearnStuff/GithubCode/repository1
$ git init
·从远程仓库克隆
zhou@PC-ZTF MINGW64 /d/LearnStuff/GithubCode
$ git clone https://github.com/zhouth94/leetcode.git
Cloning into 'leetcode'...
remote: Enumerating objects: 43, done.
remote: Counting objects: 100% (43/43), done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 43 (delta 3), reused 38 (delta 1), pack-reused 0
Unpacking objects: 100% (43/43), done.
(3)工作目录、暂存区、版本库概念
(4)Git工作目录下文件的两种状态
(5)git status 查看文件状态
?? 代表未跟踪状态
zhou@PC-ZTF MINGW64 /d/LearnStuff/GithubCode/leetcode (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.
zhou@PC-ZTF MINGW64 /d/LearnStuff/GithubCode/leetcode (master)
$ git status -s
?? GenerateParentheses.java
?? LetterCombinationsofaPhoneNumber.java
?? ListNode_P.java
?? ListNode_second.java
?? LongestIncreasingSubsequence.java
?? MergeKSortedLists.java
?? MergeKSortedLists_2.java
?? Permutations.java
?? RemoveNthNodeFromEndOfList.java
?? Subsets.java
(6)git reset 取消暂存
(7)git add . (别忘记后面的.,此操作是把文件夹下面的未跟踪状态的文件都添加进来)
zhou@PC-ZTF MINGW64 /d/LearnStuff/GithubCode/leetcode (master)
$ git add .
zhou@PC-ZTF MINGW64 /d/LearnStuff/GithubCode/leetcode (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: GenerateParentheses.java
new file: LetterCombinationsofaPhoneNumber.java
new file: ListNode_P.java
A 代表已经添加到暂存区
zhou@PC-ZTF MINGW64 /d/LearnStuff/GithubCode/leetcode (master)
$ git status -s
A GenerateParentheses.java
A LetterCombinationsofaPhoneNumber.java
A ListNode_P.java
A ListNode_second.java
(8)git commit 将暂存区的文件修改提交到本地仓库
git commit -m "提交信息" (如“first commit”)
zhou@PC-ZTF MINGW64 /d/LearnStuff/GithubCode/leetcode (master)
$ git commit -m "add"
[master a7ae562] add
43 files changed, 1686 insertions(+)
(9)
(10)git log 查看日志记录
zhou@PC-ZTF MINGW64 /d/LearnStuff/GithubCode/leetcode (master)
$ gitllog
bash: gitllog: command not found
zhou@PC-ZTF MINGW64 /d/LearnStuff/GithubCode/leetcode (master)
$ git log
commit a7ae5628d5e88071534a9c0486fb796a51f04edf (HEAD -> master)
Author: zhouth94 <zhouth94@163.com>
Date: Wed May 20 15:59:09 2020 +0800
add
commit 398deb33cb3303e192b0a05520637098658bd983 (origin/master, origin/HEAD)
Author: zhouth94 <zhouth94@163.com>
Date: Thu Mar 26 22:45:02 2020 +0800
bfs commit
commit 52bc2ebac3f82dc9f6e912a76e01371bcb7c8ed9
Author: zhouth94 <zhouth94@163.com>
Date: Thu Mar 26 19:41:12 2020 +0800
do two more problems
commit 5e424efc8c3be1d087126bf5520d382c5fc1d29e
Author: zhouth94 <zhouth94@163.com>
Date: Wed Mar 25 10:28:07 2020 +0800
”first commit
commit c1d2c3637cd616efc578c3cacd685ca5f96233e2
Author: Code Fish <48707464+zhouth94@users.noreply.github.com>
Date: Wed Mar 25 09:42:17 2020 +0800
Initial commit
4、远程仓库操作
(1)查看远程仓库
$ git remote
origin
zhou@PC-ZTF MINGW64 /d/LearnStuff/GithubCode/leetcode (master)
$ git remote -v
origin https://github.com/zhouth94/leetcode.git (fetch)
origin https://github.com/zhouth94/leetcode.git (push)
(2)从远程仓库抓取与拉取
·git fetch 是从远程仓库获取最新版本到本地仓库,不会自动merge
·将本地init初始化的本地仓库与github远程仓库进行关联,使用 git remote add,然后使用git fetch 进行抓取,但不会将仓库内容自动合并到工作区
·git pull 是从远程仓库获取最新版本并merge到本地仓库
(3)推送到远程仓库
当你想分享你的代码时,可以将其推送到远程仓库。 git push [remote-name] [branch-name]
zhou@PC-ZTF MINGW64 /d/LearnStuff/GithubCode/leetcode (master)
$ git push origin master
Enumerating objects: 46, done.
Counting objects: 100% (46/46), done.
Delta compression using up to 4 threads
Compressing objects: 100% (45/45), done.
Writing objects: 100% (45/45), 76.44 KiB | 3.82 MiB/s, done.
Total 45 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
5、拉取下来之后,在本地修改文件,然后推送到远程仓库
(1)
(2)需要将README.md加入暂存区并提交到本地仓库 -a 代表直接加入暂存区并提及,不需要git add . -m 代表日志信息
git commit -a -m " "
(3)提交到远程
6、Git分支
(1)查看分支
·本地分支:
·远程分支:
(2)创建分支 git branch branch1
(3)切换分支 git checkout
(4)如何将本地创建的分支推送至远程仓库分支 git push origin branch1
(5)合并分支
·切换到branch1分支,往branch1中添加代码,然后使用 git add . 加入暂存区;然后 git commit 提交到本地仓库,可以在第一行增加注释
·若切换到master分支,则在branch1分支中新增的代码是没有的。
·那么,我们希望在branch1分支中新增的代码也合并到master分支中
如何操作:首先,切换到master分支;然后 gir merge branch1 即可
(6) 将新修改的内容推送到远程仓库的某个分支
注意:本地的master分支和远程的master分支之间存在追踪关系
(7)删除分支(本地) git branch -d branch1
7、Git分支综合运用
(1)要求
8、Git标签
(1)列出已有的标签
(2)创建新标签
(3)将标签推送至远程仓库
8、在IDEA中使用Git
(1)在IDEA配置Git
(2)创建一个项目,将项目交给git管理,选择项目所在的目录,会发现隐藏目录.git出现在项目目录下
(3)将项目下的文件加到暂存区。这时,需要考虑一个问题:我们项目下的文件是否都交给git进行管理呢?实际开发中,并不是的。例如,.idea目录文件不需要交给git管理,它由idea管理的。
因此,在提交到本地仓库之前,需要先排除一些目录文件,我们使用忽略列表 .gitignore
(4)提交到本地仓库
(5)将IDEA项目推送到远程仓库
报错解决: Push to origin/master was rejected
在Terminal 输入:git pull origin master --allow-unrelated-histories
Push 成功~
9、从远程仓库克隆
(1)克隆
(2)从远程拉取代码
提交的同时推送到远程