Git 学习笔记

此为个人笔记,了解更多更详细的git教程推荐阅读 -- 廖雪峰官方网站git教程

一、git配置

配置本地git用户邮箱:

git config --global user.email <邮箱号>

配置本地git用户名:

git config --global user.name <用户名>

查看本地已配置用户邮箱:

git config user.email

查看本地已配置用户用户名:

git config user.name

 

二、增删改查

初始化本地仓库(使当前目录成为git仓库):

git init

查看仓库状态:

git status

添加文件到暂存区(多个文件用空格分开):

git add <文件名称>

提交暂存区内容到仓库:

git commit  -m "描述信息"

提示:git每次提交的是修改,而并非文件,两次加入同一个文件到暂存区,第二次会合并第一次的修改

撤销当前工作区的修改 (撤销某个文件的修改):

git checkout -- <文件名称>

撤销所有修改:

git reset --hard

撤销指定暂存区:

git reset HEAD <文件名称>

撤销加入暂存区的所有修改:

git reset HEAD .

删除文件 (删除也是一个修改操作,并且进入暂存区):

git rm <文件名称>

撤销删除(因为删除也是一个修改操作,并且进入了暂存区,所以需要撤销暂存区操作):

git reset HEAD <文件名称>

还原删除(以上仅仅是撤销暂存区而已,还没有还原文件,还需要撤销修改):

git checkout -- <文件名称>

查看仓库日志:

git log

仓库日志很混乱,可以使用简介方式查看(单行显示):

git log --pretty=oneline

查看分支点线图:

git log --graph

仅显示版本号前几位:

git log  --abbrev-commit

提示:显示日志时回车可以一直查看更多日志,按q退出查看

统计修改差异:

git diff --stat        // 查看工作区和暂存区的差异

git diff HEAD        // 查看工作区和最新提交的差异

 

三、版本控制

git版本回退

git reset --hard HEAD^   // 回退前一个版本

git reset --hard HEAD^^   // 回退前两个版本

git reset --hard HEAD^^^   //回退前三个版本

注意:在windows终端会认为^是换行符,需要使用引号包裹,否者你回车会一直提示"more?",问你是否还有更多命令

以此类推,回退几个版本就是加多少个 ^,但是数量一多就不可能数数了,还可以这样

git reset --hard HEAD~1    // 回退前一个版本

git reset --hard HEAD~2    // 回退前两个版本

git reset --hard HEAD~3    // 回退前三个版本

以此类推,这种方式就好多啦

但是,还有一种情况,比如,我回退了一个版本,就不能回去以前最新的版本了

其实我们还可以使用版本号跳转版本,每个版本都有一个版本号

git reset --hard <版本号>        // 如:git reset --hard a45ab

这种方式需要知道版本号,版本号可以通过git log查看日志获得

 

 

四、远程仓库

关联远程仓库:

git remote add <远程仓库别名> git@github.com:<git链接后缀>    // 如:git@github.com:future196/test.git

列出所有关联的远程仓库:

git remote     // 或 git remote show

列出所有关联的远程仓库(更加详细):

git remote -v

查看某个远程仓库的信息:

git remote show <远程仓库别名>

提交到远程服务器:

git push <远程仓库别名>  <提交分支> 

克隆仓库(git协议):

git clone git@github.com:<git链接后缀>    // 如:git@github.com:future196/test.git

克隆仓库(https协议):

git clone https://github.com/<git链接后缀>     // 如:https://github.com/future196/test.git

取回远程仓库的全部更新:

git fetch <远程仓库别名>

取回指定远程仓库分支的更新:

git fetch <远程仓库别名> <分支名称>

查看刚刚取回的远程更新(取回远程更新后会返回数据在FETCH_HEAD):

git log -p FETCH_HEAD

合并刚刚取回的远程更新:

git merge FETCH_HEAD

取回并立即合并本地仓库:

git pull <远程仓库别名>

取回指定远程仓库分支的更新并立即合并:

git fetch <远程仓库别名> <远程分支>:<本地分支>

取回远程仓库有而本地没有的分支,并且跟踪关联(会自动给本地创建该分支)

git checkout --track <远程仓库别名>/<远程分支名>        // git checkout --track origin/dev

给远程仓库创建一个新的分支

git push --set-upstream <远程仓库别名> <远程分支名>

如果同一个远程仓库,在本地创建了两个仓库,分别提交历史不一样时会拒绝pull取回合并,可使用一下方式允许:

git pull origin master --allow-unrelated-histories

移除一个已经关联的远程仓库

git remote rm <远程仓库名>


五、分支管理

创建分支:

git branch <新建分支名称>

切换分支:

git checkout <分支名称>

创建并切换分支(一气呵成):

git checkout -b <分支名称>

合并分支(合并指定分支到当前分支):

git merge <分支名称>

