Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
下面是工作中常用的几条 Git 命令,平时开发掌握这几条足矣,这几条也是按流程顺序排列的。
Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。
# 显示当前的Git配置
$ git config --list
# 编辑Git配置文件
$ git config -e [--global]
# 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
1、情况一:在远程存在有项目,在本地下载一个项目:
git clone [url]
2、情况二:在当前目录新建一个Git代码库,一般流程如下:
touch README.md //新建说明文件
git init //在当前项目中生成本地git管理,并建立一个隐藏.git项目
git add . //添加
git commit -m "first commit" //提交到本地源码库,并附加提交注释
git remote add origin [url] //添加到远程项目,别名为origin
git push -u origin master //把本地源码库push到github别名为origin的远程项目中,确认提交。
git remote rm origin //断开远程仓库连接
git status 查看工作区代码相对于暂存区的差别;
git add . 将当前目录下修改的所有代码从工作区添加到暂存区,. 代表当前目录;
git commit -m '注释' 将缓存区内容添加到本地仓库;
git pull origin master 先将远程仓库master中的信息同步到本地仓库master中;
git push origin master 将本地版本库推送到远程服务器。
origin是远程主机,master表示是远程服务器上的master分支和本地分支重名的简写,分支名可以修改。
git branch <branch_name> #创建指定名称的分支
git branch #查看所有分支,* 号代表当前工作分支
git branch -v #查看分支详情,包括分支指向的commitId及提交信息
git checkout <branch_name> #切换到指定分支
git checkout -b <branch_name> #创建并切换到指定分支
示例:切换到dev分支,然后添加dev.txt文件并进行提交,在dev分支上创建并切换到test分支。
git branch -d <branch_name>.#删除一个干净的分支(即相对当前分支而言该分支没有新的提交记录)
git branch -D <branch_name>.#强制删除一个分支,该分支有没有合并到当前分支的提交记录
注意:删除分支前都需要先切换到其他分支才能进行删除操作
示例:在dev分支上删除test分支,test分支相对于dev来说是干净的分支,所以可以直接删除,然后切换到master分支,删除dev分支,此时需要进行强制删除。
思路:对于已经有提交记录的分支删除后,实际上只是删除指针,commit记录还保留,如果想恢复,需要使用git reflog查找该分支指向的commitId,然后根据commitId创建新的分支
git branch <branch_name> <hash_val> #根据指定commit创建新分支
示例:恢复已经删除的dev分支,该分支新增了dev.txt文件
git branch -m <branch_name> newname
git merge <branch_name> #将指定分支合并到当前分支
如果两个分支没有产生分叉情况,那么会进行快速合并,即fast-forward方式,它并不会产生新的commitId,只是改变了指针的指向,产生分叉合并可能会有冲突情况。
示例:合并pro分支到master分支,此时合并为fast-forward方式
git merge --no-ff -m "msg" <branch_name> #合并分支时禁用Fast forward模式
我们知道如果使用fast-forward方式进行分支合并,只是简单改变了分支指针,而不会产生新的commit记录。
为了保证合并数据的完整性,我们也可以在合并时指定不使用fast-forward方式,使用 --no-ff 选项。这样,在merge时就会生成一个新的commit,从日志上就可以看到分支合并记录了。
我们可能需要将A分支的代码合并到B分支,如何操作呢?
# 首先切到分支B
git checkout B
#执行合并命令
git merge A
#merge之后如果有冲突,手动解决冲突(其实就是看哪些要哪些不要,手动操作取舍),然后执行:
git add .
git commit -m 注释
#如果没有冲突,执行推送到远程
git push
git log
用于查看我们修改提交的快照记录(commit记录),然后会有个commit修改记录的id编号,该命令显示从最近到最远的提交日志,我们可以看到3次提交记录,如下:
git checkout -b xxx commit-id
把代码回退到一个新的分支,这样不要影响你的开发分支。或者直接
git reset --hard HEAD^
回退到上一个提交的版本,HEAD^^回退到上上个版本。或者
git reset --hard cmmit-id
回退到指定commit id版本
如果你想回到会退前的版本,可以使用如下命令恢复:
git reflog
查看你的提交记录,找到你要回去的版本的commit id,指定id号回退回去就行了。如下
git reset --hard 3b52ede
git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
这时候再执行git status,会提示:nothing to commit, working tree clean
然后你就可以切到其他分支做别的事情了。
过后你再回到这个分支,执行:
git stash list :查看stash了哪些存储
怎么恢复刚才stash save的东西呢?
git stash apply stash@{0}
其中, "stash@{0}“是根据备注指定到版本,如果省略不写的话,默认取"stash@{0}”,即最新的一次save
如果觉得stash list记录太多了,想要清除,执行:
git stash clear :删除所有缓存的stash
其它stash非常用命令:
git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储
git 下打标签其实有2种情况
轻量级的:它其实是一个独立的分支,或者说是一个不可变的分支.指向特定提交对象的引用
带附注的:实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证,电子邮件地址和日期,一般我们都建议使用含附注型的标签,以便保留相关信息
所以我们推荐使用第二种标签形式
git tag -a V1.2 -m 'release 1.2'
上面的命令我们成功创建了本地一个版本 V1.2 ,并且添加了附注信息 'release 1.2'
git tag
要显示附注信息,我们需要用 show 指令来查看
git show V1.2
但是目前这个标签仅仅是提交到了本地git仓库.如何同步到远程代码库
git push origin --tags
如果刚刚同步上去,你缺发现一个致命bug ,需要重新打版本,现在还为时不晚.
git tag -d V1.2
到这一步我们只是删除了本地 V1.2的版本,可是线上V1.2的版本还是存在,如何办?这时我们可以推送的空的同名版本到线下,达到删除线上版本的目标:
git push origin :refs/tags/V1.2
如何获取远程版本?
git fetch origin tag V1.2
这样我们可以精准拉取指定的某一个版本。
1、git-bash命令
ls #llist 查看当前目录下的内容
cd #change directory 更改运行目录(文件名不区分大小写)
pwd #print working directory 输出git-bash运行的绝对路径
mkdir #make directory 创建目录(文件夹)
touch 创建文件
rm #remove 删除文件
clear 清屏
history 查询命令输入历史(clear不会清除历史)
exit 退出 git-bash
2、安装及测试阶段
git config -l 查看本机配置
git config --global user.name "caobingyong" 设置本机用户名称
git config --global user.email "caobingyong.tjad.cn" 设置本机用户邮箱
ssh-keygen -t rsa -C "caobingyong@tjad.cn" 生成SSH公钥(每个机器对应一个公钥)
ssh -T git@gitee.com #@github.com 测试电脑与服务器的连接
3、Git仓库管理操作
git init 创建全新的仓库
git log 查看提交历史
git clone [url] # https://gitee.com/kuangstudy/openclass.git 克隆远程仓库
git status [filename] #文件的三种状态 查询文件状态
git add . . 为添加所有更改到暂存区
git commit -m "描述文字" 提交到本地仓库
git remote add origin [项目的SSH] 本地仓库与远程仓库关联
git pull --rebase origin master 从远程master分支拉取代码与本地仓库合并,保证本地文件为绿色
git push -u origin master 推送到远程master分支(关联本地与远程的master分支)
Git是一个免费的、开放源码的分布式版本控制系统,它能以快速和效率处理从各种各样的项目。(一句话概括,就是分布式版本控制工具)
把本地代码上传到git的方法:步骤一:首先进入需要上传的项目文件夹,通过命令git init初始化,步骤二:将本地文件添加到版本库中,使用命令 git add . 将文件提交到本地的暂存区,步骤三:使用命令git commit将文件提交到本地仓库...
.gitignore 文件的作用就是告诉git, push的时候忽略指定的文件夹或者文件,例如:vue-cli脚手架创建的项目,push到github上时,不会上传node依赖文件夹,这是因为vue-cli脚手架创建的时候,自动为我们创建了 .gitignroe文件,并且为我们写好了规则。
这篇文章主要介绍git从远程仓库拉取dev分支到本地的实现【gitLab】:初始化一个本地仓库、与远程仓库建立连接 、查看本地是否具有dev分支、在本地创建分支dev并切换到该分支 、dev分支上的内容都拉取到本地
在开发中,通常会保持两个分支master分支和develop分支,但是如果因为develop上面迭代太多而没有及时维护master,最后想丢弃master而直接将测试确认过的develop强推到master,该怎么操作呢?因此,做如下总结分享,希望对遇到同样问题的人用帮助。
git reset 、 git checkout 和 git revert 是Git中常用命令。经常傻傻分不清他们之间的区别。最近工作不忙,抽出时间参考了其他文档,对其总结了下。传给 git reset 和 git checkout 的参数决定了它们的作用域。
Git与SVN的比较,Gitflow为不同的分支分配一个很明确的角色,并定义分支之间如何和什么时候进行交互。新的功能分支应该从develop分支迁出一个feature分支,新功能开发完成之后再合并回develop分支,常用命令:
1.新建一个本地分支并切换到新建的那个分支:2.从一个分支切换到另一个分支:3.将代码恢复到最近的一次commit 时候的状态:4.将代码从最近的一次commit的状态恢复到最新的进度:
在未进行git push前的所有操作,都是在“本地仓库”中执行的。我们暂且将“本地仓库”的代码还原操作叫做“撤销”,进行git push,即已推送到“远程仓库”中。我们将已被提交到“远程仓库”的代码还原操作叫做“回滚”!注意:对远程仓库做回滚操作是有风险的,需提前做好备份和通知其他团队成员!
避免将不必要的文件添加到版本管理系统中,比如前端的node_modules目录,该目录包含大量文件,如果将其添加到版本管理系统中,会使仓库变的庞大,不利于仓库的管理。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!