版本管理器-git

197 阅读10分钟

前言

git下载:git-scm.com/

如下载缓慢可点击这里国内git镜像网站

安装直接next

Git Bush:Unix与Linux风格的的命令行,推荐使用

Git CMD:windows风格的命令行

Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

基本的Linux命令目录

  1. cd:改变目录
  2. cd..:回退到上个目录,直接cd进入默认目录
  3. pwd:显示当前所在的目录路径
  4. ls(ll):都是列出当前目录中所有文件,只不过(ll)列出的内容更详细
  5. touch:新建一个文件如touch index.js就会在当前目录下兴建一个index.js文件
  6. rm:删除一个文件,rm index.js 救会把index.js文件删除
  7. mkdir:新建一个目录(文件夹)
  8. rm -r:删除一个文件夹,rm -r src 删除src目录(切勿使用rm -rf / 会把电脑中的全部文件删除)
  9. mv:移动文件,mv index.html src index.html 是我们要移动的文件,src是目标文件夹
  10. reset:清屏
  11. clear:清屏
  12. history:查看命令历史
  13. exit:退出
  14. #;表示注释

使用git上传代码:

  1. 配置全局git config
git config --global user.name "...." # 名字
git config --global user.email ... # 邮箱

git基本理论(核心)

工作区

Git本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)、git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下:

image.png

Workspace: 工作区,就是你平时存放项目代码的地方

Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

项目的.git文件:默认为隐藏,需要手动打开

image.png

内部目录结构如下图:

image.png

image.png

image.png

image.png

# 查看指定文件状态
git status [filename]
#查看所有文件状态
git status

git init: git初始化项目

git add . :提交所有文件到暂存区
git commit -m "提交信息":提交暂存区中的内容到本地仓库

忽略文件

.gitignore文件用来忽略被指定的文件或文件夹的改动,被记录在.gitignore文件里的文件或文件夹,是无法被git跟踪到的,换句话说,被忽略的文件是不会被放入到远程仓库里的。

  如果文件已经存在于远程仓库中,是无法通过.gitignore文件来忽略的。

.gitignore文件存放于git仓库的根目录下。

当你使用git add .的时候有没有遇到把你不想提交的文件也添加到了缓存中去?比如项目的本地配置信息,如果你上传到Git中去其他人pull下来的时候就会和他本地的配置有冲突,所以这样的个性化配置文件我们一般不把它推送到git服务器中,但是又为了偷懒每次添加缓存的时候都想用git add .而不是手动一个一个文件添加,该怎么办呢?

很简单,git为我们提供了一个.gitignore文件只要在这个文件中申明那些文件你不希望添加到git中去,这样当你使用git add .的时候这些文件就会被自动忽略掉。

image.png

使用码云

  1. 注册登录码云,完善个人信息
  2. 设置本机绑定SSH公钥,实现免密码登录
# 进入c:\users\administrator\.ssh
# 生成公钥
SSH-keygen 
  1. 将公钥信息public key 添加到码云账户中即可
  2. 使用码云创建一个自己的仓库

操作

初始化一个git项目

  1. git init 初始化
  2. git branch master 创建本地分支
  3. git remote add origin + 远程仓库地址
  4. git pull origin + 分支名

提交代码

# 本地的数据暂存
git add .
#
git commit -m '描述信息'
#
git push origin branchName

从本地到远程仓库

1. 输入 git clone '远程地址'
2. 输入 git add . 这一步是将本地的数据暂存
3. 输入 git commit -m “描述信息”
4. 输入第一步注册的邮箱 git config --global user.email “你的邮箱”
5. 输入第一步注册的用户名 git config --global user.name “你的名字”
6. 最后输入git push 就可以把本地的文件发送到远程仓库里

远程无分支,本地有分支,本地push到远程

# 执行命令:创建远程分支,并把本地分支push到该原程分支
git push --set-upstream origin '远程分支名'

多人协同开发

创建本地(多)分支

# 新建一个本地分支
git branch 分支名

# 切换到其他分支(已有分支)
git switch [branch]

# 新建一个分支,并切换到该分支
git checkout -b [branch]

# 合并指定分支到当前分支
git merge [branch]

# 查看当前所处分支
git status

#查看所有本地分支
git branch

# 删除本地分支
git branch -d [branch-name]

# 删除远程分支
git push origin --delete-name [branch-name]
git branch -dr [remote/branch]

注意:如果同一个文件在合并时都被修改了则会引起冲突:解决办法就是修改冲突文件后重新提交 master主分支应该非常稳定,用来发布新版本,工作是一般新建一个分支工作,工作完后,要发布了,或者说该分支稳定了后可以合并到主分支master上。

建立本地分支与远程分支的映射关系

建立本地分支与远程分支的映射关系(或者为跟踪关系track),这样使用git pull或者git push时就不必每次都要指定从远程的哪个分支拉取合并和推送到远程的哪个分支了。

# 查看本地分支和远程分支映射关系
git branch -vv

# 建立当前本地分支和远程分支映射关系
# 1.
git branch -u origin/分支名
# 2.
git branch --set-upstream-to origin/分支名

