由于个人记性不怎么好,对于版本控制工具的使用也不怎么常用,对于一些命令的使用参照各个博客,仅做个人记录。
2022-08-28 :经过了这么久的拖延,今天终于下定决心好好更新一下关于git操作的内容,因为自己也是通过诸多前辈的文章和视频,逐步摸索出一套git使用方案,从最基础的开始,再到项目基本使用,最后就是较为成熟和完善的团队协作开发。
首先理解代码仓库之间的关系
追踪和未追踪:针对的是工作区文件的一个状态,追踪则表示文件被git纳入版本控制,未追踪则表示文件没有被git纳入版本控制。可以通过git add命令添加文件到暂存区进行跟踪。
远程代码仓库应该是我们最好理解的一个内容了,对应着一个云端的文件存储,通过git命令结合身份认证,能够将我们本地的代码(文本、图片等等)上传到一个服务器上【push】,即github或gitee。出了上传我们也能够下载回来【pull】。同时平台对于服务于无数个用户,对应的将代码存放容器命名为仓库,同时也拓展了仓库的一系列功能。
本地代码管理分为工作区、暂存区、本地仓库三部分。
工作区:我们打开项目的时候,一侧菜单文件目录中的所有内容就是我们的工作区,在这里我们可以进行增、删、改等操作,需要注意的是这里面不包括我们的.git隐藏文件夹内容。
暂存区:暂存区是一个很有意思的设置,位于.git目录下隶属于我们工作区和本地仓库的中间过渡件,它里面的内容既不是我们原本的代码,也不是我们修改后的代码,它是作为一个日志一样的存在,记录了我们所有在工作区的改动,包括文件、代码的增删改、重命名。暂存区存在最大的意义是记录了发生变化前后的部分状态,而不是直接存储前后两份文本,这显然是不合理的。
本地仓库:通过【commit】将暂缓区内的代码状态同步到本地仓库作为备份,形成一个版本,该版本保存了所有暂缓区内修改后的代码,是一个同步的、工作区某一个时刻的全部代码。
本地代码仓库搭建、远程仓库连接
下载git并配置环境
git的安装和配置文章有很多,小伙伴们可以参考:git的安装
这部分需要牢记的是如下几个命令:
git config --local -l #查看仓库级别的配置 优先级高
git config --global -l #全局环境下的配置信息 包括user.name和user.email两部分。优先级较高
git config --system -l #系统环境下的配置信息。优先级低
本地git环境已经配置的操作
方式一的代码:
echo "# project_1" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/Super-chen-big/project_1.git
git push -u origin main
方式二的代码:
git remote add origin https://github.com/Super-chen-big/project_1.git
git branch -M main
git push -u origin main
- 需要注意的是以前创建的仓库主分支名字变为了main,不再是master了
git branch -M main 即将当前分支名称更改为main。
-
将本地仓库与远程仓库关联
注意本地仓库和远程仓库的关联和本地分支与远程分支是完全不一样的
git remote add origin 远程仓库地址
- 将本地代码仓库分支关联到远程仓库分支 push操作
我们要想将本地分支推送到远程仓库中,在远程仓库就必须有一个分支和本地分支关联起来。通过 git push -u <远程仓库名> <本地分支名> 即可完成,这条命令在远程仓库创建一个与本地分支同名的分支,并且将本地仓库分支和远程仓库分支关联起来,同时将本地仓库中分支的内容推送到远程仓库分支!
代码仓库相关指令操作
一个基本提交流程以及说明。
红色表示工作区有修改,但是没有提交到暂存区。需要git add指令来操作
绿色表示暂存区内存在没有同步到本地仓库的内容。需要git commit指令来操作
灰色的(use git push to publish your local commits)表示本地仓库有改变,即生成了一个新的版本,需要通过git push命令来同步到远程仓库。再次查询状态时,状态会变为nothing to commit, working tree clean
将工作区修改同步到暂存区
- 将当前路径下所有更改同步到暂存区
git add .
- 不管当前位于工作区的那个路径下,都将工作区所有的变化同步到暂存区
git add --all
- 加上了参数-u表示的意思是在git add .前提下,做了一个同步筛选,即要求是已跟踪文件中的删改,不包括新增加的文件。
git add -u .
- 参数-A表示将所有的已跟踪的文件修改和删除和新增的未跟踪的文件都添加到暂存区。
git add -A .
- 将某个文件类型的文件都添加到暂存区
git add *.html
区别git add . 和git add *;git add . 会把本地所有untrack的文件都加入暂存区,并且会根据.gitignore做过滤,但是git add * 会忽略.gitignore把任何文件都加入
暂存区内容提交到本地代码仓库
参照前辈在博客里的描述: git commit 主要是将暂存区里的改动给提交到本地的版本库。每次使用git commit 命令我们都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-id,commit-id在版本回退的时候是非常有用的,它相当于一个快照,可以在未来的任何时候通过与git reset的组合命令回到这里。
- 将本地暂存的修改同步到本地仓库,git commit 也可以通过vim编辑器来编辑并提交内容
git commit -m "说明内容"
- 从工作区直接一步到位,同步到本地仓库。
git commit -a -m "信息内容"
- 通过vim修改上一次的提交信息,但是需要注意commitId发生改变,再次提交会出现不同步的错误,可以加上-f强制合并提交。除此之外,可以将将最近的修改追加到上一次提交上,即commitid不变。这个指令的意义是出于一些比较小的改动不再重现创建一个commit。
git commit --amend
提交到远程仓库
参考了博客:git push 详解
参照下面这个命令格式,我们将常用的push命令及其含义罗列一遍。
git push <远程主机名> <本地分支名>:<远程分支名>
- 将本地分支推送到与之存在追踪关系的远程分支,如果该远程分支不存在,则会被新建。
git push origin master #将本地的master分支推送到origin主机的master分支,不存在则新建。
- 只省略本地分支名进行推送的话,相当于推送了一个空的本地分支去覆盖远程分支,等同于删除远程分支。
git push origin :main #等同于git push origin --delete master
- 如果当前分支和远程分支间存在追踪关系,则可以简化提交命令,可以省略本地分支和远程分支,一般是分支同名的追踪关系
git push origin
- 如果当前分支只有一个追踪分支,那么主机名都可以省略
git push
- 如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。
git push -u origin master
远程分支
强烈推荐大家去看一看这一篇博客:git命令及git合并分支进行多人协作
git branch -r #列出所有远程分支。
git branch -a #列出所有分支。
git branch -vv #列出本地分支和远程分支的映射信息
查看远程仓库所有分支列表
git remote show origin
将远程仓库分支下载到本地分支:默认将自动切换分支
git checkout 远程分支名称
拉取当前分支在远程仓库对应分支最新文件内容
git pull
删除远程仓库指定分支
git push 远程仓库名称 --delete 远程分支名称
本地分支
参考博客:git 创建本地分支 切换本地分支 合并本地分支
查看本地分支
git branch
查看远程分支
git branch -r
查看所有分支,包括本地和远程分支
git branch -a
创建本地分支
git branch <branchName>
切换本地分支
git checkout <branchName>
创建一个分支并切换到该分支
git checkout -b <branchName>
合并某分支到当前分支
git merge <branchName>
删除分支:只能删除非当前分支,和已经合并过的分支
git branch -d <branchName>
强制删除对应分支,哪怕他是没有经过合并的分支
git branch -D <branchName>
日志查看
- 显示日志详情
git log
- 只显示日志中commitid和message
git log --pretty=oneline
- 紧接着上一个指令,-n即显示出前n行。
git log --pretty=oneline -2
对比查看工作区、暂存区、本地仓库
git diff 查看工作区与暂存区的差别:必须是已经跟踪了的文件,即提交到暂存区的文件
git diff
查看工作区和本地仓库的差别:必须是已经跟踪了的文件
git diff HEAD
查看暂存区与本地仓库的差别 :必须是已经跟踪了的文件
git diff --cached
补充内容
git fetch和git pull的区别
- git fetch仅仅是将远程仓库的更新拉取到本地仓库,更新本地仓库中对远程仓库的引用等信息,同时会生成FETCH——HEAD文件保存对应远程分支的最新提交记录的值。即git fetch 只会拉取远程仓库的更新,但是不会将其合并到本地。
- git pull 将远程仓库的更新拉取下来并自动进行合并操作。
一般更建议先使用 git fetch拉去更新,然后再用git merge合并,这样可以考虑是否要将远程仓库合并到我们本地。
创建新的本地分支,切换本地分支,进行开发的时候,所遇到的代码版本问题
经过我的实际操作验证,得出结论。我们在创建代码分支的时候,相当于对之前分支代码进行了一次快照,我们在新分支上的一切更改,与原分支无关,这一点我们在切换分支的时候可以看到,工作区是不同的(新分支上,我新增了一个文件,切换回原分支的时候,文件消失。和之前的快照一样。)所以不需要担心代码隔离的问题。
关于使用git merge和git rebase的区别问题文章来源:https://www.toymoban.com/news/detail-409868.html
相同点:都可以合并代码
不同点:
1.通过merge合并分支会新增一个merge commit,然后将两个分支以前的commit记录都指向这个新的commit,是一种非破坏性的操作,保留之前的每个分支的commit,现有分支不会被更改,但是会导致历史记录相对复杂。
2.rebase会先找到两个分支的第一个共同的commit祖先记录,提取在这之后的所有commit记录,将这些记录添加到目标分支的最新提交后面,变成了线性的记录,有效整合所有分支上的提交;主要好处是历史记录清晰,是在原有提交的基础上将差异内容反映出来,消除了git merge带来的不必要的合并提交。
3.rebase操作后会丢弃当前分支已经提交的commit,所以不要在已经push到远程以及和其他人正在协作开发的分支上执行rebase操作文章来源地址https://www.toymoban.com/news/detail-409868.html
到了这里,关于小白都看得懂的git代码仓库管理手册的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!