目录
冲突类型②-master-branch和dev-branch分支冲突
基本操作
一、准备工作
首先:到https://github.com下注册账号:1007424128@qq.com/密码
然后,到https://github.com/new创建仓库myRepository
二、安装github客户端
https://git-for-windows.github.io/
三、添加本地文件到远程服务器
①git clone https://github.com/shengqianfeng/myRepository.git
②cd myRepository
③将需要托管的代码和文件(如:test目录)放进myRepository
④git add . //将当前文件目录(myRepository)内的全部内容添加进版本管理器
⑤git commit -m "本次提交的说明信息" //提交到本地的版本控制库里
⑥git push -u origin master //将你本地的仓库提交到你的github账号里,此时会要求你输入你的github的账号和密码
origin:这个origin其实是远程git'仓库url地址的别名
⑦查看浏览器:https://github.com/shengqianfeng/myRepository 发现 test目录已经在上边了。
四、删除本地和远程文件
① git rm text.txt
② git commit -m "delete txt"
③ git push
图解:
查看分支&更新文件
# 查看当前分支
git branch
最下面列出了本次更新的的变化:3 files changed, 27 insertions(+), 2 deletions(-)
创建新分支&提交远端
在github上可以看到myRepository.git仓库下多了新分支:commandBranch。
在原有分支基础上创建分支
git checkout -b new_branch
git push --set-upstream origin new_branch
合并分支
刚才已经创建了一个commandBranch分支,现在我们要做的就是合并新分支到master分支。
# (当前是commandBranch分支)查看分支提交历史,只有2017年的一个提交记录
$ git log
commit 27de6c68d7c0c15f9df410ae7ff48a1f97fb2c72 (HEAD -> commandBranch, origin/master, origin/commandBranch, origin/HEAD, master)
Author: shengqianfeng <1007424128@qq.com>
Date: Tue Aug 15 10:42:15 2017 +0800
changes log
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)
# 在新分支目录下创建一个command.md文件
$ touch command.md
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)
# 写入一段文字
$ echo "welcome to my git" > command.md
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)
# 尝试提交到远程,不过没有添加到本地的话push无效,此时远端并没有command.md
$ git push
Username for 'https://github.com': 1007424128@qq.com
Everything up-to-date
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)
$ ls -al
total 5
drwxr-xr-x 1 Administrator 197121 0 九月 23 08:15 ./
drwxr-xr-x 1 Administrator 197121 0 九月 23 08:00 ../
drwxr-xr-x 1 Administrator 197121 0 九月 23 08:04 .git/
-rw-r--r-- 1 Administrator 197121 18 九月 23 08:15 command.md
drwxr-xr-x 1 Administrator 197121 0 九月 23 08:00 test/
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)
# 先添加到git本地管理
$ git add command.md
warning: LF will be replaced by CRLF in command.md.
The file will have its original line endings in your working directory
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)
#commit到本地仓库中
$ git commit -m "create file command.md"
[commandBranch a54058f] create file command.md
1 file changed, 1 insertion(+)
create mode 100644 command.md
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)
# 现在可以push到远端commandBranch分支目录下了,github上可以看到已经有了
$ git push
Username for 'https://github.com': 1007424128@qq.com
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 293 bytes | 293.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/shengqianfeng/myRepository.git
27de6c6..a54058f commandBranch -> commandBranch
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)
# 查看git提交历史,看到除了2017年的一个,2020年9月23日也就是现在也有一个文件创建
$ git log
commit a54058fc711d6244c4d1e185349d631b77c2f15a (HEAD -> commandBranch, origin/commandBranch)
Author: 1007424128@qq.com <answer369>
Date: Wed Sep 23 08:18:31 2020 +0800
create file command.md
commit 27de6c68d7c0c15f9df410ae7ff48a1f97fb2c72 (origin/master, origin/HEAD, master)
Author: shengqianfeng <1007424128@qq.com>
Date: Tue Aug 15 10:42:15 2017 +0800
changes log
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)
合并dev分支到master分支
这里要做的就是切换到master分支,将commandBranch新建的那个command.md文件合并到master分支上来。
# 切换到master分支
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (master)
# 列出所有分支,看到当前分支是master
$ git branch -a
commandBranch
* master
remotes/origin/HEAD -> origin/master
remotes/origin/commandBranch
remotes/origin/master
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (master)
# 一开始没有command.md文件
$ ls -al
total 4
drwxr-xr-x 1 Administrator 197121 0 九月 23 08:20 ./
drwxr-xr-x 1 Administrator 197121 0 九月 23 08:00 ../
drwxr-xr-x 1 Administrator 197121 0 九月 23 08:20 .git/
drwxr-xr-x 1 Administrator 197121 0 九月 23 08:00 test/
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (master)
# 使用【git merge 分支名】合并commandBranch分支文件到当前分支(master)上来,看到1 insertion(+)
$ git merge commandBranch
Updating 27de6c6..a54058f
Fast-forward
command.md | 1 +
1 file changed, 1 insertion(+)
create mode 100644 command.md
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (master)
# 现在目录下有了command.md,成功合并下来了,接下来就是提交到远程master仓库了
$ ls -al
total 5
drwxr-xr-x 1 Administrator 197121 0 九月 23 08:22 ./
drwxr-xr-x 1 Administrator 197121 0 九月 23 08:00 ../
drwxr-xr-x 1 Administrator 197121 0 九月 23 08:22 .git/
-rw-r--r-- 1 Administrator 197121 19 九月 23 08:22 command.md
drwxr-xr-x 1 Administrator 197121 0 九月 23 08:00 test/
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (master)
$ git add command.md
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (master)
$ git push
Username for 'https://github.com': 1007424128@qq.com
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/shengqianfeng/myRepository.git
27de6c6..a54058f master -> master
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (master)
# 查看历史可以看到master分支和commandBranch分支都已经有了相同的提交历史记录
$ git log
commit a54058fc711d6244c4d1e185349d631b77c2f15a (HEAD -> master, origin/master, origin/commandBranch, origin/HEAD, commandBranch)
Author: 1007424128@qq.com <answer369>
Date: Wed Sep 23 08:18:31 2020 +0800
create file command.md
commit 27de6c68d7c0c15f9df410ae7ff48a1f97fb2c72
Author: shengqianfeng <1007424128@qq.com>
Date: Tue Aug 15 10:42:15 2017 +0800
changes log
Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (master)
$
同步master分支代码到开发分支
经常有这种场景:从master'拉取dev分支,dev分支进行开发任务一段时间之后,master分支可能已经有了新的代码push到上面。此时如果dev想同步master的最新更改,可以采取如下方式:
# 当前分支为dev分支,执行一下操作
$ git pull origin master
$ git push
不慎提交大文件该如何接续提交?
此前不小心在工作区,也就是我的pycharm提交了两个训练深度学习模型保存的大文件,结果导致后来提交到github一直失败,说是超过了github的文件大小限制。
本以为在pycharm直接删除这俩文件继续提交就好了,没想到一直都是如上失败提示,最后通过以下办法解决了问题。
①使用git log命令查看历史提交记录并找到当时提交大文件的那次记录,找到版本库id
②使用git reset命令撤回提交
git reset --mixed d1f2e56d6eb4cb7e791d0658ef253609ac04de8c
③删除这俩文件
git rm --cache /d/PycharmProjects/pystudy/deep_learning/hands_book/conv_tensorflow/5.6_alexnet_weights.h5
git rm --cache /d/PycharmProjects/pystudy/deep_learning/hands_book/conv_tensorflow//5.7_vgg_weights.h5
本地更新merge override问题
解决pull远程代码的时候,本地修改造成的merge override问题!
pull的时候出现了如下提示:
➜ jeff-admin-release git:(release.1.0.2) ✗ git pull
remote: Enumerating objects: 34, done.
remote: Counting objects: 100% (34/34), done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 34 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (34/34), done.
From https://gitlab.xxx.cn/group-arch/jeff-admin
0d8ce53..0e55950 release.1.0.2 -> origin/release.1.0.2
Updating 0d8ce53..0e55950
error: Your local changes to the following files would be overwritten by merge:
admin-service/src/main/java/cn/xxx/admin/model/OpenItemStatusModel.java
admin-web/pom.xml
Please commit your changes or stash them before you merge.
Aborting
既然本地有修改,又不想被覆盖,那就先把本地的暂存起来再更新吧!
➜ jeff-admin-release git:(release.1.0.2) ✗ git show
➜ jeff-admin-release git:(release.1.0.2) ✗ git stash
Saved working directory and index state WIP on release.1.0.2: 0d8ce53 fix circuitBreaker event schedule
➜ jeff-admin-release git:(release.1.0.2) git pull
Updating 0d8ce53..0e55950
Fast-forward
admin-service/src/main/java/cn/xxx/admin/common/{CircuitbreakerStatusEnum.java => CircuitBreakerActionEnum.java} | 8 ++---
admin-service/src/main/java/cn/xxx/admin/common/CircuitBreakerStatusEnum.java | 29 ++++++++++++++++++
admin-service/src/main/java/cn/xxx/admin/model/OpenItemStatusModel.java | 4 +--
admin-service/src/main/java/cn/xxx/admin/service/impl/BreakerStatusService.java | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
admin-service/src/main/java/cn/xxx/admin/service/impl/EventServiceImpl.java | 29 ++++++++++--------
admin-web/pom.xml | 1 +
admin-web/src/main/java/cn/xxx/admin/payload/circuitbreaker/StatusBatchGetRequest.java | 37 +++++++++++++++++++++++
admin-web/src/main/java/cn/xxx/admin/web/controller/AdminCircuitBreakerController.java | 31 ++++++++++++++++++--
admin-web/src/main/resources/application.properties | 2 +-
9 files changed, 214 insertions(+), 42 deletions(-)
rename admin-service/src/main/java/cn/xxx/admin/common/{CircuitbreakerStatusEnum.java => CircuitBreakerActionEnum.java} (79%)
create mode 100644 admin-service/src/main/java/cn/xxx/admin/common/CircuitBreakerStatusEnum.java
create mode 100644 admin-web/src/main/java/cn/xxx/admin/payload/circuitbreaker/StatusBatchGetRequest.java
➜ jeff-admin-release git:(release.1.0.2)
然后,将暂存区的本地暂存文件pop出来即可。
➜ jeff-admin-release git:(release.1.0.2) git stash pop
Auto-merging admin-web/pom.xml
Auto-merging admin-service/src/main/java/cn/xxx/admin/task/RemoveUselessFrameSchedule.java
Auto-merging admin-service/src/main/java/cn/xxx/admin/model/OpenItemStatusModel.java
On branch release.1.0.2
Your branch is up to date with 'origin/release.1.0.2'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: admin-service/src/main/java/cn/xxx/admin/task/RemoveUselessFrameSchedule.java
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: admin-domain/src/main/java/cn/xxx/admin/entity/BatchStatusRequest.java
modified: admin-domain/src/main/java/cn/xxx/admin/entity/EventEntity.java
modified: admin-domain/src/main/java/cn/xxx/admin/entity/EventFrame.java
modified: admin-domain/src/main/java/cn/xxx/admin/entity/EventFrameSaveRequest.java
modified: admin-domain/src/main/java/cn/xxx/admin/entity/EventQueryRequest.java
modified: admin-domain/src/main/java/cn/xxx/admin/entity/EventQueryRespond.java modified: admin-domain/src/main/java/cn/xxx/admin/entity/EventSaveRequest.java
modified: admin-service/pom.xml
modified: admin-service/src/main/java/cn/xxx/admin/common/OperateTypeConstants.java
modified: admin-service/src/main/java/cn/xxx/admin/model/OpenItemStatusModel.java
modified: admin-service/src/main/java/cn/xxx/admin/service/impl/AdminServiceImpl.java
deleted: admin-service/src/main/java/cn/xxx/admin/task/RemoveUselessFrame.java
modified: admin-web/pom.xml
modified: admin-web/src/main/java/cn/xxx/admin/config/ApolloConfig.java
Dropped refs/stash@{0} (e5d753e8674f1323121a3d26eda2d1ee2f0bade6)
➜ jeff-admin-release git:(release.1.0.2) ✗
总结下来,就是三部曲:
git stash
git pull origin master
git stash pop
搞完就可以commit&push了!!!
但如果本地的不想要了,直接就用remote的,那使用以下命令:
git reset --hard
git pull
解决冲突
冲突类型①:更新冲突
当本地文件与远程文件在某行不一致时,利用git pull更新远程文件就会发生冲突。比如:
➜ my-csdn git:(master) ✗ git pull
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://codechina.csdn.net/shengqianfeng/my-csdn
9b06705..ef61e48 master -> origin/master
Updating 9b06705..ef61e48
error: Your local changes to the following files would be overwritten by merge:
README.md
Please commit your changes or stash them before you merge.
Aborting
由于本地文件README.md修改后并未提交,也没有暂存。所以git pull就会提示先提交本地文件或者放进暂存区。
于是我stash暂存一下,然后再pull,最后pop一下暂存区:
➜ my-csdn git:(master) ✗ git stash
Saved working directory and index state WIP on master: 9b06705 mmodify readme
➜ my-csdn git:(master) git pull
Updating 9b06705..ef61e48
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
➜ my-csdn git:(master) git stash pop
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
提示我README.md文件存在冲突,帮我自动合并了冲突。其实并没有真的合并,需要我们自己vim进去合并,你想git怎么知道究竟怎么取舍冲突的代码呢?只有靠我们自己。
经过一通编辑之后,README.md被我解决了冲突,于是我想提交上去。当执行commit时还是失败了,提示冲突未解决。
➜ my-csdn git:(master) ✗ git commit -m "mmodify readme"
U README.md
error: Committing is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
这是因为我们的提交步骤不对,真正的提交步骤是先add,再commit,然后push。搞定!
➜ my-csdn git:(master) ✗ git add README.md
➜ my-csdn git:(master) ✗ git commit -m "解决冲突"
[master 4a94297] 解决冲突
1 file changed, 2 insertions(+), 1 deletion(-)
➜ my-csdn git:(master) git push
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 310 bytes | 310.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://codechina.csdn.net/shengqianfeng/my-csdn.git
ef61e48..4a94297 master -> master
冲突类型②-master-branch和dev-branch分支冲突
解决主分支master-branch与当前开发分支dev-branch的冲突:
- 回到主分支master-branch:
git pull
- 切回开发分支dev-branch:
git rebase 主分支名
git push --force
压缩提交记录
有的时候我们会频繁的编辑同一个文件,然后频繁的提交到仓库。这时候git的提交日志记录里就会存在很多条同一个修改点的提交记录,看起来不怎么优雅。此时我们就像能否压缩多次相同修改点的提交记录到一次提交呢?
答案是肯定的。比如:
这里我对我的README.md文件频繁的修改并提交,查看一下git lg记录。于是我想把【e8af689, 6898ff7, 2ed6854】这三个相同的修改压缩一下。
步骤如下:
先执行reset(注意这里一定是soft),然后用git lg查看效果:
git reset 4a94297 --soft
可以看到reset命令把记录给压缩了。但此时我们git pull呢?那就会跟remote对齐,也就是将压缩给回滚,历史记录就会复原。
这不是我们想要的结果,所以reset之后,你就不要git pull了。
还是回到reset之后的状态,可以使用git status去看下本地仓库状态。提示我们的当前压缩后的branch落后于远程仓库三次commits。可以通过git push对齐远程仓库。
这里我就直接提交了,但还是失败了,如图:
提示我们本地分支是落后于远程仓库的。但是我们就是想让应提交的commits压缩掉!怎么办?强制push。搞定!
➜ my-csdn git:(master) git push --force
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 291 bytes | 291.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To https://codechina.csdn.net/shengqianfeng/my-csdn.git
+ e8af689...fa4b40e master -> master (forced update)