1.git介绍:
git是一个分布式的版本控制器。使用的步骤 :官方网站下载安装包==》设置本地的用户名和邮箱地址(这里设置的名称以后不会跟远程仓库那个用户名不冲突,只是用来区分哪个人来提交的本地代码)。====》获取文件目录的工作权限==》提交到暂存区===》提交到本地库==》推送到远程仓库。
2.git常用命令
2.1 设置用户签名(本地)
git config user.name #查看当前用户名签名名称
git config user.email #查看当前用户名签名邮箱
#设置当前操作系统的用户签名
git config -global user.name xuserName
git config -global user.emeal xuserName@163.com
2.2 初始化本地库
git init #进入到需要版本控制的工作目录使用命令 git init 初始化本地目录
2.3 查看状态
git status #初始化好第一次仓库时查看当前状态
On branch master #当前工作的分支 master
No commits yet #目前没有东西可以提交
nothing to commit (create/copy files and use "git add" to track) #没有可提交的文件
vim hello.txt #创建一个文件。再次查看时提提示有文件未被追踪
git status
Untracked files: #文件没有被追踪
(use "git add <file>..." to include in what will be committed)
hello.txt #在控制台中是提示红色文件
nothing added to commit but untracked files present (use "git add" to track)#除了存在未跟踪的文件外,没有添加任何内容以提交(使用“git add”跟踪)
2.4 添加到暂存区
git add hello.txt
warning: LF will be replaced by CRLF in hello.txt. #输出的日志信息为:在这个文件的末尾 RELF换行符替换成LF的换行符
The file will have its original line endings in your working directory
#在次查看状态时 日志输出发生了改变
git status
On branch master
No commits yet
Changes to be committed: #检测到一个文件发生了改变
(use "git rm --cached <file>..." to unstage) # 使用git rm --cached file可以删除暂存区的文件
new file: hello.txt
2.5 提交本地库
git commit -m "first 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 (root-commit) 6a44669] first commit #提交的版本信息 6a44669 这是这个版本的唯一识别号
1 file changed, 7 insertions(+) #添加了一个文件到本地库中。并且插入了7行数据
create mode 100644 hello.txt
#再次查看状态时
git status
On branch master
#提交过一次本地仓库就没有了 no commits yet 的提示了
nothing to commit, working tree clean #提示没文件发生改变。此工作目录树是干净的
2.6 查看提交版本记录
git reflog #查看当前日志
6a44669 (HEAD -> master) HEAD@{0}: commit (initial): first commit #当前head的指针指向了master 带有版本信息、提交信息
Hopeful@HopefulPlus MINGW64 /e/git/git_demo01 (master)
$ git log #查看版本的详细的日志信息
commit 6a44669f6dc5186cd8d9d174223a5d261a9243e6 (HEAD -> master)#唯一识别号
Author: Hopeful <827866012@qq.com> #当前用户名
Date: Mon May 24 14:01:23 2021 +0800 #提交的时间
first commit #提交信息
2.7一个文件添加到了本地库的时。这个文件发生了改变 查看这个状态的变化
vim hello.txt
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.txt #检查到一个被修改的文件
#将修改的文件添加到暂存区
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 directory
Hopeful@HopefulPlus MINGW64 /e/git/git_demo01 (master)
git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: hello.txt #此时的文件从红色到了绿色文件
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 bec2d05] second commit
1 file changed, 1 insertion(+), 1 deletion(-) #一个文件发生了改变,一行数据被插入。一行数据被删除
#此时再查看版本信息时
git reflog #查看版本信息有两个版本提交记录
bec2d05 (HEAD -> master) HEAD@{0}: commit: second commit
6a44669 HEAD@{1}: commit (initial): first commit
2.8 版本回退 (通过hard指针改变来确定一个版本)
git reset --hard bec2d05 #回退版本信息
git reflog #查看版本信息
bec2d05 (HEAD -> master) HEAD@{0}: reset: moving to bec2d05 #最新指向的版本
6a44669 HEAD@{1}: reset: moving to 6a44669
66aa9b2 HEAD@{2}: commit: third commint
bec2d05 (HEAD -> master) HEAD@{3}: commit: second commit #head指针的转变的方式
6a44669 HEAD@{4}: commit (initial): first commit
3.git 分支操作
3.1 常用分支操作命令
git branch 分支名 #创建分支
git branch -v #查看分支名
git checkout 分支名 #切换分支
git merge 分支名 # 把指定的分支合并到前分支上
3.2 分支操作
git branch hot-branch #创建一个分支
git branch -v #查看分支
hot-branch bec2d05 second commit# 这里有两个分支了
master bec2d05 second commit
#切换分支
git checkout hot-branch #切换分支
Switched to branch 'hot-branch'
Hopeful@HopefulPlus MINGW64 /e/git/git_demo01 (hot-branch) #这里提示切换成功分支
#合并分支:合并时需要在主分支上合并被合并的分支 比如:想要在master上合并分支 就要切换到master分支上进行merge操作
Hopeful@HopefulPlus MINGW64 /e/git/git_demo01 (master) #当前分支
$ git merge hot-branch #合并分支
Updating bec2d05..39c5a00
Fast-forward
hello.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-) #日志输出 1个文件发生改变 。2行插入2行删除
#分支合并代码冲突手动解决
git merge hot-branch #合并代码
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt#合并代码时,发生冲突在这个hello.txt的文件中
Automatic merge failed; fix conflicts and then commit the result. #自动合并中发生了代码冲突。不敢自动合并了
Hopeful@HopefulPlus MINGW64 /e/git/git_demo01 (master|MERGING) #merging 在master分支上合并中。并没有合并成功
#在代码冲突的时候在查看这个状态就
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.txt #这里可以看到有两个分支对这个文件进行了修改
no changes added to commit (use "git add" and/or "git commit -a")
#手动合并代码
<<<<<<< HEAD #当前分支修改开始
hello kusen hello git master
======= #当前分支修改结束
hello kusen hello git hot-branch
>>>>>>> hot-branch #其他分支修改
hello kusen hello git
hello kusen hello git branch 333334444
hello kusen hello git
hello kusen hello git
hello kusen hello git
hello kusen hello git 2222223333333
#手动解决代码冲突时。需要在本分支上重新添加到暂存区 再提交到本地仓库 注意的是:这里提交的时候不需要添加文件名
Hopeful@HopefulPlus MINGW64 /e/git/git_demo01 (master|MERGING) #这里表示没有合并成功
$ git commit -m"merge test" #手动解决冲突时。需要提交的格式
[master 0187e09] merge test
Hopeful@HopefulPlus MINGW64 /e/git/git_demo01 (master)#这里表示已经合并成功了
4.git团队协做开发
#添加远程仓库地址 并且设置别名
git remote add git-demo https://gitee.com/hopefulplus/git_demo01.git
#查看当前远程仓库可以推送和拉去的别名
git remote -v
git-demo https://gitee.com/hopefulplus/git_demo01.git (fetch)
git-demo https://gitee.com/hopefulplus/git_demo01.git (push)
4.1将本地的代码推送到远程仓库
#如果远程仓库有文件夹了,那么需要将远程仓库的文件拉取到本地仓库中进行 然后在添加到本地仓库中。如果发生冲突就手动解决并添加到本地仓库中。
#先从远程仓库中拉取代码
git pull --rebase git-demo master
#在查看当前版本控制时,发生了错误
git status
interactive rebase in progress; onto 796e78f #这里是错误信息 : 你当前正在编辑的提交将要覆盖在 796e78 commitid 上
#使用命令继续提交文件
git rebase --continue #继续代码的提交(推荐),执行之后
#提交到远程仓库
git push git-dome master
4.2 拉去远程仓库代码
git pull git-demo master #拉取远程仓库代码
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 330 bytes | 0 bytes/s, done.
From https://gitee.com/hopefulplus/git_demo01
* branch master -> FETCH_HEAD
7825090..97607aa master -> git-demo/master
Updating 7825090..97607aa
Fast-forward
hello.txt | 1 +
1 file changed, 1 insertion(+) #拉取成功 一个文件发生改变 一行插入
4.3 克隆代码
#克隆做了三件事情 1.拉取代码 2.初始化仓库 3.创建别名
git clone https://gitee.com/hopefulplus/git_demo01.git #需要拿到远程仓库地址才能克隆
4.4 跨团队合作
跨团队合作主要的过程:1.将项目的地址连接发送给对方。2.对方将仓库fork到自己的仓库中,3.在仓库上改代码,4.然后使用 pull requests 将修改好的代码推送到远程。
5.其他操作
#拉取文件时,忽略历史文件
git pull --allow-unrelated-histories master master #前一个master是远程仓库的路径地址起的别名。后一个master是本地厂库master