Git & Github Guide

1 篇文章 2 订阅

概念

RUNOOB Git
Github简明教程
index及其文件状态
三个概念
1.工作区(work directory):就是你在电脑里能看到的目录
2.暂存区(index/stage):一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)
3.版本库(HEAD):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库
Git文件状态
1.对于新创建的一个文件,其状态为untracked
2.通过git add …命令,可以将该新建文件的状态转换为staged,这个过程就是将新建文件加入到Index中
3.通过git commit命令,可以将处于staged状态的文件提交到本地库的HEAD

在这里插入图片描述

  • 删除:
  1. git restore --staged <file> 命令或git reset HEAD <file> 命令, 只删除staged区文件
  2. git rm --cached <file> 命令,会直接从暂存区STAGED和HEAD区删除文件,工作区则不做出改变。
  3. git rm -rf <file> 会从 命令,工作区, STAGED 和 HEAD同时删除
  • 替换:
  1. 当执行 git checkout . 或者 git checkout -- <file> 命令时,会用暂存区或者HEAD区 的全部或指定的文件者替换工作区的文件, 优先使用staged区,如果staged没有则使用HEAD区,相当于下面的操作。
  2. 当执行 git checkout HEAD . " 或者 git checkout HEAD <file> 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件, 当然也可以用HEAD^ 或者HEAD^^来选择版本
  3. 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

1. 安装及配置

安装:

brew install git

配置:

git config --global user.name '<name>'
git config --global user.email '<email>'	

git config --global core.editor vim		//文本分析工具
git config --global merge.tool vimdiff	//差异分析工具

//查看配置信息 2种方式
git config --list
cat ~/.gitconfig

2. Git创建仓库

//cd 到工作目录
git init
//执行改命令后会在当前目录生成一个 .git 目录
git init respo
//不需要cd,直接指定目录。初始化后,会在 repo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录。

3. Git基本操作

//step1. 在工作目录work directory中插入文件
touch <file name>
添加到HEAD缓存区
//step2. 将wd中文件add到index缓存中
git add <file name>
git add .  //添加当前文件下所有文件
查看状态
//查看状态   [-s]  short
git status -s 
添加入库
//step3. 将index提交到respository  [-m] 添加备注
git commit -m '备注‘
//-a 跳过git add这一步,直接提交
git commit -a
git commit -am ’修改后提交‘

// 修改备注信息 或者 新增修改文件
git commit --ament

版本重命名或移动
//移动或重命名
git mv <file name> <new name>
//删除文件  [-f] fore   [-r] recusive
git rm <file name>			//移除wd
git rm -f <file name>		//移除wd和index
git rm --CACHED <file name>	//移除index
版本回退
//版本回退 method1
git reset --hard HEAD^

//版本回退 method2
git log				//查找需要回退版本的id
git reset --hard [版本id]
git reset --[hard | soft | mix]  [版本id]

//工作区版本回退
git checkout -- filename
git checkout .

HEAD为当前版本id
HEAD^ 为上一版本id
HEAD^^为上上一 版本id
HEAD~10为前10个版本id
–hard 同时回滚 仓库, 暂存区INDEX, 工作区
–mix 只回滚 仓库 , 暂存区
–soft 只回滚 仓库,
git checkout . 只回滚 if(暂存区){暂存区} else{工作区}

版本回退 参考

版本stash 栈入/栈出

将A仓库下的内容使用stash压入栈中,在B仓库使用stash pop栈出

git stash

git stash pop
分支合并 (变基)

git rebase

git log --graph --pretty=oneline --abbrev-commit
git rebase

4. Git 分支管理

//创建分支
git branch <branch name>
//删除分支
git branch -d <branch name>  // -D 强删除
//列出分支
git branch
git branch -a 显示全部branch, 包括remote branch

//切换 本地分支 与 [remote分支](https://blog.csdn.net/u012302552/article/details/80680497)
git checkout <branch name>
//切换并新建
git checkout -b <branch name>

//合并
git merge <branch name>

5. 查看log及打标签

//查看提交历史
git log
git log --oneline	//一行查看
		--graph		//图形查看分支
		--reserve	//反向
		--
//选择查找, 如
git log —author=alex


//查看标签
git tag
//指定标签信息命令
git tag -a <tagname> -m "runoob.com标签"
git tag -a v1,0 <编号>

6. 添加远程Github

先创建一个本地仓库 (以下方法通用适用于码云)

//设置ssh

ssh-keygen -t rsa -C "youremail@example.com"

解释 -t: type -c: comment

会在该目录下生成.ssh文件夹,
打开id_rsa.pub,复制里面的key,然后登陆你的Github,添加SSH KEY
在这里插入图片描述
在这里插入图片描述
添加/删除远程仓库:

//验证
ssh	-T git@github.com
//添加远程仓库 可以添加多个 $ git remote add origin2 ...
git remote add origin git@github.com:yourName/yourRepo.git
git remote add origin2 git@github.com:yourName/yourRepo.git
//删除远程仓库
git remote rm origin2
//查看当前远程仓库
git remote -v

//git clone <url>  换成alias无效
码云中的push 操作略有不同,以下可以作为对比
连接云端仓库,将本地仓库代码提交到云端仓库
连接云端仓库  ==>git remote add origin https://gitee.com/xxx/xxx.git
为解决本地与云端版本冲突,加上-f参数,push文件
git push --set-upstream origin master -f
之后会提示输入云端仓库的用户名,密码,验证成功开始上传并完成,实测码云可通过

不加f会提示错误:
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://gitee.com/xxx/xxx.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

7. 其他Github 常用操作

// git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin dev:localdev
git pull origin master		// 默认远程分支名和本地分支名同名, 都为master

7.1 git pull

// git pull = git fetch + git merge FETCH_HEAD
// git pull --rebase = git fetch + git rebase FETCH_HEAD
merge 和 rebase

由如下情况:

       D---E test
      /
 A---B---C---F--- master

在 master 上执行 git merge test:
merge操作会生成一个新的节点,之前的提交分开显示

       D--------E
      /          \
 A---B---C---F----G---   test, master

在 master 上执行 git rebase test:
rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交

A---B---D---E---C‘---F‘---   test, master
merge conflict

在拉取远程代码时, 发现与本地有冲突, 并且 error: Failed to merge in the changes. 失败, 需要执行下面 3 步:

  1. 手动合并代码, 选择 Current Change 或者 Incoming Change
  2. git add xxx 添加合并的代码到 cached 中
  3. git rebase --continue 继续拉取

7.2 git push

//git push [alias] [branch]   
//将本地master分支推送成为 =>[alias]/origin远程仓库上的master分支,
// 由于本地master 和 远程端 master同名,可以不写
git push origin master
// 推送本地localdev分支到origin上的dev分支
git push origin localdev:dev
// 推送空到origin的dev分支,即删除远程分支
git push origin :dev
//相当于
git push origin --delete dev


//更新被拒绝,强行推送
git push -u origin +master
//码云中强行推送操作
//git push origin master -f

//远端服务器上的仓库
git clone <url> filename
git clone <url>  //默认当前文件夹 
//git clone username@host:/path /repository

7.3 git revert

// 远程版本回退
git revert 节点号
提取远程仓库:

假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行 git fetch [alias] 告诉 Git 去获取它有你没有的数据,然后你可以执行 git merge [alias]/[branch]以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。
brew update 时就时用到了这个

//从远程仓库下载新分支与数据
git fetch origin master
//从远端仓库提取数据并尝试合并到当前分支
git merge origin master
//跟新本地仓库,以在你的工作目录中 获取(fetch) 并 合并(merge) 远端的改动
git pull origin master

在这两种情况下,git 都会尝试去自动合并改动。遗憾的是,这可能并非每次都成功,并可能出现冲突(conflicts)。
这时候就需要你修改这些文件来手动合并这些冲突(conflicts)。改完之后,你需要执行如下命令以将它们标记为合并成功: git add
在合并改动之前,你可以使用如下命令预览差异: git diff <source_branch>
<target_branch>

7.4 从repository上删除文件

现在本地仓库删除, 再将本地仓库 push 到 remote 仓库, 进行删除更新

//将远端仓库到本地
git pull origin master
//删除不需要的文件
git rm -r --cached path/file
// 或者 git rm --staged path/file  // Mac上操作
//提交到HEAD中
git commit -m 'delete file1'
//将本地的master分支推送到origin主机
git push origin master
//-u 指定origin作为默认主机,之后直接git push
git push -u origin master

8. VScode 配置remote 远程开发环境 (无密码登陆)

8.1 配置ssh

生成ssh, 并拷贝生成的 id_rsa.pub 到服务器上的 .ssh 目录夹下

8.2 设置 authorized_keys

cat id_rsa.pub >> authorized_keys
将 cat id_rsa.pub 重定位追加到 authorized_keys 中, 或者直接将密钥拷贝追加到 authorized_keys 中

ssh-copy-id 工具可以直接实现上述操作, 但发现window中并不能执行该命令

8.3 VScode 上下载 Remote 插件, 并配置

Host ServerName
  HostName 172.29.169.xxx
  User username_in_server
  IdentityFile C:\Users\xxx\.ssh\id_rsa

完成

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值