#

拉取远程分支

  1. 第一种方法:使用 git fetch(不用先在本地创建分支)
1.  把远程分支拉到本地
1.  git fetch origin dev(dev为远程仓库的分支名)
1.
1.  //第一次拉分支最好不要用origin , 而是直接用仓库地址
1.  //此命令会自动为你创建并拉取远程分支
1.
1.
1.  例子:
1.  git fetch xxx(地址) dev
  1. 第二种方法:使用git pull(要在本地先创建相应的分支然后再拉取),以下方法二选一
1.在本地创建分支dev并切换到该分支
git checkout -b dev(本地分支名称) origin/dev(远程分支名称)

2.1.    
    把某个分支上的内容都拉取到本地
1.
1.  git pull origin dev(远程分支名称)
1.
1.  例如:
1.  git checkout -b xtx
1.  git pull xxx(地址) xtx

提交本地代码

// 1.添加目录
git add ./
// 2.
git commit -m '提交的信息'
// 3.
git push origin 远程分支名

在本地合并远程分支

# 先在本地创建另一个分支,并拉取你要合并的远程分支到本地
git checkout [branch1]
git pull origin [origin branch]
# 切换本地分支
git switch [branch2]
# 合并分支branch,branch2(此时在branch1分支)
git merge 分支名


# 撤销合并
git merge -–abort

分支保护管理

Git 新增分支保护功能!

分支保护功能是为了防止相关成员 Push 代码到重要的分支(例如 master 分支),便于项目的分支管理。

Git 的分支除了之前的常规分支外,新增两种不同的权限:

  • 常规分支:项目成员(开发者权限及以上)可Push分支
  • 保护分支:项目管理员才能管理(Push)被保护的分支。
  • 只读分支:任何人都无法Push代码(包括管理员和所有者),需要Push代码时应设为“常规”或“保护”分支。

只有项目管理员可以管理保护分支,进入项目管理,点击分支保护即可设置各个分支的权限,如下图:

image.png

删除分支

# 删除本地分支       注意:删除该本地分支时,当前不能处于该分支,不然删除不了
# 1.会在删除前检查merge状态(其与上游分支或者与head)。
git branch -d [branch_name] 
# 2.是git branch --delete --force的简写,它会直接删除。
git branch -D [branch_name] 

# 删除远程分支
git push origin --delete [branch_name]

回溯git版本

合并分支后回退

// 1.回退合并的分支
# 查看最后一次提交的  commit_id
git rev-parse HEAD

# 查看该分支所有commit_id
git log --oneline

# 执行回退
git reset --hard commit_id

// 2
# 取消分支合并
git merge --abort

提交代码到master交错了,恢复原来版本

master -> orgin: dev (具体命令我是不会写了)

回滚本地master代码

git log 查看commit 版本号 或者 git reset --hard 版本号(如:d00a787)

git reset --hard 'master没乱之前的版本号,即最后一次的commit_id'

强制回滚远程分支

git push -f origin master 强制推送当前分支到远程master

重新拉一份项目

经过上边的一些操作,开发工具分支可能有混乱的可能,所以推荐重新拉一份代码

git clone 'git的url'

开发中遇到的问题

提交代码时的问题

  1. everything up-to-date
  • 明明已经更改了本地代码,但是git push的时候一直提示everything up-to-date,创建了新分支,依然push了origin master的版本。
  • 解决 :
git branch newbranchName 
然后输入这条命令检查是否创建成功 

git branch  
这时终端输出  

  newbranchName  
* master  
这样就创建成功了,前面的*代表的是当前你所在的工作分支。我们接下来就要切换工作分支。  
  
git checkout newbranchName 
这样就切换完了,可以 git branch 确认下。然后你要将你的改动提交到新的分支上。  
  
  
git add .  
git commit -a  
此时可以 git status 检查下提交情况。如果提交成功,我们接下来就要回主分支了,代码和之前一样。  
  
git checkout master  
然后我们要将新分支提交的改动合并到主分支上  
  
git merge newbranchName 
合并分支可能产生冲突这是正常的,虽然我们这是新建的分支不会产生冲突,但还是在这里记录下。下面的代码可以查看产生冲突的文件,然后做对应的修改再提交一次就可以了。  
  
 git diff  
我们的问题就解决了,接下来就可以push代码了。  
  
git push -u origin master  
新建分支的朋友别忘了删除这个分支  
  
git branch -D newbranchName

注:如何删除分支请看这里

  1. 本地分支push到不同远程分支当中
git push -u origin 远程分支名

注:git 本地分支跟远程分支一定要同名才能 push 吗?

  1. 同一本地分支跟踪多个同一远程仓库的不同分支

注:git一个本地分支同时向多个远程分支提交代码

报错

  1. fatal: the requested upstream branch 'origin/12.23' does not exist
// 本地仓库有文件,远程仓库也有文件,正确姿势:
1、git remote add origin 远程仓库地址

2、git pull origin master --allow-unrelated-histories

3、git branch --set-upstream-to=origin/master master

4、git push

未完待续~~