git_learn

git学习报告

安装git

  • 官网下载git,下载好安装包后选好路径然后一路next就行。

  • 然后在开始菜单栏里找到Git > Git Bash(类似于Linux终端的命令行窗口)

  • 安装完成后,在bash里配置:

    git config --global user.name "sassi"

    git config --global user.email "[email protected]"

  • 此处已配置好,记得一定要配置以上的昵称与邮箱,不然在提交文件到仓库时会提示你去设置昵称跟邮箱

  • 更改起始默认路径(即打开gitbash时显示的路径)

    1. 进入到gitbash的属性窗口,点击菜单栏的快捷模式,删除此界面下目标项的‘–cd-to-home’,然后在起始位置处填要选择的路径。(此方法在bash下键入cd又会回到最初始的路径,最好使用下面一个方法。
    2. 或者在环境变量的用户变量添加一个Home变量,并设成要选择的路径。

创建版本库

版本库又名仓库,英文名repository

  1. 选择一个路径,初始化仓库:

    git init

  2. 用记事本新建一个文件,然后添加到版本库中:

    • 先添加进暂存区: git add readme.txt

    • 在把暂存区的东西添加进仓库: git commit readme.txt -m "add a new file"

  3. 如果只改了工作区的readme.txt,但没有提交到版本库:

    • 查看文件修改状态: git status
    • 查看工作区修改的文件相比于版本库文件改了什么内容:git diff readme.txt

版本回退

  1. 查看文件的历史记录:

    git log (如果嫌太多信息可以使用: git log --pretty=oneline )

  2. 版本回退:

    git reset --hard head^ 等同于 git reset --hard head~1

    或者 git reset --hard head 版本号 (此处的版本号可通过git log 查看)

  3. 查看命令的历史记录:

    git reflog (同样可用来查看版本号,如果版本从最新回退到较旧的,可以通过这个查看最新的版本号)

工作区与暂存区、版本库

在这里插入图片描述

版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。

使用Git提交文件到版本库有两步:

第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。

第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上。

git撤销修改和删除文件

一、撤销修改:

如果工作区文件修改了,但是想撤销,三种方法:

  1. 直接去工作区改回文件
  2. 撤销工作区修改:git restore readme.txt
  3. 丢弃工作区的修改: git checkout -- readme.txt
  • readme.txt自动修改后,还没有放到暂存区,使用 撤销修改就回到和版本库一模一样的状态。
  • 另外一种是readme.txt已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。

二、删除文件:

假设要彻底删除readme.txt:

  1. rm readme.txt
  2. git add readme.txt
  3. git commit readme.txt -m "remove readme.txt"

远程仓库

  1. 先注册github帐号

  2. 创建SSH key

    • bash下输入: ssh-keygen -t rsa -C "[email protected]" 然后enter,输入要选择的路径,或者直接enter默认在工作区文件夹下生成.ssh文件夹,接着设定密码,最后其目录下有id_rsa私钥和id_rsa.pub公钥,私钥不可告诉别人,公钥可以。验证是否成功:ssh -T [email protected]
  • 登陆github网,打开settings中的ssh keys页面,然后添加,把前面公钥文件的内容复制到key内容框,title随便写就行,然后add key

添加远程仓库

  1. 在github上创建一个新仓库并关联本地仓库:

    • 在github上creat repository
    • 复制github上该新建仓库的地址:https://github.com/sassi-7/testgit2 用于下一步
    • 进入到本地仓库(带master分支的),关联本地仓库与远程仓库:git remoter add origin https://github.com/sassi-7/testgit2
    • 把本地master分支推送到github:git push -u origin master (刚开始时加个-u参数把远程master和本地master关联起来,方便后面操作,后期就推送就不需要加该参数)
  2. 删除本地仓库与远程仓库的关联:

    git remote remove origin

克隆远程仓库到本地

  1. girhub上创建一个新仓库并复制地址,下一步会用到
  2. 克隆:git clone https://github.com/sassi-7/testgit

注意

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

创建与合并分支

第一种创建方式:
创建分支

git branch dev # 此处dev为自己命名的分支名

切换分支

git checkout dev

创建并切换分支

git checkout -b dev

第二种创建方式:
创建并切换分支

git switch -c dev

切换分支

git switch dev

合并分支

在dev分支下将内容合并到主分支:git merge master

合并冲突

在当前冲突分支上更改或不更改文件,然后再add、commit掉

在这里插入图片描述

提醒

head指向当前分支,而分支(主分支master、其他自命名分支)指向版本库里(前面commit掉的文件都是提交到版本库里),版本库里的文件可以看成一条线,而分支都是指针。

在这里插入图片描述

在这里插入图片描述

BUG分支

如果在我们工作到一半时,突然出现了bug,但又不能提交当前的工作成果(因为还没进行完毕),因此在这之前可以隐藏工作现场,等处理好bug再来完成工作。

隐藏

git stash 可以同时隐藏工作区的更改和暂存区的更改,注意,不要提交之后才隐藏

git stash list 查看工作现场去哪了

恢复

git stash apply 恢复后stash内容并不删除

git stash drop 删除stash的内容

git stash pop 恢复工作现场的同时删除stash内容

多人协作

  1. 先把远程库克隆下来,但克隆的只有master主分支

  2. 在本地建立新分支与远程仓库的相应分支相连

    git checkout -b dev origin/dev

  3. 多人的话一般往工作分支dev推送待测试项目,master分支一般存放稳定版本的项目,既然大家都会往dev推送项目进度,那就存在谁的更新的问题,如果远程仓库的比你的版本新(不管内容怎样,只要版本号比你的新),那就先拉取到本地仓库,然后处理好冲突问题后再push(推送)

    • 抓取之前需要指定本地分支与远程分支的链接

      git branch --set-upstream dev origin/dev

    • 然后拉取

      git pull

    • 解决冲突(修改或者不修改文件内容)

    • 提交到本地版本库

    • 再push到远程分支

常用命令

撤销暂存区处的修改:

git restore --staged 文件名

查看远程仓库的地址:

git remote -v

查看远程仓库基本信息:

git remote show origin

强制push:

git push -u -f origin master

情景:

在github上创建项目,然后本地git init

然后没有git pull -f --all

然后git add . | git commit -am “init”

导致github上的版本里有readme文件和本地版本冲突

采用强制push会把远程的覆盖掉

心得

  1. 不管你的内容有没有修改,只要提交到版本库或者远程仓库,文件的版本号就会增加,而git就是用来管理这些版本号的,所以当你本地文件与仓库文件内容一样时,它们的版本号不一定一样。
  2. ssh是用来保证git与github的安全连接的,一台机只需一个,而若连接git与gitte,则还需另一个。

猜你喜欢

转载自blog.csdn.net/weixin_44027937/article/details/109262566