新建本地git项目目录
新建项目文件(可以是任何类型文件,如文本、各种代码源文件、图片、视频文件等)
初始化当前目录成git项目
在当前目录下执行命令git init
用ls -al命令查看,此时当前目录下多了一个隐藏文件.git,里面包含git相关的各种配置文件信息:
配置git全局用户名、邮箱、密码等信息
git config --global user.name 'zhangsan'
git config --global user.email 'zhangsan@163.com'
git config --global user.password '******'
设置完成后可通过命令git config --list 查看
git常用操作
查看本地仓库状态git status
红色代表这些文件没有加入git版本控制,执行git add命令将其加入
之前红色文件变成绿色了,代表这些文件已经被加入到暂存区(stage),如果这个时候我们发现暂存区里有个文件提交错了,它本来不应该加入的,那可以执行命令git rm --cached 文件名 来达到反悔的目的(当然这不影响工作区原始文件)
同理,如果已经在暂存区里的文件被修改了,此时需要再次执行git add命令将其重新加入暂存区。
提交暂存区文件到本地分支
执行git commit -m '提交说明'
执行git log查看历史提交记录
推送本地项目到远程git仓库(本文以github远程仓库为例)
1.首先找到远端git仓库看地址git@github.com:JohnnyXiao/myProject.git
2.将本地仓库与远程仓库建立联系
执行命令git remote add origin git@github.com:JohnnyXiao/myProject.git
执行前:
执行后:
3、从远端同步文件到本地
执行命令git pull
如果报错,类似下图:
说明你没有权限拉取文件,需要配置ssh key
添加成功后:
那么问题来了,ssh key从哪里获取?
答案:ssh工具可以生成key,具体方法
执行ssh-keygen命令,一路回车确认即可
然后查看主目录下生成的ssh公钥,执行命令cat ~/.ssh/id_rsa.pub
复制这个文件里面的内容粘贴到在github上点击New SSH Key弹出的框框中,确定。
再次执行git pull命令,成功了:
此时我们尝试push本地文件到远端
很不幸,失败了,看失败提示信息:当前分支没有设置上游分支,啥意思?原因是远程分支和本地分支有不一样的内容,二者之间需要在本地同步之后才可以push上去,执行命令git branch --set-upstream-to=origin/master
然后同步一下本地分支和远程分支,执行命令git pull --rebase
再来看提交记录,执行命令git log,本地和远程分支的提交合并到一起了:
此时可以继续push本地文件到远程分支了,执行命令git push -u origin master:
好了,现在我们去远程github仓库里看看有什么变化没:
本地文件提交到远端仓库成功了
下面我们在远端仓库里新建文件,在本地pull看是否成功
本地执行命令git pull,成功了:
执行命令git log查看,会新增一条提交记录
至此,本地新建项目然后和远程仓库同步(拉取和推送)操作已顺利完成。
如果你的原始代码保存在远程仓库而你本地无项目,现在你只是想从远程仓库拉取原始代码到本地进行开发或者修改然后再同步到远端,那操作更简单了:
1.找到远程仓库地址(该步骤前面已经进行过):git@github.com:JohnnyXiao/myProject.git
2.进入你想保存远端代码的目录,执行命令git clone git@github.com:JohnnyXiao/myProject.git
3.拉取成功后,ls -al查看下当前目录是否多了一个新的子目录:
cd myProject目录,执行命令git log查看,远端仓库所有的提交记录都到本地了,文件也和远端仓库里的一样
然后你就可以在本地进行代码开发了,之后如何提交的流程跟前面讲的是一样的了。
本地分支、远程跟踪分支,远程分支
远程分支:远程仓库的普通分支,比如远程仓库上的master
,自己在远程仓库创建的分支,以及自己推送到远程仓库上去的在远程仓库上的分支
远程跟踪分支:远程跟踪分支是本地仓库对远程仓库中的某个远程分支的状态的记录,它们以 (远程仓库名)/(分支名)
形式命名,他的作用是告诉用户其所跟踪的远程分支的状态(即指向哪一个commit),因而它在本地是只读的,用户是无法自行修改它的指向
本地分支(跟踪分支):从一个远程跟踪分支产生出的一个本地分支,他与远程分支有直接关系的本地分支。
几种情况:
- 已建本地分支branch_name,但远程服务器上没有这个分支,这时候 push 和 pull 指令就无法确定该跟踪谁,一般来说我们都会使其跟踪远程同名分支。如下:
git push --set-upstream origin branch_name
这样就可以自动在远程创建一个 branch_name 分支,然后本地分支会跟踪该分支,同时本地也能看到多了一个远程跟踪分支remotes/origin/branch_name。后面再对该分支使用 push 和 pull 就自动同步,而无需再指定分支。
- 远程新建了一个分支branch_name,但本地没有该分支。这时候通过命令:
git checkout --track origin/branch_name
这时本地会新建一个分支名叫branch_name(本地分支) ,会自动跟踪远程的同名分支branch_name。对应关系如下(分支名称相同情况下):
本地分支(跟踪分支):branch_name
远程跟踪分支:remotes/origin/branch_name
远程分支:origin/branch_name
好了,写这篇文章一是自己对git相关知识做个总结加深对它的理解,方便日后需要时可以随后查询,二来希望能帮到正在使用git又刚好遇到了一些问题的朋友,这些仅一家之言,有错误或者不严谨之处各位看官请轻拍、指正,感激不尽。
当然git是个功能非常强大的代码管理工具,以上所列只是皮毛,后面有机会接触到更多的git功能再跟大家分享了。