前言
代码笔记 为一系列的文章,从一个python ,django 完整项目的所用到的环境和工具讲起,随时供自己备查,进阶全栈工程师的狂暴之路。
请点击右上角 +关注,希望能在后续工作中帮助到您。
概述
本文章讲纯干货的 git的使用方法和团队协作中的问题解决,尽量不讲废话,只要记住几个基本概念和几条常用命令,就已经使用git无障碍,绝不长篇大论从历史开讲,看了2个小时还是不知道怎么上手。
git是一个分布式版本系统,最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作。
基本概念
版本库
只要在某个文件夹下做了git init的初始化操作,或者从远程往本地某个文件夹下 clone下拉了代码,这个目录就是包含一个版本库了.
最简单的识别方法, 看看 ls -ah, 当前目录下有隐藏的.git 目录,那么当前 .git目录就已经是版本库了。
git是把所有版本变更的信息都记录在 .git 目录下面,也就是所谓的版本库
工作区
当前的目录就是工作区, 工作区有一个隐藏目录.git文件夹,这个不算工作区,而是Git的版本库。
暂存区
在工作区里随意的添加或者修改文件,这时候是和git没有发生关系, 想要发生关系,需要执行一个git add . 操作, 这时候就把工作区的文件加到 git 的暂存区,之所以说是暂存,是因为这些文件目前只是和git产生了关联,但并不属于任何分支,还没有纳入版本管理,所以叫暂存。
版本分支
我们创建Git版本库时,Git自动为我们创建了唯一一个master分支。
把工作区的 文件纳入版本管理, 第一步是要 git add 放入暂存区,表示要纳入git管理
第二步 做 git commit -m “提交注释” , commit就是提交的意思, 提交后才是纳入了 master版本分支的管理
常用操作命令速查
git init 初始化当前目录,建立 .git 版本库
git status 查看当前目录下所有文件的状态和当前分支
git add . 当前目录下的所有未加入git管理的文件纳入git暂存区
git commit -m “注释信息” ,提交到当前版本, 注意commit是本地提交,并不会往服务器上推送
git diff 是工作区(work dict)和暂存区(stage)的比较
git diff –cached #是暂存区(stage)和分支(master)的比较
git log 显示从最近到最远的提交日志,
git reset –hard HEAD^ 把当前版本回退到之前的某个版本
git reset –hard 3628164 3628164 是git log中显示的某个版本号,没必要写全,前几位就可以了,Git会自动去找
git checkout – readme.txt 可以丢弃工作区的修改,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态
git remote add origin git@github.com:test/test.git
在服务器上已经创建了一个新的Git仓库test.git, 在本地通过 此命令和远程仓库关联起来。
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库
git push -u origin master
由于远程库是空的,第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来
git push origin master 强制提交到master分支
git push 在当前的所在的版本分支上提交
git clone git@github.com:test/test.git 只要看到别人提供的 git地址, 用git clone就可以拉取到本地
分支管理
git checkout -b dev
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
git branch dev 新建 dev分支
git checkout dev 当前工作的版本分支切换为 dev, 注意之前有个 checkout 带有 – 参数的,后面是具体文件,不是分支
git branch 命令查看当前分支:
git merge dev 在当前的版本不是dev的情况下使用,要合并dev分支和当前分支的不同之处
git branch -d 删除分支
git branch –set-upstream dev origin/dev 设置本地 dev和origin/dev的链接,没出现问题的话一般用不上这个,备查
解决冲突
冲突不可避免, 解决冲突的前提是先把本地工作区有修改和新增的文件 通过 git add . git commit 加入管理,然后再做 pull拉取代码或者不同分支的merge合并
大部分文件的差异 git会通过自动merge 解决掉, 还剩一些搞不定的会提示有冲突, 需要手动合并。 有差异的地方会有 <<<的标记具体是什么地方冲突,修改后删掉 那些<<<标记,重新 git commit就好了
如果合并错了, 可以通过 git log查看之前的版本号, 再通过 git reset 版本号 回退, 重新进行合并和解决冲突
推送分支
git push origin master 推送到 远程master分支
git push 推送当前版本的更新
git pull
拉取更新,如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream branch-name origin/branch-name
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
建立本地分支和远程分支的关联,使用git branch –set-upstream branch-name origin/branch-name
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突
其他
git remote -v 查看远程库信息
管理公钥
如果团队很小,把每个人的公钥收集起来放到服务器的
/home/git/.ssh/authorized_keys文件里就是可行的
预告
下一篇讲一个通过游戏练习git使用,快速成为高手的方法, 99%的聪明人都点了右上角 +关注 果断订阅