在github上创建第一个工程,添加一个README.md
![](https://img.haomeiwen.com/i7161200/7ad097f88a2fb2f5.png)
在本地新建一个文件夹,同步远程代码
git init #在目录中初始化本地git仓库
git remote add origin url #本地和远程仓库关联
git pull origin master #将远程仓库的代码pull到本地
在本地添加文件dairy.txt,并提交
git status #查看目前git的状态
git add dairy.txt #git add . 添加全部,其实是将工作区的内容提交到暂存区
git commit -m "add dairy.txt "
git push origin master
![](https://img.haomeiwen.com/i7161200/753b551769092437.png)
查看github,在本地新建的文件已经同步
回到历史 && 来到未来
git log #查看日志
![](https://img.haomeiwen.com/i7161200/aaec3fa74da691b8.png)
git reset --hard ba4241e83647dbe85f9705b42b06cf918e878fa4
![](https://img.haomeiwen.com/i7161200/4b21c77e9827c58f.png)
可见此版本没有myself.txt的文件,用vi编辑器查看历史内容
git reflog #查看未来的版本
![](https://img.haomeiwen.com/i7161200/3ca78dcca8cdf181.png)
分支开发 && 分支合并
git branch test #新建分支test
git branch #罗列出所有的分支
git checkout test #//切换到test分支
git checkout -b dev #创建并切换到dev分支
![](https://img.haomeiwen.com/i7161200/7a73e0c991b1765f.png)
将本地新建的分支同步到远程
TIPS:在实际开发的很多IDE,可以自动创建远程分支,这一步往往可以省略。
git push origin test
git push origin dev
![](https://img.haomeiwen.com/i7161200/f95908b1992a893f.png)
然后将本地dev分支上上传的图片push到github上
merge
在gitlab上面操作,进入项目下,点击merge request选项,然后选择你之前推到远端的dev branch和你要合并到哪个分支,比如你要合并到master上,点击merge request
解决冲突
冲突原因:
- 多个成员修改不同文件
- 多成员修改相同文件不同区域
- 同时修改文件名和文件内容
在一些情况下,git可以智能合并,有些时候需要手动合并
上诉三种情况都可以用一种方式解决,就是在push之前先pull
手动合并
git status #查看版本库状态
git mergetool #使用工具
出现kdiff3图形界面,其中A区为修改前,B区为本地(local)版本库修改,C区为远程版本库(remote)信息,在最下方点击右键选择需要使用的版本库,修改后保存退出即可。之后:
git commit -m ""
git push origin master
这里就完成了conflict的手动合并
查看提交日志:
git log --graph --online
建立里程碑
所谓里程碑,就是版本号,每一个版本代表开发人员一段时间的工作。
在master merge分支代码之后的工程下,选择relsease
![](https://img.haomeiwen.com/i7161200/186c55fa3217b29a.png)
选择 public release之后,可以看到如下界面:
![](https://img.haomeiwen.com/i7161200/1caf897a93560fad.png)
可以直接下载打好的包,很多开源项目就是可以这样直接下载去项目中使用。
Fork Other's Repository
很多时候,我们需要拿到别人的仓库,进行后续或者协作开发
在对应的项目工程下,在github的左上角选择 fork,工程就会出现在我的github的主页上:
![](https://img.haomeiwen.com/i7161200/7b6ff621f429eaa4.png)
然后我们需要再本地新建一个文件夹,将项目拉倒本地
git remote -v #查看远程仓库的版本
git remote add upstream url
![](https://img.haomeiwen.com/i7161200/80f74bd4806ef040.png)
git pull upstream master
git push origin master
本人修改的代码可以通过pull request 请求合并,提交贡献
写在后面的话
1.origin
代码库(repository)可以存放在你的电脑里,同时你也可以把代码库托管到Github的服务器上。在默认情况下,origin指向的就是你本地的代码库托管在Github上的版本。
2.FETCH_HEAD
是一个版本链接,记录在本地的一个文件中,指向着目前已经从远程仓库取下来的分支的末端版本。
3.git fetch 有四种基本用法
- git fetch:这将更新git remote 中所有的远程repo 所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中
- git fetch remote_repo :这将更新名称为remote_repo 的远程repo上的所有branch的最新commit-id,将其记录。
- git fetch remote_repo remote_branch_name :这将这将更新名称为remote_repo 的远程repo上的分支: remote_branch_name
-
git fetch remote_repo remote_branch_name:local_branch_name :这将这将更新名称为remote_repo 的远程repo上的分支: remote_branch_name ,并在本地创建local_branch_name 本地分支保存远端分支的所有数据。
4.暂存区的概念很重要,了解了这个概念,git的很多命令你就知道在干什么了。
stage1.png
stage2.png
stage3.png
5.在每次提交代码前,养成使用 git diff 的好习惯
6.每天下班前,清空你的工作区,给明天一个愉快的开始!
7.如果你的项目组有很多同学,或者是你为很大的开源项目做贡献,建议你将每次提交的代码描述详细,尽量精确到第几行,实现什么功能。
FAQ
- Access denied
remote: HTTP Basic: Access denied
fatal: Authentication failed for 'http://git.xx/xxx/xxx.git/'
需要重新设置用户名和邮箱:
$ git config --global user.name "xxx"
$ git config --global user.email "xxx@xxx"
- git pull 失败 ,提示:fatal: refusing to merge unrelated histories
在git pull 时,增加一个可选项
git pull origin master --allow-unrelated-histories
- 本地同步远端的git分支
在本地新建并切换到dev分支,和远程的dev分支进行关联
git branch -b dev /origin/dev
上诉操作等同于:
git branch --all #查看所有分支,发现只有master
git checkout dev #在本地创建dev分支
git branch dev #本地切换到dev
git push origin dev:dev #本地dev和远端dev进行关联
查看本地分支和远程分支的对应关系:
git branch -vv
程序媛小白一枚,如有错误,烦请批评指正!(#.#)
网友评论