一、下载安装
很简单,可参看百度教程git下载安装图文教程
二、初始化操作(图示可参看博客git-ssh 配置和使用)
1、首次使用git,需设置git的用户名与邮箱:
$ git config --global user.name "username"
$ git config --global user.email "your email"
2、查看SSH Key是否生成过(SSH安全外壳协议,可参看博客安全外壳协议):
$ cd ~/.ssh
$ ls 查看是否有id_rsa(私钥)和id_rsa.pub(公钥)两个文件
3、如果SSH Key未生成过,则使用如下命令创建或覆盖:
$ ssh-keygen -t rsa -C “your email”
设置密码(输入两次密码以确认)或不设置密码(三次回车)
4、登录github或gitlab官网,设置SSH Key后,Git Bash即可正常使用
三、项目开发使用步骤
1、在GitHub或GitLab上创建远程仓库
2、克隆项目,打开Bash,cd到本地想创建本地仓库的位置(一般建议你的开发就应该在这个目录上,比如Eclipse的workspace就在这个目录上,你对本地仓库的操作都会同步到开发中,在Eclipse中项目点右键refresh一下就会更新,超级方便),然后:
$ git clone "仓库的 SSH url"(成功的话就能ls查看到仓库文件,cd进去会目录上会显示(master)主分支)
3、创建分支,一般不推荐直接在主分支上开发,所以创建子分支作为开发分支
$ git branch 分支名(创建分支)
$ git checkout 分支名 (切换分支)
4、在进行了修改后,提交修改到缓存区:
$ git add 目录/文件/.(.代表目录下的全部文件)
5、如果本阶段修改已完成,可以将修改提交到本分支(即可多次add后commit):
$ git commit -m "提交说明"
这里说一下git的运行区域(图解可参看博客点击打开链接)
工作区就是我们本地的文件系统
版本库包括缓存区与分支区,执行add的修改就被提交到了缓存区,执行commit后的修改就被提交到了分支区
6、如果一天的任务完成或一阶段任务完成了,就可以把本地分支的内容提交到远程仓库中,以供管理者审查、合并:
$ git push origin 分支名
7、因为使用Git的目的就是多人协作开发,所以别人完成了的工作可能是你完成工作的基础,这时候你的本地就需要别人push到远程仓库(你们使用的是一个远程仓库)的代码,可以通过:
$ git pull origin 分支名(拉取主仓库到本地本分支)
上述过程其实相当于两步,
git fetch origin (将远程仓库拉取到本地) 与 git merge origin 分支名 (合并本地与分支)
*这样做其实是不太规范的,规范的做法是:master主分支上存放远程仓库的所有版本,子分支只用来本地开发和上传修改,所以所有的pull都应当拉到master上,而不是直接到pull子分支,然后再通过merge master实现与master子分支合并:
$ git checkout master (从当前分支切换到主分支)
$ git pull(拉取远程仓库当前版本到主分支)
$ git checkout 子分支名 (从主分支切换到子分支)
$ git merge master(与主分支合并)
注意:还有一个git rebase指令同样是合并分支,与只是被合并的分支就消亡了,是完全的合并,而merge是内容合并。rebase可以与pull一起使用,这在第九点冲突时会说到。
8、在拉取之前,因为我们有本地的修改,它们还未保存,pull后会丢失,我们可以commit提交、版本合并后再拉取,但你可能还不想这样做,而且你的代码不一定到了上传、合并的时机,那就需要暂存我们的修改:
$ git stash(暂存修改)
$ git stash pop (pull之后,弹出修改)
9、在这个过程中,有很大可能遇到冲突
最常见的冲突是内容冲突:你修改了一个函数的实现,而远程仓库版本跟你的不一样,当主版本和你的修改合并时,这段代码的修改到底听谁的,所以就冲突了。通常出现在git pull与git merge的过程中。
这种冲突的解决方式是:直接修改冲突文件,在执行指令后有冲突的文件会标识在命令行中,在冲突文件中有如下标志:
<<<<<<< HEAD
这之间的是你的修改
=======
这之间是其他人的修改
>>>>>>> 6853e5ff961e684d3a6c02d4d06183b5ff330dcc
然后删除其他人的修改或者删除自己的修改,删除标识符,当处理完所有冲突后,执行git add与git commit即可。
在git rebase的过程中,也许会出现冲突: 在这种情况,Git会停止rebase并会让你去解决冲突;在解决完冲突后,用git add命令去更新这些内容的索引(index), 然后,你无需执行commit,只要执行:
$ git rebase --continue这样git会继续应用(apply)余下的补丁,这里说的补丁是这种情况:
表示把你的本地当前分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把本地当前分支更新为最新的"origin"分支,最后把保存的这些补丁应用到本地当前分支上
$ git rebase --abort在任何时候,你可以用--abort参数来终止rebase的行动,并且当前分支会回到rebase开始前的状态。