最近开始学习git这个版本控制系统,这个博客作为个人的git学习记录博客。
个人是去廖雪峰的网站看git教程的。
文章目录
- git与集中式版本控制系统区别
- git的内部结构:
- git命令:
- 初始化git仓库
- 添加代码或文件到git的暂存区
- 提交到仓库
- 查看当前git仓库的状态
- 修改文件时,查看改动了什么
- 查看仓库的历史提交信息
- 比较简洁地查看历史提交信息
- 查看仓库的命令记录
- 回滚到某一时间点,或者回到未来的某一时间点,(根据commit_id)
- 文件已经编辑,但没有提交到暂存区,撤销编辑
- 文件已经编辑,并且已经提交到暂存区,清空暂存区并撤销编辑
- 删除git仓库中的某个文件
- 关联远程仓库(以GitHub为例)并第一次进行推送到远程仓库
- 推送最新修改到远程仓库
- 从远程仓库中克隆仓库到本地
- 创建git分支
- 删除git分支
- 切换分支(两种)
- 合并分支
- git log参数之显示合并图,缩短显示commit_id
- git push的普通模式合并(非fast forward合并)
- 关于工作区现场(stash)的操作
- 把某一个提交修改复制到当前分支中(不用去合并)
- 多人协作
- 标签管理
- git与GitHub或Gitee(码云)的远程连接
- git的补充知识
git与集中式版本控制系统区别
git和集中式版本控制系统的区别大致有:
1. 分布式管理,不在太过依赖中央服务器,没网也可以进行工作。
2. 在集中式版本控制系统中的中央服务器如果误删除了你的git仓库,或者服务器故障,那么你存放的git代码也无法找回了,而分布式可以有多个副本,如果一个出现故障,可以去别的那里备份
3. 分布式管理代码,效率会更高。
4. git管理的是文件的修改,而集中式如svn管理的是文件
4. 等等,后续发现接着补充。。。
由于是分布式管理,所以一个团队里不同的开发人员写好代码后可以互相推送,前提是要在同一个局域网下。如果不在同一个局域网下的话,git它是有一个类似“中央服务器”的电脑,可以拿它来中转,这里借用一下廖雪峰老师的图:
这样就可以完成团队间的协作了。
git的内部结构:
1. 工作区(Working DIrectory)
工作区就是你当前git仓库所在的目录
我这里是git目录
2. 版本库(Repository)
工作区里面有一个隐藏的.git
文件,这个就是Git的版本库
Git的版本库里存了很多东西,其中最重要的就是称为stage
(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
你的git add
命令就是往暂存区里面添加,之后commit就推送到当前分支下
当你把文件一个一个添加到暂存区(stage)时,使用git commit命令就可以一股脑的全推送到分支下了
git命令:
#设置你的git用户信息(全局)
git config --global user.name “Your Name”
git config --global user.email “[email protected]”
初始化git仓库
git init
添加代码或文件到git的暂存区
git add (filename)
提交到仓库
git commit -m "描述"
查看当前git仓库的状态
git status
修改文件时,查看改动了什么
git diff (filename)
查看仓库的历史提交信息
git log
比较简洁地查看历史提交信息
git log --pretty=oneline
查看仓库的命令记录
git reflog
回滚到某一时间点,或者回到未来的某一时间点,(根据commit_id)
git reset --hard (commit_id)
git reset --hard (HEAD^)
文件已经编辑,但没有提交到暂存区,撤销编辑
git checkout – (filename)
文件已经编辑,并且已经提交到暂存区,清空暂存区并撤销编辑
git reset HEAD (filename)
git checkout – (filename)
删除git仓库中的某个文件
-
首先在工作区中删除该文件
rm -rf (filename) -
然后在git版本库中将其删除并记录改动
git rm (filename)
git commit -m "delete a file"
关联远程仓库(以GitHub为例)并第一次进行推送到远程仓库
git retome add origin [email protected]:michaelliao/learngit.git
git push -u origin master
推送最新修改到远程仓库
git push origin master
从远程仓库中克隆仓库到本地
git clone [email protected]:(username@repositoryname)
创建git分支
git branch <branch name>
删除git分支
git branch -d <branch name>
切换分支(两种)
git switch <branch name> #需要git版本2.23以上
git checkout <branch name>
合并分支
git merge <branch name>
git log参数之显示合并图,缩短显示commit_id
git log --graph --pretty=oneline --abbrev-commit #--graph显示分支合并图,--abbrev-commit只显示commit_id前几位
git push的普通模式合并(非fast forward合并)
git merge --no-ff -m "普通模式合并,即新创建一个结点,非只改变指针" <branch name>
关于工作区现场(stash)的操作
保存当前工作区现场
git stash
查看工作区现场
git stash list
恢复及删除工作区(只有一个stash时,后面的id可省略)
git stash apply stash@{id} #恢复某一个工作区现场
git stash drop stash@{id} #删除某一个工作区现场
git stash pop stash@{id} #恢复并删除一个工作区现场
把某一个提交修改复制到当前分支中(不用去合并)
git cherry-pick <commit_id>
多人协作
查看远程仓库的详细信息
git remote -v
抓去远程仓库的最新提交
git pull
创建本地与远程仓库的对应分支
git switch -c <branchname> origin/<branchname>
建立本地仓库与远程仓库的关联
git branch --set-upstream <branchname> origin/<branchname>
标签管理
创建标签
git tag <tagname> [commit_id] #commit_id为可选,如果要指定提交,则填上指定commit_id,默认最新提交
git tag -a <tagname> -m "为标签加上描述" [commit_id]
查看所以标签
git tag
推送标签
git push origin <tagname> #推送指定标签
git push origin --tags #推送全部未推送过的本地标签
删除标签
git tag -d <tagname> #删除一个本地标签
git push origin :refs/tags/<tagname> #删除一个远程标签
git与GitHub或Gitee(码云)的远程连接
GitHub(Gitee操作相同):
首先,GitHub与本地git可以采用ssh加密连接,所以就需要一个ssh公钥和密钥。创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
ssh-keygen -t rsa -C "[email protected]"
之后在GitHub的对应配置里配置上你的公钥就可以了。
使用命令关联远程仓库后就可以在本地操作了。
git的补充知识
忽略特殊文件
- 忽略某些文件时,需要编写
.gitignore
,要忽略什么文件就往里放即可 .gitignore
文件本身要放到版本库里,并且可以对.gitignore
做版本管理!