一.协作冲突
举个简单的例子,公司里两个人(A,B)同一天上班,都拉取了远程仓库数据。然后A做完了所有的工作,进行了x文件的修改并提交至远程仓库。而B在做自己工作的时候不小心或者需要修改x文件,B认为A没有操作x文件直接push没有问题。
但是程序会报错,提醒B将远程仓库的内容pull,pull后x文件包含了A和B的修改,需要两个人联系如何整合代码,整合后再push进远程仓库。
步骤就是:push 失败 — pull — 整合代码 — push
# git给出的提示
print("hello")
<<<<<<<<<< HEAD
print("A的修改")
= = = = =
print("B的修改")
>>>>>>>>>> # 一大串字符
上面 HEAD 后的就是起冲突的部分,= = = 前面的是第一个人的修改,后面的是第二个人的修改,只需要整合这两部分的代码就好。
二.git对仓库分支的操作
这里讲的是本地创建分支并提交到远程仓库,实际上在远程仓库上创建再下载到本地也是可以的。
还是一样的配方:open git bash here
2.1 查看分支
输入 git branch
你会看到默认分支即主分支叫 master ,后续创建的所有分支都可以通过这个命令查看。
2.2 创建分支
输入 git branch ‘分支名’
2.3 进入分支
输入 git checkout '分支名'
就可以切换到你所需要的分支进行编写代码,一般一个分支做一个任务的功能,然后分别提交分支到远程仓库。所有上传到远程的分支一般由项目经理下载到本地并将所有分支合并到主分支再同步。
同时 git checkout -b '分支名'
会寻找分支若没有就创建再进入该分支。
注意:此时git pull 或者clone只能拉下主分支的东西,除非分支合并到主分支并上传到远程仓库
2.4 删除分支
git branch -d ‘分支名’
必须先退出当前指令所在的分支,否则删除不了。
2.5 提交分支
git push origin ‘分支名’
执行完本地仓库的添加后,这个指令会将这个分支的内容传进远程仓库,且所有内容都在这个分支中,master分支是没有的。
2.6 合并分支
首先 git checkout master 回到主分支
然后 git merge '分支名'
就会将分支合并到主分支中,经过项目经理审查后没有问题就push进远程仓库。
提示:其实一般写代码都是在vscode等代码编辑器进行的,里面的操作更简单,不需要这些指令,不过需要自行熟悉。但请记住,在编程软件仓库源代码选项中,慎用键盘,按到control+z会直接回退版本,而且找不到。
三.版本回退(慎用)
这种情况一般出现在一个时间段内编写的程序有极大的问题才会使用,去找到上一个时间段或者其他以前的时间段的版本,然后回退。因为回退版本是很大的事,就好像花了很多资源培养一个二游角色,最后回退直接清空进度。
3.1 查看往期版本
两种指令可以查看,显示效果不一样,主要是为了得到每个版本的id号
语法1: git log
这个显示的更简单
语法2: git log --pretty=oneline
根据你的commit内容来查找版本
3.2 回退
git reset --hard ‘得到的id号’
就可以回退到自定义的版本了。
3.3 回到现版本
那我要是找半天还不如在现在的版本上修改呢?
查看历史操作,然后得到对应所有版本的id:
git reflog
回退到你想去的版本
git reset --hard ‘上一步得到的id号’
四.git忽略文件
本地中会需要各种第三方库或数据,上传到远程仓库会占用容量,只需要列一份清单告知他人运行这段程序需要下载一些东西,这就是忽略文件的意义:会不上传某些数据文件。
在你的仓库文件夹中创建这个文件 .gitignore ,其实很好记就.git + ignore,在其中编写数据的路径就可以不让这些数据上传,比如 /test/1.png *.jpg(所有这类文件都忽略) /test/。