1)What is GitHub ?
GitHub 是一款免费的代码管理服务器,将自己的比较有价值的代码上传到GitHub是一个很不错的选择。但是,GitHub是一家美国公司,已经被微软收购了,所以目前使用GitHub还容易受到美国政府的政策所影响。例如,前两条伊朗就因为被美国拉黑,而无法继续使用GitHub,导致所有程序员的账户被封。
- 检查本地是否有 Git SSH key
git ~/.ssh
ls
如下图所示:
然后执行 cat is_rsa.pub 即可看到ssh key
2) How to upload your code to GitHub ?
https://www.cnblogs.com/mr-wuxiansheng/p/6974170.html
参考以上链接即可完成代码的上传。需要说明的是,使用windows下的shell工具比较容易些。也就是所谓的“Git Bash”,简单易用。
(1)git remote add origin git@github.com:978924688/Bootloader //添加GitHub的远程仓库origin的地址
注意:如果添加错了,可以使用 git remote rm origin 来删除重新添加
如果查看当前的remote地址,使用命令: git remote -v
(2)cd xxx //进入到本地代码的文件夹下面(例如:cd /c/Users/LiuMing/Desktop/temp/ )
(3)git clone https://github.com/978924688/Bootloader.git //将GitHub下项目名为Bootloader的文件克隆过来
(4)git add . //将该文件夹下的所有文件都添加到本地代码仓库
(5)git commit -m xxx // 备注上要上传的信息,然后上传到本地代码仓库
(6)git push -u origin master //将本地代码上传到 GitHub 代码仓库
【注意:如果执行第6条失败后,可以将 -u改为-f,此时会讲代码仓库的原有资源覆盖】
By the way: 要学会多用 git status 命令来查看代码的状态。
以上操作中可能要求输入用户名和密码的操作,按要求输入即可!
其实,这些具体的操作命令,GitHub上面都有写的,而且写的很清楚,如下截图所示:
3. 代码如何上传到Git的branch分支?
3.1 创建分支
git branch brachName //创建分支
git branch //查看本地所有分支
git branch -a //查看本地和远程的所有分支
git branch -m <oldbranch> <newbranch> //重命名本地分支
git branch -r //查看远程所有分支
git branch -d <branchname> //删除本地分支
git push origin --delete <BranchName> //删除远程仓库分支
3.2 切换分支
git checkout brachName
3.3 添加远程分支地址
git remote add origin https://github.com/978924688/brachName.git
3.4 将分支上传
git push origin brachName
有时,git push可能会冲突,如果强制上传,可以使用:
git push -f origin brachName
3.5 如何克隆branch上的代码
当1个仓库有3个分支时,但是克隆的remote地址只有1个,如何下来某一个分支的代码呢?方法如下:
就是在git clone后面加上 '-b' 参数,然后跟branch的分支名。
git clone -b branchName https://github.com/978924688/xxxx.git
4. GitHub 插件推荐
October
octotree 可以说是我用过最好的 GitHub 插件了,因此我把它放在首位,给大家推荐一下。
平时你在使用 GitHub 浏览项目代码的时候,有没有总觉得不太方便,因为每次点击一个项目文件后,整个项目文件列表就会被隐藏,想查看其它文件只能回退后再次进入。
octotree 就很好的解决了这个问题,它在 GitHub 页面的左侧上方添加了一个按钮,点击后会展开一个菜单,显示当前项目的整个文件夹结构。你可以浏览或下载单个源文件。
GitHub:ovity/octotree
插件推荐参考自:https://zhuanlan.zhihu.com/p/55722104
5. GitHub上传大文件
GitHub官方限制单次上传的文件最大不超过100M,当你想传比较大的项目,例如Linux的平台代码时,
就无法上传成功,这时就需要用到 Git LFS。
关于Git LFS的具体使用方法,链接如下:
6. 工作区和暂存区
6.1 工作区 (Working Directory)
代码中我们直接操作代码的那个目录,就是我们的工作区;
6.2 版本库 (Repository)
工作区里面有一个隐藏的目录,就是 .git 目录,这个就是Git版本库
Git版本库里面存了很多东西,其中最重要的就是称为 stage (或者叫 index)的暂存区,还有Git为我们创建的第一个默认分支
master,以及指向master的指针 HEAD。
其图示如下:
7. 代码版本管理
7.1 pull repuest
执行pull request 后会创建一个临时分支,你可以添加需要给你review的人,每个review人都通过后这个分支才会被Merge到真正的主线master里。
7.2 创建版本
创建版本只需2个步骤:
- git add xxx
- git commit -m "xxx"
7.3 版本回退
7.3.1 回退修改
如果修改了 a.cpp文件,并执行了git add a.cpp到staged区,想取消这个暂存的修改,则有2种方法:
git restore --staged a.cpp
或者执行:
git reset HEAD a.cpp
git checkout -- a.cpp
如果只是修改了Working directory的内容,而没有git add,现在想回退修改,则如下操作:
git restore a.cpp
- 场景1:当时改乱了你的工作区,想丢弃工作区的修改时,使用如下命令即可:
git checkout -- filename
- 场景2:当你改乱了工作区的内容,而且还用git add 将其添加到了暂存区,想丢弃修改,需要分2步操作:
第1步: git reset HEAD fileName //此时暂存区内容被回退
第2步: git checkout -- fileName // 工作区内容被回退
7.3.2 回退版本
-
查询历史对应不同版本的ID ,用于回退使用
注意这里没有使用 git log 命令,因为Git log会打印特别多无用信息
使用git reflog
命令查看所有的历史版本,获取你git的某个历史版本的id
假设查到历史版本的id是2a20c9dc5c47499b5e52dece98b624de7b2ee818
-
恢复到历史版本
git reset --hard 2a20c9dc5c47499b5e52dece98b624de7b2ee818
-
HEAD用法
Git里面的HEAD命令表示当前最新的版本ID
上一个版本则表示为 HEAD^
上100个版本则表示为 HEAD ~100
例如,回退到上一个版本:
git reset --hard HEAD^
-
把代码推送到远程服务器
git push -f -u origin master
-
重新更新就可以了
git pull
8. 对比不同
8.1 git diff 用法
8.1.1 对比工作区与版本库的某文件找不同
如果某码农修改了Working directory的Calcutator.cpp,想对比一下自己工作区的Calcutator.cpp与版本库里有何不同,
执行如下:
git diff HEAD -- a.cpp
其中HEAD表示版本库里指向最新版本的指针
直接结果如下图所示:
8.1.2 对比版本库的当前版本与上一个版本找不同
git diff HEAD HEAD^ -- Calculator.cpp
执行如下:
这时,'-'号代表a位置,即表示HEAD的变化。上图说明了HEAD版本比HEAD^版本多了一行红色标记部分。
9. 代码Merge
9.1 git fetch详解
git fetch是指从remote代码仓库中的HEAD代码拉取一份放到本地名为 FETCH_HEAD的branch下面。
例如remote的代码有其他人提交过,因此需要合并,这时,先使用git fetch将远程的代码拉取到本地,
如下操作:
git fetch origin master
执行git fetch之后,远程仓库的代码就被拉取到了FETCH_HEAD的branch下面,
注意,这时我们通过git branch命令是看不到该分支的,只能通过git branch然后敲Tab键才能看到。
切换到 FETCH_HEAD分支下查看远程的代码
git checkout FETCH_HEAD
如果代码检测无误后,便可以进行合并分支了。
先切换回原master分支,然后使用 git merge 进行合并代码
git checkout master
git merge FETCH_HEAD //将远程的代码合并到本地
git push //再将本地代码推送到远程服务器
9.2 git pull
git pull 是一个很危险的命令,它不会给你检查本地和远程代码的机会,直接拉取下来远程代码之后进行与本地自动合并。
git pull = git fetch + git merge
合并之后,再执行git push 便可以推送到远程服务器
合并服务器代码出现Conflict时:
例如:执行 git pull 之后,出现如下 CONLICT :
上图中看到,Conflict出现在 APP/peripheral_main.c中,直接用 vscode 打开此文件,如下所示:
非常的方便快捷。解决了手动Merge的烦恼!
10. Git 常见错误处理
(1)git push 时提示: error: src refspec master does not match any
该问题的解决方法参考自:https://stackoverflow.com/questions/21264738/error-src-refspec-master-does-not-match-any
解决方法1:
git push origin HEAD:branchName