一份简短的Git学习记录
一:Git介绍
Git是免费的开源软件,用于分布式版本控制:跟踪任何一组文件的变化,通常用于协调软件开发过程中合作开发源代码的程序员之间的工作。它的目标包括速度、数据完整性和对分布式、非线性工作流程的支持(在不同系统上运行的数千个并行分支)。
- 版本控制
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。 - 团队协作
从单兵作战转换为团队作战
二:Git的安装
安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
三:初始化
$ git init
- 选择我们所需要创建/管理的git文件夹进行初始化,如图:
- 查看初始化过后的文件夹
我们可以手动去磁盘管理里面进行查看是否隐藏文件夹或者利用git的ls -a
去查看,如图:
- Git工作区,暂存区和版本库
托管平台:
- 局域网(内网)
- gitlab
- 公网(外网)
- Gitlab
- Github
- gitee
四:添加暂存区
- 添加暂存区:
$ git add test.txt
- 查看暂存区的状态:
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: test.txt
- 将上传到暂存区的文件删除:
$ git rm --cached 文件名
- 将工作区的全部文件上传到暂存区:
$ git add .
五:提交到本地库
- 将暂存区代码提交到本地仓库中:
$ git commit -m "填写注释内容"
当我们在此使用git status
查看时有“clean”关键字即代表暂存区无内容
$ git status
On branch master
nothing to commit, working tree clean
- 查看提交的历史记录:
$ git log
commit 2e6ab1b4eb40dc5b70a06e971c72d7beaf3b3e42 (HEAD -> master)
Author: Poluk <Poluk2001@163.com>
Date: Sat Nov 12 23:29:59 2022 +0800
这是第二次提交
commit 6f84ca758c44b7405337818e8b53c71bc7412e53
Author: Poluk <Poluk2001@163.com>
Date: Sat Nov 12 23:01:12 2022 +0800
这是第一次提交
六:回退版本
利用reset回退版本
- 回退到上一次提交的版本:
$ git reset --hard HEAD^
HEAD is now at 6f84ca7 这是第一次提交
- 回退到上上次提交的版本:
$ git reset --hard HEAD~2
$ git reset --hard HEAD ^^
- 查看所有操作记录:
$ git reflog
6f84ca7 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
2e6ab1b HEAD@{1}: commit: 这是第二次提交
6f84ca7 (HEAD -> master) HEAD@{2}: commit (initial): 这是第一次提交
- 根据commit id信息回退版本:
$ git reset --hard commit id
如图:
- 回退版本到暂存区:
$ git reset --soft commit id
- hard和soft回退版本的区别:
soft功能作用:
- 重新写“提交记录”
- 把已提交到master的文件回退到暂存区,并且把新修改过后的同一个文件add到暂存区合并,一起再提交到master中,这样日志中就只有一个同文件的提交记录了。
利用revert回退版本
- revert回退方式
$ git revert head
git reset: 是回滚到对应的commit-id,相当于是删除了commit-id以后的所有的提交,并且不会产生新的commit-id记录,如果要推送到远程服务器的话,需要强制推送-f
git revert: 是反做撤销其中的commit-id,然后重新生成一个commit-id。 本身不会对其他的提交commit-id产生影响,如果要推送到远程服务器的话,就是普通的操作git push就好了
PS: reset –hard 和 revert 都会退回到工作区,但是revert是创建一个新的commit id 并且HEAD指针指向新生成的id,而reset –hard是删除当前commit id并且 HEAD指针直接指向上一个id
七:分支
- 查看分支(星号代表当前所在的分支):
$ git branch
* master
- 创建分支:
$ git branch 分支名
- 切换分支:
$ git checkout 分支名
Switched to branch '分支名'
- 合并分支:
$ git merge 分支名
- 删除分支:
合并完分支后,先切换到别的分支在进行删除操作:
$ git branch -d 分支名
Deleted branch newlist (was f667656).
合并冲突:
我们在不同的分支表示不同的工作区,分别在不同的分支上进行add和commit最终的文件内容也会因为分支不同而导致内容不同。
解决合并冲突就是git也不知道保留哪个内容或者都需要保留,所以需要我们手动解决合并冲突。
示意图:
八:添加远程仓库的地址
- 创建远程仓库地址:
- 添加远程仓库的地址:
$ git remote add origin git@github.com:Github用户名/仓库名.git
#范例如下:
$ git remote add origin git@github.com:Poluk2001/testgit.git
git remote add
是命令,origin
是远程仓库名字,这是Git默认的叫法,也可以改成别的。
- 查看远程仓库名:
$ git remote -v
- 移除远程仓库名:
$ git remote remove origin
- 将本地仓库推送到远程仓库:
$ git push -u origin master
git push
是推送到远程仓库命令,-u
是记录当前地址,下次直接输入git push
命令即可;
- 拉取远程最新仓库:
$ git pull #origin master
origin master
可以不用写进去,所以这里我加了#,因为在之前默认使用-u
选项,所以git会自动识别我们之前默认的仓库名以及分支。
- 将远程仓库克隆到本地:
$ git clone git@github.com:Poluk2001/testgit.git(仓库地址)
九:团队协作与冲突
添加协作者的Github账户:
用户可以有拉取和克隆远程仓库的权限,但是推送权限只有仓库创建者所拥有,我们需要在远程仓库的setting中添加合作者:
- 点击左侧Collaboratos
- 点击Add people
- 搜索需要添加合作的Github用户
- 将生成的Pending Invite发送给需要的协作的用户,对方进行点击即可,即可完成合作邀请操作
- 合并冲突:
在与团队协作当中我们会时常遇到合并冲突,我们需要与另一个人进行沟通,进行手动合并
在每次写代码之前,我们都要使用
git pull
命令来拉取仓库最新地址,保证我们本地仓库代码与远程仓库代码一致。
- 将本地仓库的分支推送到远程仓库:
$ git push origin 本地分支名:远程分支名
- 将远程仓库分支拉取到本地仓库:
$ git pull origin 远程分支名
- 删除远程仓库的分支:
$ git push origin :远程分支名