版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/github_33678609/article/details/89382914
Git是什么?
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
Git有什么特点?简单来说就是:高端大气上档次!
那什么是版本控制系统?
如果你用Microsoft Word写过长篇大论,那你一定有这样的经历:
- 想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一个新的Word文件,再接着改,改到一定程度,再“另存为……”一个新文件,这样一直改下去。
- 过了一周,你想找回被删除的文字,但是已经记不清删除前保存在哪个文件里了,只好一个一个文件去找,真麻烦。
- 看着一堆乱七八糟的文件,想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删,真郁闷。
- 更要命的是,有些部分需要你的财务同事帮助填写,于是你把文件Copy到U盘里给她(也可能通过Email发送一份给她),然后,你继续修改Word文件。一天后,同事再把Word文件传给你,此时,你必须想想,发给她之后到你收到她的文件期间,你作了哪些改动,得把你的改动和她的部分合并,真困难。
- 于是你想,如果有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便?
git的更多解释,大家可以自行搜索。对于git的优势就不用多说了。
今天,我们主要对于git的一般操作作一个归类,便于使用的时候可以一步了然,当然网上对于这种干干货很多。
话不多说,action~
首先我们对于git最基本的操作做一个简单的介绍。
根据如下图所示箭头放下,可表示成如下三步:
git add .
git commit -m "comment"
git push
git add .
,表示将所有的文件从工作区存放到暂存区git commit -m "comment"
,表示将所有文件从暂存区提交到本地仓库git push
,表示将所有文件从本地仓库推送到远程仓库
对于git的理解主要分为3个操作,4个区,5个状态。
3个操作
将一个在本地的新文件推送到远端服务器(github/gitlab)上都需要进行以下基本操作。
- git add .把所有文件放入暂存区
- git commit把所有文件从暂存区提交进本地仓库
- git push把所有文件从本地仓库推送进远程仓库
4个区
从本地将文件上传到服务器上的过程中会经过以下四个区域。
- 工作区(Working Area)
- 暂存区(Stage)
- 本地仓库(Local Repository)
- 远程仓库(Remote Repository)
5个状态
四个区域,对应5个状态,其中工作区分为未修改和已修改。
- 未修改(Origin)
- 已修改(Modified)
- 已暂存(Staged)
- 已提交(Committed)
- 已推送(Pushed)
检查修改
代码我们修改完了,但是往往会忘记我们自己修改了什么?提交上去的代码是否修改正确?别人修改了什么?
那么我们需要对各个阶段的代码进行比较。
- 已修改,未暂存 (工作区)
git diff xxx
,xxx
表示需要比较的文件,结果可以查看xxx
在工作区修改前和修改的差别。 - 已暂存,未提交 (暂存区)
git diff --cached xxx
的结果可以查看,暂存区和本地仓库的区别。 - 已提交,未推送 (本地仓库)
git diff master origin/master
,其中master就是你的本地仓库,而origin/master就是你的远程仓库,所以结果表示本地仓库和远程仓库的区别。
撤销修改
前面介绍了基本的git操作,那么在提交文件的过程中一定会把一部分不需要提交的文件提交上去。
那么我们在每个阶段需要如何撤销呢?
- 已修改,未暂存 ==>
git checkout .
orgit reset --hard
- 已暂存,未提交 ==>
git reset HEAD xxx
- 已提交,未推送 ==>
git reset --hard origin/master
- 已推送 ==>
git reset --hard HEAD^
,git push -f
- 先恢复本地仓
- 强制push到远程仓库
删除未add的文件
- 显示要删除的文件及目录 ==>
git clean -n
- 删除文件及目录 ==>
git clean -df
删除服务器远端文件,本地仓不删除
- 删除a目录下的2.txt文件 ==>
git rm -r --cached a/2.txt
- commit ==>
git commit -m "删除a目录下的2.txt文件"
- git push
tag操作
- 打标签 ==>
git tag -a v1.01 -m "Relase version 1.01"
- 注解:git tag 是打标签的命令,-a 是添加标签,其后要跟新标签号,-m 及后面的字符串是对该标签的注释。
- 推送指定tag到远端服务器 ==>
git push origin [tagname]
- 推送所有tag到远端服务器 ==>
git push [origin] --tags
- 删除标签 ==>
git tag -d v1.01
- 删除远端标签 ==>
git push origin :refs/tags/v1.01
- 查看标签 ==>
git tag
分支操作(本地)
- 查看本地分支 ==>
git branch
- 显示本地、服务器所有分支 ==>
git branch -a
- 显示本地分支和服务器分支的映射关系 ==>
git branch -vv
- 创建分支 ==>
git branch mybranch
- 删除分支 ==>
git branch -d mybranch
- 强制删除分支 (慎用) ==>
git branch -D mybranch
- 删除远端分支 ==>
git push origin :mybranch(origin 后面有空格)
- 列出所有分支 ==>
git branch
- 列出远端分支 ==>
git branch -a
- 切换分支 ==>
git checkout mybranch
- 创建并切换分支 ==>
git checkout -b mybranch
- 从当前分支创建并切换分支 ==>
git checkout -b myfeature dev
- 切换到master分支 ==>
git checkout master
- 关联远端branch ==>
git pull origin/mybranch mybranch
- 发布分支到远端分支(local:remote) ==>
git push origin dev:dev
- 创建并切换并关联远端branch ==>
git checkout -b mybranch remote_branch(origin/mybranch)
- 把本地分支合并到master ==>
git merge mybranch
- 把master合并到branch上 ==>
git merge master
- 把远端master合并到branch上 ==>
git merge origin/master
- 合并(保留之前分支的历史) ==>
git merge --no-ff
- 撤销merge ==>
git reset --hard HEAD
分支操作流程
将本地创建的分支与远程仓库关联
- git checkout <branch_name>
- git push <server_name> <branch_name>:<remote_branch_name>
- eg:git push origin dev:dev
- git branch --set-upstream-to=<server_name>/<remote_branch_name> <branch_name>
- eg:git branch --set-upstream-to=origin/dev dev
从远程服务器或者已经创建好的分支
- git checkout -b <branch_name> <server_name>/<remote_branch_name>
- eg:git checkout -b dev origin/dev
删除本地分支
- git checkout master
- git branch -d <branch_name>
删除远程仓库中的分支
- git push <server_name> :<remote_branch_name>
or - git push <server_name> --delete <remote_branch_name>
git ignore
在git使用中,本地的开发过程中会产生大量的临时文件,但是我们不需要将临时文件上传到远程仓库中,也不希望别人将临时文件上传,所以我们会在工程的根目录下创建一个.gitignore
的文件,文件中的代码的功能就是忽略临时文件。
vivado_2016_3/*
表示vivado_2016_3的文件夹以下的所有文件及子文件夹忽略。
!vivado_2016_3/*.xpr
表示vivado_2016_3的文件夹中除了*.xpr
文件以外的所有文件及文件夹都忽略。
!表示取反(保留)
vivado_2016_3/*
!vivado_2016_3/*.xpr
!vivado_2016_3/*.bif
!vivado_2016_3/*.tcl
!vivado_2016_3/*.dcp
!vivado_2016_3/*.xdc