赞
踩
GitHub最受欢迎的交互式Git学习教程
- 在线学习地址:https://pcottle.github.io/learnGitBranching/
- 仓库地址:https://github.com/pcottle/learnGitBranching
远程仓库只是你的仓库在另个一台计算机上的拷贝。你可以通过因特网与这台计算机通信 —— 也就是增加或是获取提交记录
- 远程仓库是一个强大的备份。本地仓库也有恢复文件到指定版本的能力, 但所有的信息都是保存在本地的。有了远程仓库以后,即使丢失了本地所有数据, 你仍可以通过远程仓库拿回你丢失的数据
- 远程让代码社交化了! 既然你的项目被托管到别的地方了, 你的朋友可以更容易地为你的项目做贡献(或者拉取最新的变更)
git clone
在本地创建一个远程仓库的拷贝用
git clone
复制下你的仓库
git clone
o/main
的分支, 这种类型的分支就叫远程分支命名规范:
<remote name>/<branch name>
o/main
的分支,那么这个分支就叫 main
,远程仓库的名称就是 o
origin
git checkout o/main; git commit
o/main
也不会更新。这是因为 o/main
只有在远程仓库中相应的分支更新了以后才会更新。在
main
分支上做一次提交;然后检出o/main
,再做一提交。这有助于你理解远程分支的不同,他们的更新只是反映了远程的状态。
git commit
git checkout o/main
git commit
从远程仓库获取数据
- 我们从远程仓库获取数据时, 远程分支也会更新以反映最新的远程仓库。
运行git fetch
,远程最新提交被下载到本地,同时远程分支 o/main
也被更新
o/main
)远程分支反映了远程仓库在你最后一次与它通信时的状态,git fetch
就是你与远程仓库通信的方式了
不能做的事:不会改变你本地仓库的状态。它不会更新你的 main
分支,也不会修改你磁盘上的文件。
用
git fetch
下载所有的提交
git fetch
抓取更新再合并到本地分支
git fetch; git merge o/main
:先下载远程更新,再合并到当前分支git pull
就是 git fetch
和 git merge
的缩写git pull
“假装”你的同事、朋友、合作伙伴更新了远程仓库,有可能是某个特定的分支,或是几个提交记录
引入一个自造命令
git fakeTeamwork
git fakeTeamwork
假装在远程新建一个提交git fakeTeamwork foo 3
假装在远程foo分支新建三个提交克隆一个远程仓库(用
git clone
),再在刚创建的远程仓库中模拟一些修改,然后在你自己的本地分支上做一些提交,再拉取远程仓库的变更。
git clone
git fakeTeamwork 2
git commit
git pull
将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录
git push
不带任何参数时的行为与 Git 的一个名为 push.default
的配置有关。它的默认值取决于你正使用的 Git 的版本,但是在教程中我们使用的是 upstream
。git pull
:把本地提交上传到远程仓库
向远程仓库分享两个提交记录
git commit
git commit
git push
push和pull的困难来自于远程库提交历史的偏离。
假设你周一克隆了一个仓库,然后开始研发某个新功能。到周五时,你新功能开发测试完毕,可以发布了。但是 —— 天啊!你的同事这周写了一堆代码,还改了许多你的功能中使用的 API,这些变动会导致你新开发的功能变得不可用。但是他们已经将那些提交推送到远程仓库了,因此你的工作就变成了基于项目旧版的代码,与远程仓库最新的代码不匹配了。
git push
失效,因为远程仓库有未拉取到本地的提交方法1:
git fetch; git rebase o/main; git push
或 git pull --rebase; git push
方法2:
git fetch; git merge o/main; git push
或git pull; git push
- 克隆你的仓库
- 模拟一次远程提交(fakeTeamwork)
- 完成一次本地提交
- 用 rebase 发布你的工作
git clone
git fakeTeamwork
git commit
git pull --rebase
git push
大型项目中,main(master)分支被锁定保护,需要一些Pull Request流程来合并修改
卡住原因:
远程服务器拒绝直接推送(push)提交到main, 因为策略配置要求 pull requests 来提交更新.
你应该按照流程,新建一个分支, 推送(push)这个分支并申请pull request,但是你忘记并直接提交给了main.现在你卡住并且无法推送你的更新.
解决办法:
git branch feature
git reset HEAD^
git checkout feature
git push
标准答案:
git reset --hard o/master
git checkout -b feature C2
git push origin feature
git push
后接的参数,第一个为远程仓库名(默认为origin),第二个为分支名(默认为当前HEAD指向的)1、git reset --hard
重置stage区和工作目录里的内容,就是你的没有commit的修改会被全部擦掉
2、git reset --soft
reset --soft:用于版本的回退,只进行对commit操作的回退,不影响工作区的文件。
在提交代码的时候,commit之后,然后我又在工作区添加了东西,这时候突然发现,上一次的commit有错误的文件,需要重新修改,但是我添加的东西友不想丢失,而且我想修改上一次的提交,这时候可进行git reset --soft 版本号
3、git reset --mixed
reset 不加参数(mixed):保留工作目录,并清空暂存区
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。