概述
文章目录
- 概念
- 1. 安装及配置
- 2. Git创建仓库
- 3. Git基本操作
- 添加到HEAD缓存区
- 查看状态
- 添加入库
- 版本重命名或移动
- 版本回退
- 版本stash 栈入/栈出
- 分支合并 (变基)
- 4. Git 分支管理
- 5. 查看log及打标签
- 6. 添加远程Github
- 7. 其他Github 常用操作
- 7.1 git pull
- merge 和 rebase
- merge conflict
- 7.2 git push
- 7.3 git revert
- 提取远程仓库:
- 7.4 从repository上删除文件
- 8. VScode 配置remote 远程开发环境 (无密码登陆)
- 8.1 配置ssh
- 8.2 设置 authorized_keys
- 8.3 VScode 上下载 Remote 插件, 并配置
概念
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
- 删除:
git restore --staged <file>
命令或git reset HEAD <file>
命令, 只删除staged区文件。git rm --cached <file>
命令,会直接从暂存区STAGED和HEAD区删除文件,工作区则不做出改变。git rm -rf <file>
会从 命令,工作区, STAGED 和 HEAD同时删除
- 替换:
- 当执行
git checkout .
或者git checkout -- <file>
命令时,会用暂存区或者HEAD区 的全部或指定的文件者替换工作区的文件, 优先使用staged区,如果staged没有则使用HEAD区,相当于下面的操作。- 当执行
git checkout HEAD .
" 或者git checkout HEAD <file>
命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件, 当然也可以用HEAD^ 或者HEAD^^来选择版本- 当执行
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 步:
- 手动合并代码, 选择 Current Change 或者 Incoming Change
- git add xxx 添加合并的代码到 cached 中
- 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:Usersxxx.sshid_rsa
完成
最后
以上就是无情白猫为你收集整理的Git & Github Guide的全部内容,希望文章能够帮你解决Git & Github Guide所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复