E

EdwardWong

V1

2022/08/25阅读:27主题:山吹

Git

Git作为linux发明的仓库管理神器,已经备受程序员的青睐,本文将介绍git的基本语法及分支管理,以防自己在之后忘记时方便查阅。

git发布到远程仓库的基本流程

  1. git init % 初始化init
  2. git add . or git add filename % 将所有文件或者指定文件放入本地缓存
  3. git commit -m "commit information" % 将缓存内容上传到本地仓库 (m for message)
  4. git branch -M main % 创建仓库的分支 (M for main)
  5. git remote add origin url % 指定远程仓库的地址
  6. git push -u origin main 或者git push -u origin main:main(远程分支:本地分支) 或者 git push origin % 将本地仓库的main分支推送到远程的main分支

git push origin main说明如果本地的main分支是追踪分支,即使不指定远程分支,也会自己找到本地分支追踪的分支。 git push origin 说明只指定远程仓库名,那么git会根据我们目前所在的分支和它追踪的远程仓库的分支来实现数据推送,前提是我们所在的分支是追踪分支

以上是基本的git步骤将本地仓库的文件上传到远程仓库。

git几个工作区

  • 工作区
  • 缓存区
  • 本地仓库
  • 远程仓库

git clone: 从远程服务器克隆版本库到本地仓库,是一个本地从无到有的过程。

git pull: 从远程仓库获取最新commit的数据,并merge到本地仓库, git pull = git fetch + git merge

git commit: 将本地缓存的文件上传到本地仓库

git push: 将本地仓库commit的文件上传到远程仓库中

git add: 将文件上传到本地缓存中。

git分支管理

分支管理是git最核心的内容,无论在小组协同工作开发还是在软件更新迭代,都需要用到分支管理,同时也比较容易混淆,本章节将详细介绍git分支管理的基本命令及原理。

git分支操作的基本命令

  1. git branch branchname % 创建新的分支
  2. git checkout branchname % 切换到新的分支
  3. git checkout -b branchname % 为分支修改名字/创建并切换
  4. git branch -d branchname % 删除本地已合并或者没有新改动的分支
  5. git branch -D branchname % 强行删除本地分支
  6. git fetch -p或者git fetch --prune origin 或者 git remote prune origin %远程已经删除但是本地依旧显示远程已经删除的分支。
  7. git branch -r % 查看远程版本库的分支列表
  8. git branch -a % 查看所有的分支列表,包括本地分支和远程分支, remote/开头表示远程分支。
  9. git branch -v %查看一个分支的最后一次提交
  10. git branch --merged %查看哪些分支已经合并到当前分支
  11. git branch --no-merged % 查看所有未合并工作的分支
  12. git push origin --delete dev 或者 git push origin :dev % 删除远程分支dev
  13. git branch --track origin/test % 创建名为test的追踪分支,如果不指定追踪分支的名字,默认与远程仓库的分支名字一样。
  14. git branch -b name origin/test % 创建一个名为name的追踪分支,对应于远程仓库的test分支。
  15. git branch --set-upstream test origin/test % 把本地已经存在的test分支来追踪远程分支的test分支。
  16. git push --set-upstream origin dev % 本地创建了dev分支,但是远程没有这个分支,可以使用此命令

分支管理的基本思想

在创建分支的时候,其实就是创建了一个指针指向了分支,git本身存在一个head指针用于记录当前的工作区,head指针会指向当前工作区上最后一次commit的位置。 比如当使用git branch test创建了一个test分支时,会创建一个test指针,同时在master分支上还有一个master指针指向master分支上最后一次commit的位置C3,此时只是创建了test分支而已,并没有转入分支并提交作业,所以此时head指针已久在master分支的C3位置.

当创建了test分支并进行了一次作业C5的提交后,testmain指针将指向C5。而对于master分支上,由于没有新的作业提交,故master指针一直指向C3作业处。 如果想要将test 提交到master分支上,只需要master指针指向C5继续在master分支上操作即可。对于test分支,可以使用git branch -d test删除,这时候test分支将没有用了。

如果在创建test分支的同时也对master分支进行开发,这时候如果在想合并test分支将不再是简单的指针移动,因为对testmain分支都进行了开发,这时候git将新提交的C3C5以及两个分支共同的祖先C3进行合并,这时候会产生新的文件快照并采用新的commit对象C8记录,如果在合并的过程中产生了冲突,会让开发者解决冲突后再进行提交。 这时候headmaster指针都会指向C8, test指针将会指向C5.

分类:

后端

标签:

后端

作者介绍

E
EdwardWong
V1