Catelogue
Small Talk
Foreword
大家好,我是Patrick!我决定从现在开始,每天将自己学习的东西发布为博客,不仅是为了未来自己回顾,也为了构建一个OpenSource的Community出一份自己的力量。
Statement of Myself
首先,我个人属于偏学术派,现目前工业上的知识稍微匮乏一些,自己的理论知识比较好,学习能力也很强,需要将自己的knowledge put into use。 我会将自己的一些学术上的知识,以及工业上学习的新skill sets一起发布到我的专栏当中,我会很好的去分类,所以大家fell free to get what you want from my blog,你可以评论,我会很认真地阅读您所提的每一个意见。如果我的文字有任何问题的话,你们直接提出来即可,Don’t mind it,虚心受教。
Best Wishes
希望我们可以一起成为更好的Engineer!
TimeLine
今天是work的第二天,这两天主要是新人培训,learn some new knowledge。昨天和今天主要是安装一些软件和命令行的内容,所以我今天就将昨天和今天学习的内容post at this blog。
Git Knowledge Accumulation
Git Internal Structure
待补充
Why we need Index Stage
根据刚刚所讲解的结构,有许多人可能会想到,感觉似乎我们只需要WorkPlace和Repository两部分就行了。设想一个场景,假设现在Git只有WorkPlace和Repository两部分,我们目前只有进行commit,如果你对所以文件全部进行了修改满意,且这个过程没有任何错误,那么你直接commit到Repository是完全没有问题的(个人观点),但是按照现在的commit规则,假设你一旦提交,类似于原子性这种概念就参与进来了,要么全部提交,要么全部撤销。
如果你有一些文件出现错误,你想要修改,你只有一个办法,那就是知道这个文件的错误,修改过来重新提交。但是你也不知道你该修改哪些可以回到原来的样子。如果你有很好的记性,It works.
如果你不知道该修改哪里,那么你只有全部撤销,小型工程还好,大型工程不堪设想。
回到现实,所以现在我们就发明一个Index Stage来解决这个问题。假设你现在将你已经修改好的文件添加到Index Stage,作为预存一下,现在你需要接着对这个文件进行修改,但是不幸地是,你弄错了,恰好你也不知道错在哪里,那么我可以直接使用restore命令直接将内容恢复到Index Stage里面的版本(暂存库版本),那么很显然,我们任何时候发生这种错误都可以将损失减到最小。
这就是我对为什么要有Index Stage的理解。
Git command
Local Repository
- 仓库初始化
将本地的文件夹初始化为一个Repository
init <文件名>
- 全局配置
将你的所有仓库加入你的标识(全球化),在你上传到云仓库时,能让别人知道这是你。
git config --global user.name "Username"
git config --global user.email "Email"
- 局部配置
none
- Workplace to Index stage
git add . //将所有改动add
git add <FileName> //将特定文件add
git all //将所有都add
- Index stage to Local Repository
git commit -m "注释"
- 查看当前状态
git status
- 查看提交的日志
git log
- 查看Reference Log
git reflog \\回退到特定的版本号,常常与命令git reset --hard 版本号结合使用,返回到错误回退的版本
- 查看某个文件在WorkPlace与Index Stage之间的不同,即查看修改了该文件的什么内容
git diff <FileName>
- 提交版本回退
git reset --hard HEAD^ \\回退到上一个commit的版本
git reset --hard HEAD^^ \\回退到上两个commit的版本
git reset --hard HEAD~n \\回退到前n个版本
git reset --hard 版本号 \\回退到特定的版本号,常常与命令git reflog结合使用,返回到错误回退的版本
- 将某个已经在WorkPlace发生更改的文件,回退到其Index Stage内的版本
git restore -- <FileName>
- 分支相关的命令
git branch \\查看创建了哪些Branch
git branch BranchName \\创建名为BranchName的分支
git branch -d BranchName \\删除名为BranchName的分支
git branch -D BranchName \\(强制)删除名为BranchName的分支
git checkout BranchName \\将当前分支切换为名为BranchName的分支
git checkout -b BranchName \\创建名为BranchName的分支,并切换到该分支
git merge BranchName \\将当前分支与名为BranchName的分支合并
- 待补充
Remote Repository
- 让Remote Repository与自定义的远程仓库别名绑定
git remote add <RemoteRepositoryAlias> <HTTPS/SSH> \\将current Repository与Remote Repository绑定,并类似建立于TCP这种的网络连接,而是告诉你的Repository,如果我到时候要与Remote Repository进行实际的联系的时候,我用<Name>你就知道是那个Remote Repository
- 让Remote Repository与自定义的远程仓库别名取消绑定
git remote rm <RemoteRepositoryAlias>
- 从远程仓库拷贝到本地
git clone <HTTPS/SSH>
- 将Current Local Repository的Branch推送到Remote Repository
这部分需要验证
git push RemoteRepositoryAlias LocalBranchName:RemoteBranchName //全部进行指明,包括推送到的仓库,本地分支名,远程仓库分支名。
git push RemoteRepositoryAlias LocalBranchName //Remote Repository Branch默认为master
git push RemoteRepositoryAlias //Remote Repository Branch默认为master;Local Repository Branch默认为master
git push // Remote Repository Alias只有一个时,默认为之前设定;Remote Repository Branch默认为master;Local Repository Branch默认为master(如果有多个呢?指明的是哪个?)
- 将Local Branch更新的内容推送到Remote Branch
git push
- 将Remote Repository更新的内容同步到Local Repository
git pull <LocalRepositoryAlias> <Local Branch>
Linux Command
Linux的一些命令在其中也能够使用,例如:cd, ls, pwd, rm, rmdir, mkdir等。目前我就用到这一些,你可以慢慢去探索还有哪些可以用,You’d be suprised!