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】。
状态
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 …)
发现本地master分支和本地permission分支的部分文件存在明显的差异,但第二步merge过程并没有标记或覆盖这些差异。下图为本地master merge 到本地permission后本地master分支(左)和本地permission分支(右)的对比:
修改后:
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