Git 不同于 SVN 的地方在于, Git 是分布式的版本管理系统, 所有的客户端和服务器都保存了一份代码, 涉及到仓库仓之间的同步, 所以处理不当极易造成冲突
最直接的方法就是不让新手合并代码
但是这样每次都要等管理员审核, 不适合敏捷开发的一般团队, 所以 Git 的学习和使用是必不可少的



git stash 可以将 工作区和暂存区修改的文件 移动到贮藏区, 通常在本地存在不想提交的临时文件的时候 pull 之前使用git stash pop 可以将贮藏区的文件恢复到 工作区和暂存区, 通常在提交之后使用
下面只是介绍下常见的开发命令, 其他命令可以参考 Git官方文档: https://git-scm.com/docs
# 添加到暂存区
git add a.txt
# commit 本地仓库
git commit -m "新增 a.txt"
# 同步远程仓库
git pull origin master:master
# 推送到远程仓库
git push origin master:maser
提交到自己的远程分支, 然后提交 MR 合并到 master 分支
# 新建个人开发分支 dev_d
git branch dev_d
# 切换到个人开发分支 dev_d
git checkout dev_d
# 修改代码
# 添加到暂存区
git add a.txt
# commit 本地仓库
git commit -m "新增 a.txt"
# 同步远程仓库 master 副本并 merge 到 dev_d 分支
git pull origin master:master
# 推送本地 dev_d 分支到远程 dev_d 分支
git push origin dev_d:dev_d
在 GitLab 等平台创建 PR 合并 dev_d 到 master 分支, 然后让管理员审核

# 将不想提交的代码 stash 到贮藏区
git stash save "临时配置文件a.yaml"
# 同步远程仓库 master 副本并 merge 到 dev_d 分支
git pull origin master:master
# 推送到远程仓库
git push origin master:maser
# 将暂时贮藏的文件恢复
git stash pop
Git 有 2 种情况会发生代码冲突
下面展示一下代码冲突的过程
$ git push
To github.com:dengjiawen8955/git-demo.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:dengjiawen8955/git-demo.git'
$ git pull
Auto-merging 0928_2/a.txt
CONFLICT (content): Merge conflict in 0928_2/a.txt
Automatic merge failed; fix conflicts and then commit the result.
# 查看冲突文件
$ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add ..." to mark resolution)
both modified: a.txt
no changes added to commit (use "git add" and/or "git commit -a")
# 处理冲突 (注意, 代码覆盖事故就是在这里发生, 冲突处理覆盖了李四的代码)
$ vim a.txt
# 将处理完的文件添加到暂存区
$ git add a.txt
# 提交到本地仓库
$ git commit -m "处理冲突"
# 推送到远程
$ git push
如果本来 李四提交的代码 2 和 张三提交的代码 3 都应该保留的, 张三却没有保留李四的代码, 那么就会发生代码覆盖事故
正确的结果
2
3
张三合并后的结果
3
原理是类似的, 这里不做赘述了
了解 Git 的工作原理和基本命令, 知其然知其所以然, 就能减少失误
及时提交代码, 更新代码, 避免因为长时间没有同步代码产生过多的冲突文件, 因为在解决冲突的时候初级人员是非常容易出错的
熟悉 Git 工具, 比如命令行或 GitTortoise, 避免因为工具不熟悉导致失误
本地修改前应该尽可能的避免本地库与远程之间有过多的差异, 本地修改前执行一次 git pull 先把远程更新拉到本地
pull 之前如果有没有提交的文件, 先 stash
git stash
git pull
git stash pop
如果有冲突解决冲突
如果事故已经发生了, 首先应该查看日志分析原因, 找到出问题的节点撤销操作, 回滚代码
使用命令行或者你熟悉的工具查看分支历史
命令行
#log --graph 结合使用时尤其有用,这个选项添加了一些ASCII字符串来形象地展示你的分支、合并历史
$ git log --pretty=format:"%h %s" --graph
* f3b92cb 解决冲突
|\
| * 3543686 a.txt第一行修改为3
* | 251b3cb a.txt第一行修改为2
|/
* 6a432b2 a.txt第一行新增1
# 使用 git diff 查看修改历史 (找出出问题的节点)
$ git diff f3b92cb 3543686
使用其他工具可以更加方便的可视化查看, 这里不赘述了
参考: https://blog.csdn.net/jarvan5/article/details/114028765
如果今天的内容你只能记住一件事, 那请记住: 熟悉 Git 工具, 比如命令行或 IDE, 避免因为工具不熟悉导致失误