Git

203 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

一、Git的工作机制

image.png

二、代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,简称远程库。

image.png

三、基本操作

  1. 初始化本地库git init
git init

image.png

初始化后会生成一个.git文件夹进行版本管理:

image.png

2.查看状态git status

git status

image.png

  1. 添加到暂存区git add
git add 文件名

image.png

  1. 删除暂存区的文件git rm --cached
git rm --cached 文件名

image.png 这里只删除了暂存区的文件,并没有删除工作区的文件。

5.将暂存区文件添加到本地库git commit

git commit -m 日志信息

image.png

  1. 查看提交记录git reflog
git reflog

image.png

7.查看详细记录 git log

git log

image.png

  1. 查看文件内容cat
cat 文件名

image.png

  1. 重置为历史版本 git restet
git reset --hard 旧版本id

image.png

四、分支

  1. 查看分支git branch -v
git branch -v

image.png

查看本地分支对应的远程分支:

git branch -va

image.png

  1. 创建分支git branch
git branch 分支名

image.png

根据远程分支创建本地分支:

git checkout -b 本地分支名 origin/远程分支名

例子:

git checkout -b dev origin/dev
  1. 切换分支
git checkout 分支名

image.png

  1. 合并分支
git merge 分支名

image.png

  1. 解决合并冲突 (1)切换到dev分支,修改1.txt内容,并提交: image.png

(2)切换到master分支,修改1.txt内容,并提交: image.png

(3)在master分支合并dev分支,出现合并失败: image.png

(4)打开1.txt文件,冲突代码出现了提示: image.png

(5)解决冲突: 将不要的内容删除即可:

image.png

查看文件状态:

image.png

将修改的文件保存到暂存区,并提交(注意提交时不写文件名),查看文件发现master分支中的1.txt即是我们要的效果:

image.png

注意:master分支中合并冲突后,dev分支是没有修改的,我们切换到dev分支查看下1.txt内容如下:

image.png

(6)切换分支的实质 切换分支的实质是head指针进行切换,下图中head指针指向master分支,则当前分支为master;当head指针指向hot-fix分支时,当前分支切换为hot-fix分支。

image.png

五、团队协作

  1. 团队内协作

image.png

  • push: 将本地库的代码推送到远程库
  • clone: 将远程库的代码复制到本地库
  • pull: 本地拉取远程库的代码
  1. 跨团队协作

image.png

B团队可以去fork A团队的远程库,形成自己的库,B团队修改后通过pull request提交,A团队进行审核后合并。

六、本地库与远程库的连接

  1. 创建远程仓库

GitHub上新建仓库: image.png

  1. 创建远程库别名 git remote
git remote add 别名 远程库地址

image.png

  1. 查看远程库别名git remote -v
git remote -v

4.本地库代码推送到远程库

git push 远程库名 分支名

image.png

  1. 从远程库拉取代码到本地
git pull 远程库名 分支名

image.png

  1. 从远程库克隆代码到本地 默认会做三件事:
  • 拉取代码
  • 创建本地仓库
  • 创建远程库别名为origin

image.png

查看远程库别名: image.png

七、获取某一次commit的内容(包含之前的commit)

git checkout <commitId>

八、获取某一次commit的内容(不包含之前的commit)

git cherry-pick <commitId> <commitId>

使用场景:

如果将某一次(或几次)commit合并到功能分支A分支上,与其他commit已经混合在一起,但是A分支并不需要这些commit,想将其删除掉,并将这几个commit放到新的分支B里。

使用:

  1. 切换到A分支,使用git log查看想删除的commit的id
  2. 将代码回滚到不想要的commit的前一个版本
git reset --hard 前一个版本id
  1. 切换到新的分支B,将删掉的commit放到B分支里
git cherry-pick <commitId> <commitId>