正常流程
从远程clone过来的项目默认只有一个分支main:
1 | git branch |
1 | *main |
尽量在dev分支上进行开发,因为main分支要存放稳定的版本,所以克隆了之后大家首先新建一个dev分支并关联到远程的dev分支:
1 | git switch -c dev origin/dev |
这个dev分支就是大家可以进行提交的分支,main分支是稳定版本分支,我来合并,大家可以不用管。但是每一次打开这个git bash的时候都会默认是main分支,使用git switch dev就可以切换到dev分支。那么基本的分支弄好了大家如何修bug、提交代码呢?
需要大家再创建一个分支,刚刚不是创建了一个dev然后关联到远程仓库了吗?现在创建的分支不用关联,只有你自己知道,比如我创建一个feature1分支并切换过去:
1 | git switch -c feature1 |
下面比如我将readme.txt文件添加了一行:
然后添加到暂存区:
1 | git add readme.txt |
然后切换到feature1分支,再将修改提交到本地仓库:
1 | git switch feature1 |
为什么需要切换到feature1分支呢?暂存区和工作区(BigDataProject文件夹)都是所有分支共享的,所以在哪里进行add操作都可以,但是commit操作会将暂存区里的修改一次性合并到本地仓库的对应分支上,所以需要切换到你想合并的分支下,我们不直接对dev分支进行操作,我们的思路是:直接对feature1分支进行操作,dev分支留在后面的修改全部弄完之后,将feature1合并到dev分支。
刚刚是进行了一个修改,当你将需要修改的内容全部修改完之后,需要提交到远程仓库之前,需要将feature1提交的修改合并到dev分支上:
1 | 先切换到dev分支上: |
如果你对于feature1没有其他的使用价值了,就可以将这个分支删除了:
1 | git branch -d feature1 |
好了,刚刚将修改提交到本地仓库dev了,下面提交到远程仓库github上:
1 | git push origin dev |
提交之后可以去github上查看一下:
?没变啊?
别急,这个是main分支下的状态,我们刚刚提交的是dev分支,所以切换一下:
这就是我们理想中的流程,即成员需要做的就是自己创建分支,在里面“大闹天宫”,提交到本地仓库,然后合并到dev分支中,最后将这个dev分支的内容提交到远程的dev分支,而main分支的内容不需要弄,组长来解决就行。
提交代码的时候冲突
如果想下载最新的远程代码,但是自己在本地已经做了修改,此时直接git pull
会报错,类似这样:
1 | error: Your local changes to the following files would be overwritten by merge: |
解决这个有以下几种方法:
-
先将你的修改提交到远程,然后在将远程的代码拉取过来(如果你对于代码没有实质性的修改不建议这样):
1
2
3
4
5git add .
git commit -m "xxx"
git pull
再提交:
git push -
强制将远程的拉取过来完全覆盖本地代码:
1
2git reset --hard
git pull -
先保存当前的状态,压入git栈,然后拉取代码,然后将之前的状态从git栈中恢复:
1
2
3git stash
git pull
git stash pop
【Reference】:
https://blog.csdn.net/lincyang/article/details/21519333
https://www.cnblogs.com/wufenfen/p/13804456.html
https://www.cnblogs.com/willingtolove/p/12163517.html
.git目录特别大
准备提交的时候发现传了很久,然后发现是.git
目录特别大,具体是.git\objects\pack
目录下的.pack
文件很大。解决如下:
首先看看前3个最大的文件是哪些:
1 | git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*idx | sort -k 3 -n | tail -5 | awk '{print$1}')" |
输出如下:
1 | cddf9e7cff045fb02ed547c2274c9beee945d443 src/static/admin/simpleui-x/elementui/element-ui.common.js |
我的.git
目录有980MB,下面将关于dataset/UserBehavior.csv
的记录全部清除:
1 | git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch dataset/UserBehavior.csv' --prune-empty --tag-name-filter cat -- --all |
然后依次执行下面几个指令:
1 | rm -rf .git/refs/original/ |
这样一套流程下来,我的.git
目录就只有8MB了,如果还需要删除其他的,可以以自己的需要来删除。