Git学习记录

安装Git

在Windows上使用Git,可以从Git官网直接下载安装程序.,然后按默认选项安装即可。

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
在这里插入图片描述
安装完成后,还需要最后一步设置,在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址,用来做一个标识。
注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

常用命令

创建版本库

$ git init         		   				#初始化本地版本库

添加文件到仓库

$ git add file.txt         				#把file.txt文件添加到仓库
$ git commit -m "wrote a file"			#把文件提交到仓库,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录

查看状态

$ git status       						#掌握仓库当前的状态
$ git diff file.txt  					#查看文件具体修改了什么内容

版本回退

$ git log      							#历史记录,显示从最近到最远的提交日志
$ git log --pretty=oneline				#查看记录,显示版本号和提交说明
$ git reset --hard HEAD^				#回退到上一个版本,HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本可以写成HEAD~100
$ git reset --hard 1094a				#指定回到未来的某个版本,版本号没必要写全,前几位就可以了,Git会自动去找。
$ git reflog							#记录你的每一次命令

管理修改

$ git diff HEAD -- file.txt 			#查看工作区和版本库里面最新版本的区别

撤销修改

$ git checkout -- file.txt				#丢弃工作区的修改,把readme.txt文件在工作区的修改全部撤销,让这个文件回到最近一次git commit或git add时的状态
$ git reset HEAD readme.txt				#把暂存区的修改撤销掉(unstage),重新放回工作区

删除文件

$ git rm test.txt						#删除文件

远程仓库

打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"   	#把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码

登录GitHub,点击右上角头像处,选择Settings,点击左边导航栏SSH and GPG keys,点击New SSH key,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容(在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人):
在这里插入图片描述
点“Add SSH Key”,你就应该看到已经添加的Key。
GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作。
登陆GitHub,然后,在右上角“+”找到“New repository”按钮,创建一个新的仓库:
在这里插入图片描述

添加远程库

刚创建的仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
根据GitHub的提示,在本地的仓库下运行命令:

$ git remote add origin git@github.com:sixrope/learngit.git		#把sixrope替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库

下一步,就可以把本地库的所有内容推送到远程库上:

$ git push -u origin master

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样.

从现在起,只要本地作了提交,就可以通过命令:

$ git push origin master

从远程库克隆

登陆GitHub,创建一个新的仓库,名字叫gitskill:
在这里插入图片描述
勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。
用命令git clone克隆一个本地库:

$ git clone git@github.com:sixrope/gitskill.git	   #注意把Git库的地址换成你自己的

分支管理

创建与合并分支

#创建dev分支,然后切换到dev分支:
$ git checkout -b dev

#git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
$ git branch 			#查看当前分支,会列出所有分支,当前分支前面会标一个*号
$ git checkout master	#切换回master分支
$ git merge dev			#合并指定分支到当前分支
$ git branch -d dev		#删除dev分支

切换分支这个动作,用switch更科学,因此最新版本的Git提供了新的git switch命令来切换分支

$ git switch -c dev		#创建并切换到新的dev分支
$ git switch master		#直接切换到已有的master分支

分支管理策略

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

$ git merge --no-ff -m "merge with no-ff" dev		#合并dev分支,请注意--no-ff参数,表示禁用Fast forward

合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

Bug分支

$ git stash					#把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git stash list			#查看工作现场

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

$ git stash apply			#恢复后,stash内容并不删除
$ git stash pop				#恢复的同时把stash内容也删了
$ git cherry-pick 4c805e2	#复制一个特定的提交到当前分支

多人协作

$ git remote				#查看远程库的信息
$ git remote -v				#显示更详细的远程信息

推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

$ git push origin master

哪些分支需要推送,哪些不需要呢?

  1. master分支是主分支,因此要时刻与远程同步;
  2. dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
  3. bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
  4. feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

推送失败,可能你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送:

$ git pull

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin 推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。

Rebase

rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

$ git rebase

标签管理

$ git tag v1.0					#打一个新标签v1.0
$ git tag						#查看所有标签
$ git show v1.0					#查看标签信息
$ git tag -a v0.1 -m "version 0.1 released" bff47be		#创建带有说明的标签,用-a指定标签名,-m指定说明文字
$ git tag -d v0.1				#删除标签
$ git push origin v1.0			#推送v1.0标签到远程
$ git push origin --tags		#一次性推送全部尚未推送到远程的本地标签

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:

$ git tag -d v0.9

然后,从远程删除。删除命令也是push,但是格式如下:

$ git push origin :refs/tags/v0.9

配置别名

$ git config --global alias.st status		#以后st就表示status

本篇文章只是对我学习的Git时做一些简单的命令笔记,这里推荐一个比较好的学习教程:传送门

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值