1 Git教程:https://gitee.com/progit/

2 配置信息

1.直接看配置文件

  • /etc/gitconfig(windows路径为安装目录/etc),使用git config --system时读写的就是这个文件。
  • ~/.gitconfig (windows路径一样),使用git config --global时读写的就是这个文件。

2.检查已有的配置信息:git config --list

3.检查某个环境变量的设定:git config user.name

3 远程仓库

1 查看当前配置的远程仓库

  • git remote:列出每个远程仓库的简短名字,单个远程仓库一般默认名为origin。
  • git remote -v:显示所有远程仓库对应的克隆地址。

(-v -verbose 冗长的,啰嗦的)

2 从远程仓库抓取数据

  • git clone 【https://...】:克隆
  • git fetch 【remote-name】:从远程仓库中拉取本地仓库没有的数据,运行完成后可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支。(git fetch origin)
  • git pull:如果设置了某个分支用于跟踪某个远程仓库的分支,可以使用该命令自动抓取数据,然后将远程分支自动合并到本地仓库的当前分支。
  • git push 【remote-name】【branch-name】:将本地仓库的数据推送到远程仓库。(git push origin master


常用命令

  • git status:查看当前处于什么分支。


  • git checkout 【branchName】:切换到分支【branchName】。


  • git branch:查看当前项目所有的本地分支。


  • git branch 【branchName】:创建新分支【branchName】。


  • git branch -d 【branchName】:删除一个不包含未合并工作的分支。

  • git branch -D 【branchName】:强制删除一个分支。


  • git checkout -b 【branchName】:创建新分支【branchName】并切换到该分支。


  • git fecth:将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。


  • git merge 【branchName】:将本地分支【branchName】的内容合并到当前所在本地分支


  • git merge origin/【branchName】:将远程仓库中分支【branchName】的内容合并到当前分支对应的远程仓库分支。


  • git add .:将所有修改内容添加到暂存区。


  • git commit -m 【message】:将暂存区内容提交到本地仓库,并附带提交信息【message】。

git reset

状态

Untracke**d:未跟踪,此文件在文件夹中,但并没有加入到git库, 不参与版本控制。 通过git add 状态变为Staged。
Unmodif**y:文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致。 这种类型的文件有两种去处, 如果它被修改, 而变为Modified。 如果使用git rm移出版本库, 则成为Untracked文件。
Modified:**文件已修改, 仅仅是修改, 并没有进行其他的操作。 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过,返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改。
Staged:**暂存状态。 执行git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify状态。 执行git reset HEAD filename取消暂存,文件状态为Modified。
![image.png](https://cdn.nlark.com/yuque/0/2021/png/1648534/1612147378433-b54d8acd-0145-4b46-aaa9-08c1ab77e165.png#align=left&display=inline&height=503&margin=%5Bobject%20Object%5D&name=image.png&originHeight=503&originWidth=723&size=435726&status=done&style=none&width=723)

★案例:更新远程permission仓库

需求

现在共有四条分支:
【branch origin/master】
【branch origin/permission】
【branch master】
【branch permission】
需要将 origin/master的内容先拉取到master,
然后将本地master合并到本地permission,
再将本地permission内容推到origin/permission。

0 首先备份所有后端代码

1 从 origin/master 拉取到 本地master:

  • 【branch permission】:git add .
  • 【branch permission】:git commit -m未合并master
  • 【branch permission】:git checkout master
  • 【branch master】:git status

On branch master. Your branch is ahead of ‘origin/master’ by 1 commit. (use “git push” to publish your local commits)

  • 【branch master】:git pull
  • 【branch master】:git status

On branch master. Your branch is ahead of ‘origin/master’ by 2 commit. (use “git push” to …)

  • 【branch master】:git checkout permission


2 将本地master merge 本地permission:

  • 【branch permission】:git status

On branch permission. Your branch is ahead of ‘origin/permission’ by 3 commit. (use “git push” to …)

  • 断开VPN,确保不会误操作污染远程分支
  • 【branch permission】:git merge master

3 将本地permission 推到 origin/permission:

  • 【branch permission】:git status

On branch permission. Your branch is ahead of ‘origin/permission’ by 3 commit. (use “git push” to …)
You have unmerged paths.
(fix conflicts and run “git commit”)
(use “git merge —abort” to abort the merge)

  • 【branch permission】:处理冲突(<<<>>>master)

fe部分保留master的改动,后端部分保留permission的改动

  • 【branch permission】:git add .
  • 【branch permission】:git commit -m合并了master分支
  • 【branch permission】:git status

On branch permission. Your branch is ahead of ‘origin/permission’ by 15 commit. (use “git push” to …)

  • 连接VPN,准备push
  • 【branch permission】:git push

    4 校核

  • 比较本地master本地permission

发现本地master分支和本地permission分支的部分文件存在明显的差异,但第二步merge过程并没有标记或覆盖这些差异。下图为本地master merge 到本地permission后本地master分支(左)和本地permission分支(右)的对比:
image.png image.png

image.png image.png
image.png image.png
修改后:
modified: bigdata-web-base-fe/package.json
modified: bigdata-web-base-fe/src/store/UserService.ts
modified: bigdata-web-base-fe/webpack.config.js

  • 【branch permission】:git add .
  • 【branch permission】:git commit -m修改了master没能把变化merge到pemission的三个文件

3 files changed, 5 insertions(+), 8 deletions(-)

  • 【brach permission】:git push
  • 【branch origin/permission】:检查远程permission分支,三个文件被修正

本地分支push到远程分支时有冲突的内容直接本地覆盖远程而不是产生conflict
image.png

PS:应该在第2步和第3步之间进行校核