前置知识:
Github : Git项目托管网站, 部分情景拥有免费私仓。
码云 : Git/SVN项目托管网站, 拥有免费私仓。
Git : 分布式版本版本控制工具。
GitLab : 开源免费可自行搭建的代码托管平台。
创建仓库并与远程仓库绑定, 取消绑定
注意:
- 创建生成.git文件,该目录下为工作区, 工作区自动检测除.gitignore中标注外的文件的改动。
- git只识别目录符:/
$ git init 创建成功并生成.git文件
//如果你是第一次提交项目到一个新的仓库,这一句非常重要,这是你本地的当前的项目与远程的哪个仓库建立连接。
//建立远程仓库连接1
$ git remote add origin git@+ 项目ssh连接
//建立远程仓库连接2
//github
$ git remote add origin git@github.com:用户名/远程仓库名(url).git
//码云
$ git remote add origin git@gitee.com:用户名/远程仓库名(url).git
//取消本地目录下关联的远程库:
$ git remote rm origin
//查看你当前项目远程连接的是哪个仓库地址。
$ git remote -v
进行仓库版本提交
注意:
- 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令(去掉u)。
//查看当前项目下所有文的状态,如果第一次,你会发现都红颜色的,因为它还没有交给git
$ git status
//(.)点表示当前目录下的所有内容,交给git管理(添加到暂存区),也就是提交到了git的本地仓库,在add
$ git add . 后加文件名也可只添加一个文件(加入暂存区)。
//add后可以回退文件,将文件从暂存区回退到工作区
$ git reset HEAD filename :
//使用(.)点提交后, 多人合作时记得删除个人的屏蔽文件
$ git rm .gitignore
//对你更新或修改了哪些内容做一个描述,提交到版本。
$ git commit –m ”new matter ”
//推送:
//第一次推送远程仓库 加 -u
//-u表示当前分支推送信息初始化, 第二次开始你就可以用git push推送到对应分支了
$ git push -u origin master
$ git push
//如果推送由于版本错误一直失败 加-f , 强行让本地分支覆盖远程分支
//使用于不同.git对差异过大的文件不兼容
git push origin master -f
管理代码版本
那么在平日的使用中怎么进行代码管理呢:
版本信息查看:
//命令可以让我们时刻掌握仓库当前的状态,告诉我们,哪些被修改过了,但还没有提交,甚至可以查看哪些合并冲突了。
$ git status
//顾名思义就是查看difference,可以从上面的命令输出看到,我们上次具体做了什么修改
$ git diff <file>
//命令显示从最近到最远的提交日志(版本号也会显示出来),如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数.
$ git log
进行版本回退:
//查看当前文件状态确认版本号
$ git log
//彻底回退到某个版本,本地的源码也会变为上一个版本的内容,此命令 慎用!
HEAD 回退到最近一个版本
HEAD^ 代表当前版本上一个的版本号
$ git reset --hard HEAD
//回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
$git reset --soft:
进行版本恢复:
//查看当前工作区的所有历史版本提交信息及版本号
$ git reflog
//版本号没必要写全,前几位就可以了,Git会自动去找。
$ git reset --hard 【版本号】
//查看当前文件状态确认版本
$ git log
分支合并管理
分支合并: 例如, 将本地开发分支dev合并 到master,并同步更新远程:
//在 主分支下合并
$git branch 查看分支
$git merge dev 把dev的最新更改合并到当前分支下
$git checkout master
$git pull origin master //拉取并更新
$ git push
分支创建:
//引入github已有分支
$ git pull origin 远程分支名
//切换
git checkout 分支名
//创建新分支并切换到新分支下
$ git checkout -b 分支名
从远程库拉取代码
注意:
拉取代码时,请先commit自己有用的更改, 先 commit 再 pull,如果不想更新时有2个版本信息,也可以git stash先创建镜像(不用commit)
拉取准备:git stash使用场景
git stash 会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。
如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用git stash就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修Bug,等到修完Bug,提交到服务器上后,再使用git stash apply将以前一半的工作应用回来。
比如下面的中间状态,通过git stash命令推送一个新的储藏,当前的工作目录就干净了。
$ git stash list 可以看到保存的信息:
$ git stash pop stash@{id} 还原某个id的镜像并合并刚刚pull的部分,并移除原先stash
$git stash drop <stash@{id}>删除
"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交"
$ git clone git@+项目ssh链接
fetch 以及pull
假如本地已经存在了这个项目,而仓库中又有一新的更新,如何把更的合并到本地的项目中?
$ git fetch origin //取得远程更新,这里可以看做是准备要取了
$ git merge origin/master //把更新的内容合并到本地分支/master
多人合作加入时,由于本地版本没有版本信息, 并且不一定一致,如何更新至于远程同一状态, 使用忽视历史版本信息的拉取命令:
$ git pull origin master --allow-unrelated-histories