默认情况下,git是使用快速合并(Fast fordword)的方式,这种方式在删除分支后是不留痕迹的,没有记录的,我们可以通过禁用快速合并模式,删除分支后仍然可以看到记录,禁用方式:--no-ff:

git merge --no-ff -m "merge with no-ff" <分支名称>

新版本git支持新的切换分支方式(更加的让人容易理解):

切换分支:

git switch <分支名称>

创建并切换分支(一气呵成):

git -c switch <分支名称>

删除分支:

git branch -d <分支名称>

强制删除分支(默认情况没有合并的分支是不允许删除的,因此需要使用强制删除):

git branch -D <分支名称>

删除远程分支:

git push <远程仓库别名> -d <分支名称>

删除本地与远程分支的关联:

git push -d  -r <分支名称>

列出本地分支(带星号的是当前分支):

git branch

列出远程分支:

git branch  -r

列出本地以及远程分支:

git branch  -a

 

 

 

六、stash功能(存档):

说明:可存储当前工程(类似游戏存档),存档后当前修改被封存,恢复最近一次版本(未修改时)

存储当前分支的工程(可多次存档):

git stash

查看存档列表:

git stash list

恢复存档(方式一):

git stash apply stash@{0}    // 指定恢复名称为stash@{0}的存档

恢复存档(方式二):

git stash pop stash@{0}   // 指定恢复名称为stash@{0}的存档

方式一和方式二的区别:方式一恢复存档后,存档不会删除,方式二恢复存档后存档自动删除

删除存档:

git stash drop stash@{0}       // 指定删除名称为stash@{0}的存档

 

七、重复提交

有时我们会需要对以往代码进行修理bug,我们会在多个分支中的其中一个分支上进行修理,修改后提交修改,但是我们多个分支上都需要修理同一个问题,怎么办呢,每一个分支都同样的去修理一遍,不太科学吧。

我们可以使用以下方式给其他分支同样的提交一次修改:

git cherry-pick <版本号>

 

八、tag标签管理:

添加标签(可多次添加,多次添加的标签不会覆盖,并且会用逗号额隔开多个标签):

git tag <标签名称>

给指定的版本添加标签(不指定版本号默认最新版本):

git tag <标签内容> <版本号>

给标签添加说明:

git tag <标签名称> -m <说明内容>    或    git tag -a <标签名称> -m <说明内容>

列出所有标签(标签顺序不是按时间排序的,而是按字母排序的):

git tag

通过标签查看提交(commit)的信息:

git show <标签名称>

删除标签:

git tag -d <标签名称>

推送标签到远程:

git push <远程仓库别名> <标签名称>

推送所有未推送的标签到远程:

git push <远程仓库别名> --tags

删除远程仓库的标签(需要先删除本地标签):

git push github :refs/tags/<标签名称>




九、忽略提交:

说明:文件中声明的文件或目录将不会被提交提示。

仓库根目录新建文件:.gitignore

声明例子如下:

# 声明文件夹内的所有文件忽略
test/

#声明忽略文件
test.py

#声明后缀为 .txt 的文件被忽略
*.txt

 

 

十、配置别名

给git默认命令修改为别名,如:

把status换成st:

git config --global alias.st status

命令行输入git st 等于原来的git status

修改的别名可在  .git/config文件中查看

 

 

十一、常见的报错问题

报错1

fatal: refusing to merge unrelated histories

原因:合并两个不相关的库报错如下:

解决方案:那么可以强行合并:尾部加上 --allow-unrelated-histories

git pull github master --allow-unrelated-histories

------------------------------------分割线----------------------------------------

 

 

报错2

 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:future196/test.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

原因:远程仓库存在本地仓库没有的资源

解决方案:拉取远程仓库的最新更新进行本地整合

------------------------------------分割线----------------------------------------

 

报错3

git@github.com: Permission denied (publickey). Could not read from remote repository.

原因:

  • 客户端与服务端未生成 ssh key
  • 客户端与服务端的ssh key不匹配

解决方案:

生成ssh key,并且在git账户设置上配置。

1、生成ssh key:

ssh-keygen -t rsa -C  <你的邮箱>

生成后在C:\Users\用户名\.ssh下可以看到如下三个文件:

2、打开id_rsa.pub复制内容
3、在github账号下设置
    1>.进入github账号,
    2>.在settings页面,找到SSH and GPG keys
    3>.点击SSH keys 新建SSH keys
    4>.填写title(自定义名称),
    5>.将id_rsa.pub里的内容复制到Key中
    6>.点击Add SSH Key,完成
4、测试ssh连接是否成功(出现success):

ssh -T git@github.com

结果如下为连接成功:

Hi future196! You've successfully authenticated, but GitHub does not provide shell access.

 

 


 

注:如有不对,欢迎指出!
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值