git操作系列教程

目录

基本操作

一、准备工作

二、安装github客户端

三、添加本地文件到远程服务器

四、删除本地和远程文件

查看分支&更新文件

创建新分支&提交远端

在原有分支基础上创建分支

合并分支

合并dev分支到master分支

同步master分支代码到开发分支

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

本地更新merge override问题

解决冲突

冲突类型①:更新冲突

冲突类型②-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)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jeff.sheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值