当前位置:   article > 正文

git_note

git_note

Git入门

git学习笔记
Git官网:http://git-scm.com
本文主要是Git教程 | 廖雪峰的学习总结

常用Git命令清单 | 阮一峰
Pro Git
git-cheat-sheet
author: gyc514893758


git简介

什么是git

git 是分布式版本控制系统
对于一个项目,有不同版本,可以记录每次改动,可以有不同分支
方便回退、协作等

分布式版本控制系统

每个人电脑上都是一个完整的版本库,不联网也能工作
方便拉取分支、合并修改

安装git

Windows下载地址
按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

打开“Git Bash”,输入:

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

注意git config中的--global表示此电脑上所有git仓库都使用该配置。你也可以为某个仓库指定不同的用户名和E-mail地址。

使用git config --list命令可以查看所有设置


创建版本库

版本库,也叫仓库,repository
可以理解成一个被Git管理的目录、文件夹。git可以跟踪每个文件的修改删除。

  1. 新建文件夹,创建一个空目录(目录名最好不含中文
  2. 右键Open Git Bash here
  3. 输入指令git init建立仓库
    此时生成一个.git目录(默认隐藏),不要改动
  4. 添加文件
    (1) 在仓库中创建文件
    (2) git add <file>,添加成功没有消息
    (3) git commit -m"<message>",将文件提交到仓库,-m输入本次提交的说明,执行成功会告诉你改动
    add可以添加多个文件,commit一次提交

git commit不带-m参数时,进入vim编辑器。编辑完成,退出时:
Esc键退出编辑模式,然后:

  • 保存并退出:
    输入英文wq ZZ + 回车
  • 不保存退出
    输入英文q! qa! + 回车

版本控制

工作区与暂存区

  • 工作区
    电脑中能看到的目录
  • 版本库
    隐藏目录.git。版本库包括:
    • 暂存区stage、index
    • 自动创建的第一个分支master
    • 指向master的一个指针HEAD

修改文件

指令git status告诉我们当前仓库的状态。

  • Untracked files:表示仍在工作区的文件
  • Changes to be commited:表示在缓存区,还没有提交的文件
  • 如果没有改动,会告诉你nothing

指令git diff <file>会告诉你修改的内容

版本回退

命令git log告诉我们提交的历史记录,按Q键退出查看
git log --pretty=oneline可以简化输出信息)
一长串16进制数字是版本号commit id

