git操作系列教程
发布日期:2021-06-30 13:44:14 浏览次数:2 分类:技术文章

本文共 14175 字,大约阅读时间需要 47 分钟。

目录




基本操作

一、准备工作

首先:到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 logcommit 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 logAdministrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)# 在新分支目录下创建一个command.md文件$ touch command.mdAdministrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)# 写入一段文字$ echo "welcome to my git" > command.mdAdministrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)# 尝试提交到远程,不过没有添加到本地的话push无效,此时远端并没有command.md$ git pushUsername for 'https://github.com': 1007424128@qq.comEverything up-to-dateAdministrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)$ ls -altotal 5drwxr-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.mddrwxr-xr-x 1 Administrator 197121  0 九月   23 08:00 test/Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)# 先添加到git本地管理$ git add command.mdwarning: LF will be replaced by CRLF in command.md.The file will have its original line endings in your working directoryAdministrator@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.mdAdministrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)# 现在可以push到远端commandBranch分支目录下了,github上可以看到已经有了$ git pushUsername for 'https://github.com': 1007424128@qq.comEnumerating objects: 4, done.Counting objects: 100% (4/4), done.Delta compression using up to 4 threadsCompressing 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 -> commandBranchAdministrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)# 查看git提交历史,看到除了2017年的一个,2020年9月23日也就是现在也有一个文件创建$ git logcommit a54058fc711d6244c4d1e185349d631b77c2f15a (HEAD -> commandBranch, origin/commandBranch)Author: 1007424128@qq.com 
Date: Wed Sep 23 08:18:31 2020 +0800 create file command.mdcommit 27de6c68d7c0c15f9df410ae7ff48a1f97fb2c72 (origin/master, origin/HEAD, master)Author: shengqianfeng <1007424128@qq.com>Date: Tue Aug 15 10:42:15 2017 +0800 changes logAdministrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (commandBranch)

合并文件

这里要做的就是切换到master分支,将commandBranch新建的那个command.md文件合并到master分支上来。

# 切换到master分支$ git checkout masterSwitched 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/masterAdministrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (master)# 一开始没有command.md文件$ ls -altotal 4drwxr-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 commandBranchUpdating 27de6c6..a54058fFast-forward command.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 command.mdAdministrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (master)# 现在目录下有了command.md,成功合并下来了,接下来就是提交到远程master仓库了$ ls -altotal 5drwxr-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.mddrwxr-xr-x 1 Administrator 197121  0 九月   23 08:00 test/Administrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (master)$ git add command.mdAdministrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (master)$ git pushUsername for 'https://github.com': 1007424128@qq.comTotal 0 (delta 0), reused 0 (delta 0)To https://github.com/shengqianfeng/myRepository.git   27de6c6..a54058f  master -> masterAdministrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (master)# 查看历史可以看到master分支和commandBranch分支都已经有了相同的提交历史记录$ git logcommit a54058fc711d6244c4d1e185349d631b77c2f15a (HEAD -> master, origin/master, origin/commandBranch, origin/HEAD, commandBranch)Author: 1007424128@qq.com 
Date: Wed Sep 23 08:18:31 2020 +0800 create file command.mdcommit 27de6c68d7c0c15f9df410ae7ff48a1f97fb2c72Author: shengqianfeng <1007424128@qq.com>Date: Tue Aug 15 10:42:15 2017 +0800 changes logAdministrator@J6Y36H1QNVZDVP7 MINGW64 /d/git_study/myRepository (master)$

 

不慎提交大文件该如何接续提交?

此前不小心在工作区,也就是我的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.h5git rm --cache /d/PycharmProjects/pystudy/deep_learning/hands_book/conv_tensorflow//5.7_vgg_weights.h5

 

解决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.2Updating 0d8ce53..0e55950error: 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.xmlPlease 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..0e55950Fast-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 popAuto-merging admin-web/pom.xmlAuto-merging admin-service/src/main/java/cn/xxx/admin/task/RemoveUselessFrameSchedule.javaAuto-merging admin-service/src/main/java/cn/xxx/admin/model/OpenItemStatusModel.javaOn branch release.1.0.2Your branch is up to date with 'origin/release.1.0.2'.Changes to be committed:  (use "git reset HEAD 
..." to unstage)        new file:   admin-service/src/main/java/cn/xxx/admin/task/RemoveUselessFrameSchedule.javaChanges not staged for commit:  (use "git add/rm
..." to update what will be committed)  (use "git checkout --
..." 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.javaDropped 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 --hardgit pull

解决冲突

当本地文件与远程文件在某行不一致时,利用git pull更新远程文件就会发生冲突。比如:

➜  my-csdn git:(master) ✗ git pullremote: 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 0Unpacking objects: 100% (3/3), done.From https://codechina.csdn.net/shengqianfeng/my-csdn   9b06705..ef61e48  master     -> origin/masterUpdating 9b06705..ef61e48error: Your local changes to the following files would be overwritten by merge:	README.mdPlease commit your changes or stash them before you merge.Aborting

由于本地文件README.md修改后并未提交,也没有暂存。所以git pull就会提示先提交本地文件或者放进暂存区。

于是我stash暂存一下,然后再pull,最后pop一下暂存区:

➜  my-csdn git:(master) ✗ git stashSaved working directory and index state WIP on master: 9b06705 mmodify readme➜  my-csdn git:(master) git pullUpdating 9b06705..ef61e48Fast-forward README.md | 1 + 1 file changed, 1 insertion(+)➜  my-csdn git:(master) git stash popAuto-merging README.mdCONFLICT (content): Merge conflict in README.md

提示我README.md文件存在冲突,帮我自动合并了冲突。其实并没有真的合并,需要我们自己vim进去合并,你想git怎么知道究竟怎么取舍冲突的代码呢?只有靠我们自己。

经过一通编辑之后,README.md被我解决了冲突,于是我想提交上去。当执行commit时还是失败了,提示冲突未解决。

➜  my-csdn git:(master) ✗ git commit -m "mmodify readme"U	README.mderror: Committing is not possible because you have unmerged files.hint: Fix them up in the work tree, and then use 'git add/rm 
'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 pushCounting 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

 

压缩提交记录

有的时候我们会频繁的编辑同一个文件,然后频繁的提交到仓库。这时候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 --forceCounting 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)

转载地址:https://jeffsheng.blog.csdn.net/article/details/77185908 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:阿里云安装mysql
下一篇:mysql分库分表的常见策略

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年05月04日 12时45分07秒