学习笔记2:git 基本知识和使用技巧

总体流程

官方参考文档
三个状态:是否追踪(缓存区),是否暂存(暂存区),是否提交commit

  • 配置并初始化一个仓库(repository)、开始或停止跟踪(track)文件、暂存(stage)或提交(commit)更改。
  • 如何向你的远程仓库推送(push)以及如何从你的远程仓库拉取(pull)文件。

step1: git init/clone 创建新仓库
step2: 添加新文件xxx.md --> 文件被放到"Untracked files"–> git add xxx.md 将新文件添加追踪,放到暂存区"Changes to be committed" ;
修改文件xxx.md --> 文件被放到"Changes not staged for commit" --> git add xxx.md 将新文件的修改暂存,放到暂存区 “Changes to be committed”
step 3: git commit -m "XXX" 提交更新,也可以跳过step2,git commit -a(前提是文件都被追踪了)

本地操作

获取git仓库 git init/clone

通常有两种获取 Git 项目仓库的方式:

  1. 将尚未进行版本控制的本地目录转换为 Git 仓库;
  2. 从其它服务器 克隆 一个已存在的 Git 仓库。

方式一:在已存在目录中初始化仓库,先cd到该目录cd /c/Users/HP/mydir,再git init,此时完成了仓库的初始化。
方式二:git clone https://github.com/libgit2/libgit2 XXX,该命令会在当前目录下创建一个名为 XXX 的目录(如果省略XXX,则会默认命名为“libgit2”),并在这个目录下初始化一个 .git 文件夹。
clone的链接是https协议:
在这里插入图片描述
使用https协议,每次pull, push都会提示要输入密码,使用git协议,然后使用ssh密钥,这样免去每次都输密码的麻烦(详见服务器端搭建git):
在这里插入图片描述

检查文件状态 git status / git status -s

追踪新文件+暂存已修改的文件 git add

可以理解为将文件放到暂存区(stage),会出现在“Changes to be committed:”里。

  1. 新创建的文件,通过该命令添加跟踪,将文件加到stage暂存区
  2. 更改已被跟踪的文件,通过该命令暂存更新,将文件加到stage暂存区
    暂存区的文件在下次commit库会一并提交到仓库。
    一次性提交多个更改的文件 git add .

提交文件 git commit

git commit -m 'change balabala'

忽略文件 cat .gitignore

在这里插入图片描述
忽略所有以 .o 或 .a 结尾的文件。
忽略所有名字以波浪符(~)结尾的文件。

查看已暂存和未暂存的修改 git diff

git diff 本身只显示尚未暂存的改动,即修改后还没有git add的操作
git diff -staged 显示已暂存,但是没有提交的操作

提交更新 git commit / git commit -m “XXX”

提交时记录的是放在暂存区域的快照!!
跳过暂存区,提交所有已跟踪的文件 git commit -a -m 'added new benchmarks'

移除文件 git rm

文件会出现在未暂存区域“Changes not staged for commit”(此时的移除相当于修改操作):

mv project.md

文件会出现在“Changes to be committed”:

git rm project.md

移动文件 git mv

也可以用来重命名

查看提交历史 git log

只显示最近的两次提交记录 git log -p -2

还原项目与撤销操作

  1. 当文件被别人修改,但是还没有被git add时,出现在“changes notstaged for commit”:git checkout -- myproject.md;如果已经被git add,可以用git reset HEAD myproject.md来取消暂存,然后再用上面的命令还原文件
  2. git reset --hard HEAD^回退到上次commit的版本
  3. git commit --amend 这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令), 那么快照会保持不变,而你所修改的只是提交信息。
    例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:
git commit -m 'initial commit'
git add forgotten_file
git commit --amend

举个例子
git log 查看历史版本号
git checkout 版本号,切换回原版本,不建议修改历史版本
要修改,应该用分支 git checkout -b test
回到原来的主分支 git checkout master
分支合并 git merge test
分支删除git branch -d test

远程仓库

添加远程仓库

  1. 手动添加远程仓库 git remote add <shortname> <url>,之后shortname可以替代这个URL
  2. 自动添加远程仓库:如果使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写(否则以"shortname"为简写)。 所以,git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作。
    必须注意 git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。如果你的当前分支设置了跟踪远程分支, 那么可以用 git pull 命令来自动抓取后合并该远程分支到当前分支。默认情况下,git clone 命令会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或其它名字的默认分支)。
    另外
    添加远程仓库时 git remote add 仓库名字 仓库url
    不要直接pull,切换一个分支,fetch下来,再merge

分支基本操作:

分支创建git branch test,但不会切换到新分支,此时HEAD指针指向当前所在的本地分支。
分支切换git checkout test
创建并切换到分支(代替上面两条)git checkout -b test
合并test分支到当前分支git merge test
分支删除git branch -d test

