admin 管理员组文章数量: 887021
2023年12月22日发(作者:鼠标点击超链接样式)
Win10下的Git配置和使用
工作流程与代码
1. 第一步,获取代码
– 如果是已在git远程仓库中的代码,则git clone xxx+git branch -a+git
checkout --track origin/develop+git checkout -b feature-login
(origin/feature-login) ,完成克隆代码并从远程分支develop分支检出本地develop分支,并创建(检出远程)feature分支在本地进行功能的开发。
2. (合作开发)每天开始工作前,要做的是把代码从远程仓库中git pull (--rebase)
3. 开发过程(本地) 上次提交过后,这次又写了一些代码,但是写错了想退回去之前的工作空间状态
git reset [版本号] 是回退本地仓库但工作空间不变。 git reset --hard xxx 回退本地仓库并还原工作空间到 次提交过后状态。 git reset --hard [filename/版本号] git checkout [文件名] 退回到 上次暂存区(add)状态 的工作目录。
开发时想查看git状态和信息
git status git log git reflog git blame filename 查看本文件最后一次修改记录
每天干完活之后
git stash , 隐藏当前工作空间的修改 git stash list , 列出stash 记录 git stash -pop 恢复现场并删除一个stash记录。 git stash apply , 恢复现场,但不删除stash记录 git stash drop , 删除一条stash记录
当功能分支开发完毕之后,需要合并到开发分支上并上传代码,同时删除本地和远程的功能分支
//以下两步的作用是保证你本地的feature-login分支的代码为最新,因为有可能你是和别人合作开发的该功 能,如果你刚更新过或者你是一个人在开发则可以省略此操作 git checkout feature-login //切换到本地feature-login分支 git pull --rebase //拉取最新代码 git checkout develop //切换到本地develop分支 git pull --rebase //拉取最新的远程origin/develop分支代码,因为可能已经有人提交了代码 git merge --no-ff feature-login //从本地feature-login分支合并代码,--no-ff为禁止fast-farward模式 git push //推送到远程分支 //代码已经合并完,可以删除本地特性分支和远程特性分支 git branch -d feature-login //删除本地feature-login特性分支 git branch -r -d origin/feature-login //删除远程origin/feature-login特性分支
阶段性开发完成,可以发布release了
镇帖之宝
得到:
然后添加这两个句话添加到末尾 C:WindowsSystem32driversetc 然后到cmd中刷新DNS缓存:ipconfig /flushdns 收工!!
git-bash使用
1. cat echo等都可以用
2. 选中复制,中键黏贴。
1. 更新ssh密钥,指令:ssh-keygen -t rsa -C "",不输入文件名也行一路回车。然后到。然后在ws下的.ssh目录下有公钥.pub和私钥。进入到github上点开设置-ssh和gpg密钥,用记事本打开.pub然后把内容上传title可以随意。bash中键入ssh -T 测试是否成功验证
几个名词的解释:
1. index(staged暂存):暂存区,将工作区的文件通过git add加入git管理体系中。可以通过git status查询暂存区状态
index
2. repository :仓库。github上的一个项目;
3. Fork:叉子。在别人的github页面,点击fork按钮,将别人的仓库复制一份到自己的仓库,此时我们自己的github就有一个一模一样的仓库,但是URL不同。你可以自行修改项目内容而不会影响原始的库,也可以将自己的修改通过合并请求(a pull request)的方式请求原始库的开发者更新你的修改;
4. Clone:克隆。将github中的仓库克隆到自己电脑本地仓库中;
5. Push:推。将本地仓库推送同步到远程github仓库(需要权限)
6. Pull request:将你github仓库的修改同步到代码原始开发者那(fork过来的那个人)
7. fetch:去取来。也就是说当你fork了别人的项目,你可以pull request合并你的代码到作者代码。同样,作者修改了自己的代码你也可以fetch下来同步到自己的本地仓库。
8. branches:分支。
注:如果你没被作者授权为他一些仓库的合作者,你不能push。只能fork过来然后修改完pull request请求作者合并,作者通过请求后就能合并代码。
图文结合:
图文结合
这里的remote泛指远程库,不一定是自己的或别人的。index为暂存区
基本操作
原理图
通用操作
1. git reflog 查询完整log
2. git status 查看文件的修改情况,提交情况。
3. git blame filename 查看文件的最后修改记录,包括修改者,修改时间,修改内容
4. git reflog 显示每一次操作指令。
本地仓库到自己github:
1. github上创建一个远程仓库。
2. git init , 初始化一个目录为工作区,创建本地仓库。
3. git add ./文件名 , 添加文件到工作空间暂存区。
解释
4. git remote add origin(该为主机名,可以自己命名) url , 本地仓库添加一个远程主机并命名。
5. git push <-u>(设置默认远程分支=写的远程分支) origin(远程主机名) 本地分支名<:远程分支名>(不写为同分支名,如不存在则新建) ,将本地仓库分支推送到远程仓库的分支(需要有权限,如果不是自己的github的仓库,则需要别人授权仓库的contributor权限)。此外url可以有多种格式:用户名/远程仓名.git 、git://开头的靠ssh协议、或:用户名/远程仓名.git。 6.1 git
push , 推送当前分支,只有1个远程跟踪分支或有默认主机时使用。当多个用户共同开发的时候,可能你的提交比你的同伴晚,所以你需要先pull下最新版本,然后在本地合并后继续push。 6.2 git branch --set-upstream-to=origin/dev dev , 继续6.1、pull失败时,可能是本地分支dev没有和远程分支建立连接,不知道你从哪个分支pull到哪个分支。
6. git restore
git restore --staged
获取别人的代码到自己github并本地仓库修改:
1. 在github上fork别人的代码到自己的github上作为仓库。
2. git clone 仓库网址url , 克隆一个一模一样的远程库到本地库。当然不一定要从主机github上克隆。且自动关联主机且默认远程仓库主机名叫origin。使用git clone -o 名字 url 可以修改默认名。
3. 本地到自己github操作见以上。
4. 添加一个远程主机关联(使用原作者url)
5. git fetch origin(远程主机名) master(分支名,不写=所有分支,下同) , 获取原作者一些分支的最新版本。
6. git branch -a(ll) , 查看所有分支。
7. git diff 源分支 目标分支或者git log -p master(本地分支名)..origin(远程主机名)/远程分支名 , 比较本地和一些关联的差别。
8. git merge origin(远程主机名)/远程分支名 , 合并当前本地分支和远程分支。
9. git pull origin(远程主机名) master(远程分支名) :本地分支名 , 相当于
fetch+merge。缺少检查差别的这步。如果远程分支和本地分支一个名字则:本地分支可以省略。
10. git remote -v :查看远程主机名列表
WS未提交当前内容却想进行其他工作事项时。
1. git stash , 隐藏当前工作空间的修改
分支管理
多人协作中,github上存放镜像,其中有master分支是要发布的版本,其余分支是并行的,可以合并到主分支上。各分支是不同开发者从他们的本地仓库分支推上来的。
分支
master branch
一个仓库中可以同时存在多个分支,我们可以基于任何一次提交,新建一个分支,并让之后的提交都沿着新分支流动。
分支流动
HEAD指针,指向当前正在操作的分支的最新的提交点,你所处分支变化了,HEAD就会跟着变化。
.git/HEAD
HEAD
注:分支名指向分支的最新一次提交,HEAD指向当前分支的最新一次提交 ,由于git仓库是使用“链表”的形式管理各个提交的,随意修改链表头的位置,即可回退到其中一个版本上(git reset)。
reset操作
相关指令:
1. git checkout,切换分支、创建并切换分支、等,其实就是移动HEAD的指向。 2.1 git checkout -b name , 创建并切换分支。 2.2 git checkout -b dev
origin/dev , 从远程仓库克隆下来的仓库在本地只有master分支,其他分支需要创建远程分支的本地分支。 2.3 git checkout name , 切换分支。
2. git switch 3.1 git switch -c dev , 也是切换并创建分支,使用switch避免了checkout的两种用途(撤回、切换分支)的混淆
3. git merge name , 合并分支name到当前分支,使用fast forward模式(直接丢弃被合并分支)。 4.1 git merge –no-ff -m “注释” name , 禁用fast
forward合并模式来合并,保留被合并分支。 4.2 如果合并出现冲突,则不会在合并的时候自动提交合并体,而是停下来等用户修改完冲突后提交。可以用git status查看时哪些冲突。冲突的文件中会被类似如下显示文本,手动选择一个然后删去所有文字即可手动合并。
利用分支进行开发的工作流程
分支策略
简单的说就是有一个稳定的master,有一个不稳定的dev,而每个人都有自己的一个独立dev分支取名为自己的名字,然后各自往dev上提交,如果遇到bug了就创建临时分支来debug,有其他的小尝试比如新功能也不要再dev上开发,先额外再创建一个分支在上面开发,在合并到自己的dev上。等dev开发到1.0/2.0版本了,在合并到master上发布。
长期分支
在每次合并新稳定内容到master后,创建一个next或develop分支进行后续的开发。
长期分支开发
特性分支
多个分支同时开发,然后简单的三方合并。
远程分支
你clone下来后,自动生成一个origin的远程主机和分支origin/master。同时本地也生成一个分支叫master,指向同一个提交
远程分支
此后你基于此一直开发,即master一直后移,且别人把新的内容推到远程仓库,但是只要你没和远程仓库交互,这个远程分支就不会移动。
开发过程
通过git fetch指令可以同步远程仓库数据到本地。
fetch之后
推送本地分支
就是push了
分支的衍合
之前的合并是使用三方合并即分支1和分支2及其共同祖节点(也就是分叉点)三者的合并,然后生成1次新的提交。
合并前
合并后
以上是合并的样子,而衍合如下所示。以要进行衍合的分支的最后一次提交为基础生成一系列文件补丁,在基底(衍合目标)最后一次提交上,逐个使用补丁。最后生成一个新的合并。
衍合的结果
如何看懂diff内容
1. git diff , 用于查看staging area 和 working area 的文件差别。
2. git diff refs/remotes/origin/master , 用远程一些分支比较当前工作区
输出格式
例子
表示源文件第1行开始的2行和目标文件第1行开始的4行构成差异小结。然后目标文件3、4行多了2句话。空格开头的白色行是- + 两个文件都有的。- 开头的是源文件有的(已经提交的),+是工作空间中的文件的内容。
配置别名
git的原理
存储结构
blob
git将每个文件存下来。并且通过计算文件的内容SHA-1 哈希值为校验和(40个字节)。如果修改了内容、名字、目录,该值都会变,通过判断校验和是否变了判断
文件是否修改。然后以40个字节的头2个字节为目录名,后38个字节16进制为名字保存文件
tree
tree类似于目录。一个tree可以存储tree和blob对象的记录,每一条记录都含有一个指向blob或子树的SHA-1指针,并附带对象权限、类型、文件名等信息。
对象的存储
如何存储一个blob呢?{blob 文件内容长度0}花括号内容为文件头,后面拼接文件内容行成新内容。然后计算新内容的SHA-1校验和,然后用zlib压缩数据,以SHA-1前2个字节为目录,后38个字节为文件名进行磁盘的写入。所有的git对象都是以这种方式存储的。
综合以上所说:我们知道了Git和所有版本控制软件一样,只能跟踪文本文件(就是代码等)。对于图片、影音,虽然也能进行版本控制,但是只能知道其是否删除和修改,但是修改了哪些内容是不知道的。这类非纯文本(包括word和markdown)是以二进制形式串起来编码的。
参考:
版权声明:本文标题:Win10下的Git配置和使用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1703259518h444475.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论