在git中,HEAD表示当前版本,HEAD^表示上个版本(上上个HEAD^^,上100个HEAD~100

git reset --hard HEAD^回退到上个版本
git reset --hard <commit id>回退到版本号对应版本(id不用写全,只写前几位可识别就行)
重设,此版本之后的版本消失。此时log中不能查询目前回退到的版本之后的版本。
可以使用git reflog查看每一次命令对应id,以回退到消失的版本

git revert --hard不会丢失版本,它实际上是新的一版使用了以前的内容,本质上不是回滚。而reset是完全退回到之前的版本。

撤销修改

  1. 工作区修改,未添加到暂存区git restore <file>
  2. 修改已添加到暂存区,未提交git restore --staged <file>,再转1
  3. 已提交版本,直接git reset --hard HEAD^回退

删除文件

直接在文件管理器中删除,或者指令rm <file>
此时,工作区和版本库不一致。

如果确实要从版本库删除,就用git rm删除,并且git commit提交。

如果删错了,可以从版本库还原误删文件git checkout --<file>
git checkout其实是用版本库版本替换工作区版本,无论工作区是修改还是删除,都可以“一键还原”。


远程仓库

设置Github

GitHub提供Git仓库托管服务。本地Git仓库与GitHub仓库之间的传输通过SSH加密。

  1. 创建SSH Key
    打开Git Bash,输入ssh-kyygen -t rsa -C"youremail@example.com"。使用自己邮箱,并且一直回车(使用默认值)。成功后,在用户主目录(C:\Users\用户名)里可以找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
  2. 登录GitHub
    打开账户设置,“SSH Keys”,点击"add SSH Key",填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。(Github允许添加多个Key)

添加远程库

创建远程库

在本地创建一个git仓库后,想要在GitHub上创建一个同步的远程仓库。

  1. 登录GitHub,“create a new repo”,填写基础信息,创建仓库。
  2. 在本地仓库运行git remote add origin git@github.com:<user/repo.git>
    此时远程库名字叫origin,默认叫法,也可以改成别的。
  3. git push -u origin master把本地库内容推送到远程库。
    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会关联二者。在以后的推送或者拉取时就可以简化命令git push origin master
SSH警告

当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
  • 1
  • 2
  • 3

这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。

Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
这个警告只会出现一次,后面的操作就不会有任何警告了。

从远程库克隆

先有远程库,从远程库克隆到本地

  1. GitHub上先建好远程库
  2. git clone git@github.com:<user/repo.git> <新建本地仓库名>
    会在当前目录下生成一个子目录仓库(省略后者默认同名)

上述使用的是ssh协议,速度最快。

有时也使用https协议:git remote add origin https://github.com/user/repo.git
比较慢,且每次推送必须输入口令。

删除远程库

运行git remote rm <name>命令。
使用前,建议先用git remote -v查看远程库信息。然后,根据名字删除。比如删除origin:git remote rm origin

此处的“删除”其实是解除了本地和远程的绑定关系,远程的仓库仍存在。

Git分支管理

创建一个属于自己的分支,不影响其他人的工作。可以和之前讲的一样管理。到开发完毕再一次性合并分支。

分支可以理解为当前工作目录的一个副本(平行世界)。
将项目划分成多条线,例如:在开发线(dev)上修改,之后合并到主线(master,main)上,保证主线的稳定性。

创建与合并分支

git branch查看分支,*标明当前分支,附加参数:

  • -r远程库分支列表
  • -a所有分支,remotes开头表示远程分支
  • -v查看一个分支的最后一次提交
  • --merged查看已合并到当前分支的分支
  • --no-merged查看所有未合并的分支

git branch <name>创建分支
git switch <name>git checkout <name>转到分支
git switch -c <name>git checkout -b <name>创建并转到分支
切换分支时工作区和暂存区应该是干净的

git merge <name>将分支合并到当前分支
git branch -d <name>删除分支(已合并或者未修改
git branch -D <name>强制删除分支(没有合并过,丢失修改)

git branch -m <old name> <new name>重命名分支

解决冲突

不能自动合并的冲突,需手动解决(此时分支名变化):

<<<<<<<HEAD
<当前更改>
=======
<传入的更改>
>>>>>>><commit id>
  • 1
  • 2
  • 3
  • 4
  • 5

手动编辑更改之后再提交

git log --graph可以查看合并分支图。

bug分支

git stash保存、隐藏当前工作状态,此时用git status查看工作树是干净的。
git stash list查看保存状态。

恢复工作状态(两种方法):

  • git stash pop恢复并删除stash
    1. git stash apply恢复stash
    2. git stash drop删除stash

可以多次stash,恢复指定的stash:
git apply stash@{0}

保存stash,创建bug分支、修改、提交、合并,删除bug分支,恢复stash。

此时修改了master分支的bug,该bug在dev分支上也存在,只复制这次提交:
git cherry-pick <commit id>
这个操作仍会生成一个commit id,虽然提交的内容相同,但本质不是同一次提交

多人协作

从远程仓库克隆时,自动将本地的master分支和远程的master分支对应。远程库默认名称origin

git remote查看远程库信息
git remote -v显示远程库详细信息

git push <remote> <branch>推送分支,将该分支所有本地提交推送到远程库。(需指定本地分支)
masterdev分支应与远程库同步,其他分支视情况而定。

推送分支前,应该先拉取分支(远程库可能比本地更新)。如有冲突,先解决冲突。
git pull

git branch --set-upstream <branch-name> origin/<branch-name>
  • 1

建立本地分支与远程分支的关联。

git pull <remote> <remote branch>:<branch>
拉取远程分支,如果省略本地分支,默认同名

git push <remote> :<branch>删除远程分支


标签管理

给版本库打一个标签tag,取某个标签的版本。
就像给commit id起个名字加书签。

创建标签

git tag <name>给最新一次提交打标签
git tag <name> <commit id>给历史某次提交打标签
git tag -a <tagname> -m'message' 可以指定标签信息
git tag查看所有标签(按字母排序,不是时间)
git show <tagname>查看某个标签信息

操作标签

标签存储在本地,不会自动推送到远程。如果要推送到远程:

  • git push origin <tagname>某个标签
  • git push origin --tags所有标签

删除标签:

  • 标签只在本地:
    git tag -d <tagname>删除本地标签
  • 标签推送到远程:
    1. git tag -d <tagname>删除本地标签
    2. git push origin :refs/tags/<tagname>删除远程标签

自定义Git

忽略特殊文件

忽略文件的原则是:

  • 忽略操作系统自动生成的文件,比如缩略图等;
  • 忽略通过另一个文件自动生成的中间文件,比如Java编译产生的.class文件;
  • 忽略带有敏感信息的配置文件,比如存放口令的配置文件。

在工作区根目录创建.gitignore文件,写入要忽略的文件名。
不需要从头写.gitignore文件。所有配置文件可以直接在线浏览:https://github.com/github/gitignore. 组合即可。

如果想添加被忽略的文件:
git add -f <file>强制添加
git check-ignore检查哪条规则忽略了该文件。

.*排除所有.开头的隐藏文件
*.class排除所有.class类型文件
!.gitignore不排除文件

可以通过https://gitignore.itranswarp.com 在线生成.gitignore文件。

配置别名

$ git config --global alias.co checkout
$ git config --global alias.cm commit
$ git config --global alias.br branch
$ git config --global alias.unstage 'reset HEAD'
$ git config --global alias.last 'log -1'
  • 1
  • 2
  • 3
  • 4
  • 5

代替的命令是一个单词可以直接写,有空格加引号,有引号则单双引号交替。

每个仓库的配置文件在.git/config中,当前用户的配置文件在用户主目录下隐藏文件.gitconfig中。
别名就在[alias]后面,可以直接修改。

其他

# 适当显示颜色
$ git config --global color.ui true
  • 1
  • 2

搭建Git服务器

https://www.liaoxuefeng.com/wiki/896043488029600/899998870925664

Git的图形界面工具

SourceTree
一个单词可以直接写,有空格加引号,有引号则单双引号交替。

每个仓库的配置文件在.git/config中,当前用户的配置文件在用户主目录下隐藏文件.gitconfig中。
别名就在[alias]后面,可以直接修改。

其他

# 适当显示颜色
$ git config --global color.ui true
  • 1
  • 2

搭建Git服务器

https://www.liaoxuefeng.com/wiki/896043488029600/899998870925664

Git的图形界面工具

SourceTree
https://www.liaoxuefeng.com/wiki/896043488029600/1317161920364578

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/120185
推荐阅读
相关标签
  

闽ICP备14008679号