请牢记:当你切换分支的时候,Git 会重置你的工作目录(可以cd进去查看哦),使其看起来像回到了你在那个分支上最后一次提交的样子。 Git 会自动添加、删除、修改文件以确保此时你的工作目录和这个分支最后一次提交时的样子一模一样。

举个例子:
初始化本地仓库git init
创建并切换到新分支git checkout -b test
在新分支里修改文件vim 1.txt
在新分支里提交修改git commit -a -m "修改1.txt"
切换回master分支git checkout master
将test分支合并到主分支git merge test
删除test分支git branch -d test

再举个例子(分支合并冲突)

  1. 取消本次合并git merge --abort
  2. 解决冲突:
    查看冲突情况git status
    然后将这些有冲突的文件手动修改,之后再提交即可

主仓库作为服务器

在github上新建一个repository,命名格式为**“linpupu.github.io”**(linpupu为用户名),然后可以再浏览器打开这个网址

本地仓库推送到远程仓库

(若本地没有仓库,则先执行这一步)新建本地仓库:

git init
git add test.md
git commit -m "first commit"

链接远端仓库(此处命名为origin),再向远端仓库push文件:

git remote add origin https://xxxx/xx.git
git push -u origin master

备注:第一次push时应该加上"-u origin master",否则会提示如下:
在这里插入图片描述
复制提示的代码git push --set-upstream origin master或者 git push -u origin master(-u是–set-upstream的缩写),这里的
origin
就是前面的远端仓库的别名,master就是本地仓库当前在master分支,下一次推送只需使用git push。如果提交成功,系统会提示在远程仓库也生成了一个master分支对应当前本地的master分支。另外:

  1. 如果远端仓库链接是https形式,则需要手动输入账号密码
  2. 如果远端仓库链接是ssh形式,则直接push就可以成功
    需要先生成本地公钥,将他配置到仓库中

还举个例子(远程仓库):
git checkout -b dev 新建并跳转到分支dev
git push -u origin dev 将dev分支推送到远程(需要拥有远程仓库权限)
git checkout -b master 切换回到主分支
git merge dev 将dev分支合并到主分支
git branch -d dev 删除dev分支(被合并的分支记得删除)

在远程仓库新建远程分支

  1. git push --all会将本地仓库所有分支全部推送上去
  2. 首先切换到本地仓库的新分支test,然后git push origin test
裸仓库

关于git 裸仓库的意义
克隆一个裸仓库作为一个远程分支,用来提交代码: git clone --bare repo.git
将别人的.git隐藏仓库复制为裸仓库,无项目仓库,只有裸仓库才可以被推送git push,这个裸仓库也可以被git clone后得到项目内容

本地仓库获取远端项目

git pull
git fetch 
git merge

关于git fetch与git pull的区别:
https://blog.csdn.net/weixin_41975655/article/details/82887273
总结:git pull = git fetch + git merge

删除远端分支和迁移仓库

删除远端分支的例子
拉取最新的远程仓库:git pull
查看远端所有分支:git branch -a 假设此时远端仓库有个test分支,可以新建一个本地test分支,将自动追踪这个远端分支git checkout test删除本地test分支后,删除远端仓库test分支:git push origin --delete test`

迁移仓库的例子
在github新建一个rep,切换本地仓库的远程仓库地址,本地仓库内容不变:git remote set-url origin https://.../xxx.git
再把本地仓库内容push到新仓库:git push -all

SSH连接github

基本格式 ssh git@github.com
创造ssh ssh-keygen
公钥 ~/.ssh/id_rsa
私钥 ~/.ssh/id_rsa.pub
需要将公钥放到服务器(如github gitlab等)的SSH Keys中
步骤图:
在这里插入图片描述
请注意
新生成的ssh密钥可能第一次使用会报错,原因见该博客:https://blog.csdn.net/Wbiokr/article/details/73431199

gitlab

Git global setup:
git config --global user.name “linpupu”
git config --global user.email “949664458@qq.com”

Create a new repository:
git clone https://gitlab.com/linpupu/test.git
cd test
touch README.md
git add README.md
git commit -m “add README”
git push -u origin master

Push an existing folder:
cd existing_folder
git init
git remote add origin https://gitlab.com/linpupu/test.git
git add .
git commit -m “Initial commit”
git push -u origin master

Push an existing Git repository:
cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.com/linpupu/test.git
git push -u origin --all
git push -u origin --tags

服务器上的git

  1. 新加一个用户git
  2. 使用 chsh -s 命令修改任一系统用户的 shell(例如改为git-shell)
  3. 用户 git 就只能利用 SSH 连接对 Git 仓库进行推送和拉取操作,而不能登录机器并取得普通 shell。

本节其他的部分,没咋看懂,头秃了QWQ

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值