| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> 版本控制系统git -> 正文阅读 |
|
[开发工具]版本控制系统git |
标题git相关及git 标题hub相关概念注意所有的版本控制系统,只能跟踪文本文件的改动 首先用git init 来在当前文件夹创建git的数据库,记录版本相关的东西 将整个git分为4个仓库,在数据同步后可以理解为四个相同的文件夹: 工作区:主机上看见的文件夹 暂存区:提交一个版本是个严肃的事,先放暂存区,确认了再提交到更上层 git本地仓库:也就是打游戏的各个存档 git远程仓库:远程版git本地仓库,为了方便联网和多人操作 而多一个分支,表明多了一份git本地仓库,不会影响工作区和暂存区。举个例子:在当前分支工作区有未到暂存区的文件a,暂存区有未到git本地仓库的文件b,新建分支并切换到新分支,用git status查看与在老分支结果一样 一些初始操作: git init //在当前文件夹建设git数据库,之后对当前文件夹及其子文件夹提交到比工作区更上层的仓库后,再变化工作区相关文件,就能够知道其变化 git push -u origin master //在远程仓库创建master分支,并将当前分支git本地仓库上传上去 查看前三个仓库间的未提交状况:git status pull操作 将远程指定分支拉取到本地指定分支上 git pull origin {远程分支名}[:{本地分支名},如果不要就是拉取到本地当前分支] 将与本地当前分支同名的远程分支 拉取到 本地当前分支上(需先关联远程分支,方法见文章末尾) git pull git pull在初次拉取可能会让确认rsa秘钥的信任,如果要写入shell脚本里跳过手工确认,则需要如此写: GIT_SSH_COMMAND=“ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no” git pull push操作 1、将指定分支推送到远程指定分支 git push origin {本地分支名}:{远程分支名} 2、将指定本地分支推送到同名远程分支 git push origin {本地分支名} 3、将本地当前分支 推送到 与远程同名分支上(需先关联远程分支,方法见文章末尾) git push 同样的,推荐使用第2种方式,git push origin <远程同名分支名> cat .git/config看到本地与远程分支的关联关系 仓库间之间和仓库内部版本的回滚 将git本地仓库的某次提交(commit)做回滚:git reset 仅将该改动回滚到git本地仓库(保留工作区和暂存区):git reset --soft {commit id} 将该改动回滚到git本地仓库和暂存区(保留工作区):git reset {commit id} git reset {commit id} {file_name} 将指定版本的指定文件回滚到暂存区(保留工作区和本地仓库) 将该改动回滚到git本地仓库、暂存区、工作区:git reset --hard {commit id} 在回退后再查看git log发现退回来后的已看不到先进版本,好比从21世纪坐时光机来到了19世纪,想再回去已经回不去了 git reflog能够解决这个问题,显示所有的版本 将暂存区回滚/覆盖到工作区: git checkout – {文件名,用.表示所有。注意文件名前有空格} 清除当前目录下所有没add的修改:git clean -df [文件] 如果不加路径,则是所有未add文件都被清除 git放弃修改,强制覆盖本地代码 1)git fetch --all 2)git reset --hard origin/master 3)git pull git clean去除未追踪的文件 1)git clean -nxdf(查看要删除的文件及目录,确认无误后再使用下面的命令进行删除) 2)git clean -xdf 可以配合git checkout .清除所有改动 回滚云端仓库 撤销某次commit:git revert {参数,详见下方} 思想是新增一个commit,改动是源commit的反向改动
revert针对两类commit分开讨论:普通commit和merge commit 普通commit的撤销:git revert {commitId} merge commit的撤销:git revert {commitId} -m {1或2} 如何查看git status的提示 『Changes to be committed』change需要提交的,也就是改变记录存在暂存区中的 『Changes not staged for commit』更改没有步入(staged)提交(准备)的,也就是改变记录存在工作区的stage形容了从工作区步入暂存区 git clone git@server-name:path/repo-name.git克隆到本地,会将所有文件保存在仓库名文件夹中,也就是不用自己创建一个文件夹在clone,在主目录clone就行了。这种clone会把git数据库克隆过来,所以会让本地有所有远程分支 在使用git提交代码的时,git commit -m “内容” 如果内容编写错误:使用git commit --amend 对上次提交的内容进行修改 如果需要用编辑器进行多行编辑commit message:git commit -a 分支相关 分支的作用:1)多人同时操作同一仓库,为了防止混乱,要让每个人有自己的git本地仓库,而多一个分支就多一个git本地仓库。 2)当有一个新需求需要更改代码,而更改过程中可能要回到没改变之前的样子用于调试修复其他功能模块。这时候可以将新功能commit到新分支,再切换回来修复其他功能模块。当新需求完成后在master分支merge该分支,处理冲突并commit就行了。这时在master分支只会多出一个merge的log版本。 如果在XXX分支中进行了改变并commit,切回主分支,不做任何改动就merge,虽然两者内容冲突,但时间线上XXX更新,所以会将XXX的改变改过来,也就是master指针指向XXX 如果在XXX改了后切到master分支又改东西,即使两者都是添加新东西,在merge时,也会产生冲突,因为产生了两个时间线 创建分支git branch {新分支名} 新分支复刻当前分支,并且HEAD指针,也就是当前工作区指向的分支仍为原来分支 切换分支git checkout {分支名} 创建并切入新分支git checkout -b {分支名} 创建分支并与远程分支关联git checkout -b {新建分支} origin/{远程分支} 这时新建分支内容就是关联分支内容 ? 新建分支并与当前分支某个commit关联git checkout -b {新分支名} {commit_id} 已创建分支关联远程分支:git branch --set-upstream-to=origin/{分支名} {分支名} 删除分支git branch -d {要删分支} 查看所以分支git branch -a 不加- a为显示本地分支 添加远程分支:git push origin {本地分支}:{远程分支} 删除远程分支:git push origin {空格}:{远程分支} or git push origin --delete {远程分支} 在当前分支合并(并入)指定分支:git merge {指定分支名} 如果有冲突需要解决冲突再add,commit。若无冲突会自动commit 将另一分支某次提交合并到本分支:git cherry-pick {commitHash},注意这只会合并这次提交的相关改变,如某个值和本分支不一样,但是并非这次提交才不一样,合并不会让本分支冲突。 可以用git log --graph看到分支合并图 跨分支拷贝合并指定文件 复制目标支合文件到当前分支:git checkout {文件所在分支} – {文件名} git diff [多个参数] git diff相关 ? 概念:git diff a b意味着以a为基准,相较于a来说,b增加了啥,减少了啥 ? git diff b等效于git diff b {当前状态} ? 只显示不同文件名:–name-only ? 比较工作区与暂存区区别:git diff ? 比较本暂存区和本地仓库区别:git diff --cached ? 比较俩commit区别:git diff {第1个commit的sha值} {第2个commit的sha值} ? 比较本地git仓库和远端区别:git diff origin ? 解决git diff中文文件名乱码问题: $ git config --global core.quotepath false # 显示 status 编码 -----其他----- git config --global --unset https.https://github.com.proxy #设置git代理 常规:git stash push -m “my_stash” 将包括未追踪文件一同暂存进栈:git stash push -u To apply a stash and remove it from the stash stack, type:git stash pop stash@{n} To apply a stash and keep it in the stash stack, type:git stash apply stash@{n} 删除:git stash drop stash@{1} 如果git stash push后不小心drop掉了,恢复方法: git fsck --unreachable 尽量看commit的sha 正在新分支写feature发现主线有bug: 1)git stash push保存;2)切换到主线并新建分支;3)修复bug并commit;4)在主线和新分支分别git cherry-pick {commit},如果没有冲突自动commit了;5)git stash apply恢复写到一半的feature;6)删除bug分支 push后发现需要修改另外的一个文件a: 1)废弃掉这次push;2)修改文件a;3)git add a;4)git commit ----amend;(如果遇到编辑器是nano,则git config --global core.editor “vim”) git .gitignore相关 对于在.gitignore文件中新增项,分为2类:1)对于之前从未trace的文件,直接修改.gitignore,就会生效,然后add .gitignore文件并提交;2)对于已经trace的文件(即已经git add的文件),需要1)修改.gitignore文件;2)git rm -rf --cached . 3)git add . 4)git commit 之后该文件的更改忽略才会生效 忽略当前git仓库下某些文件夹:在git仓库根目录的.gitignore文件写入这些文件夹名字,注意是以git仓库当前.gitignore目录作为基础目录的相对路径,最好不要带./,如当前文件夹下tmp_file就直接写入.gitignore中为tmp_file 修改当前仓库用户和邮箱: vim .git/config 修改为形如: [user] 解决工作区相对暂存区有更改情况下git stash apply失败问题: 1)git add -u . 2)git stash apply s 3)git reset 更改本地分支名:git branch -m oldName newName 更改某次提交的message:1) git rebase -i {该次提交之前的一次提交} 2)在该提交前改pick为r并保存退出 3)自动跳到另一个vim,更改message并保存退出 融合几次相连commit:1) git rebase -i {其中最旧提交之前的一次提交} 2)在最旧前改pick为r,其他都改pick为s,保存退出 3)自动跳到另一个vim,更改message并保存退出 将不关联且有提交的远程代码库关联本地代码库并做合并&push 1)关联远程代码库:git remote set-url --add origin ssh:XXX 检查是否添加成功:cat .git/config,查看[remote “origin”]项 2)拉取远程代码库:git pull --allow-unrelated-histories 对于冲突部分做合并&commit 3)git push |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/19 2:28:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |