一.创建版本库
- 创建或选择一个文件夹,作为本地的版本库。(pwd命令查看当前目录)
- git init 命令将选择的目录变成本地仓库。
添加文件到仓库分为两个步骤:
git add . 点是把文件夹里面的所有文件都加载进来
git add(文件),可多次使用或者一次添加多个文件。
git commit -m “所添加文件的附属信息”。修改文件后,可以用git status查看被修改的文件,可用git diff查看修改的具体内容
- 修改文件后提交的过程与新建文件提交的过程一致,分别使用git add和git commit命令。
二.版本控制
- 查看提交版本的历史记录使用git log命令,git log - -pretty=oneline查看简化版的历史记录,只显示版本号(commit id)。在git中使用head表示当前版本,上一个版本表示为head^,上上一个版本为head^^,一次类推,当版本次数过多时可以使用head~n,能代表可回退版本的次数。
- 回退到上一版本使用 git reset - -hard HEAD^命令
- 如果回退版本之后,想回到先前的版本,可以使用git reflog命令查看你的每一次命令,获取到先前版本的版本号,用git reset - -hard 版本号 到达先前的版本。
- 工作区和暂存区:
- 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
- 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
- 假设修改了两次,第一次通过git add命令添加到了缓存区,而第二次修改后,什么也不执行,然后执行git commit命令,此时只会把第一次修改添加到当前分支。所以Git是如何跟踪修改的,每次修改,如果不add到暂存区,那就不会加入到commit中。
- 撤销工作区的修改内容,使用git checkout - - 文件名,撤销缓存区的修改内容,使用git reset HEAD 文件名。
- 删除文件
- 当确实要删除某个文件时,使用git rm 文件名,并且git commit,此时,该文件会在版本库中被删除。
- 当工作区的文件被误删时,可以使用git checkout - -文件名,将版本库里的版本替换工作区的版本。
三.远程仓库
- ssh:
首先查看自己电脑上是否有了git的ssh密钥,windows下查看C:\Users\Administrator.ssh此路径下是否有id_rsa和id_rsa.pub。rd_rsa称为私钥文件,id_rsa.pub称为公钥文件。如果没有此文件夹,则执行ssh-keygen -t rsa -C “youremail@example.com”此命令,会在C:\Users\Administrator.ssh路径下得到这两个文件,然后将公钥添加到github的账号上。 - 添加和删除远程仓库:
- git remote add origin git@github.com:(github账号)/(项目名), origin为远程仓库名。
- 要查看远程库的信息,使用git remote命令,或者使用git remote -v显示更详细的信息。
- 删除远程仓库:使用git remote rm 仓库名
- 重命名远程仓库:git remote rename <原仓库名> <新仓库名>
- 推送内容:
- 当远程仓库为空时即第一次提交时,可以使用git push - u origin master,可以理解为利用git push 命令将本地的master分支推送到远程的origin仓库。加上-u参数Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
- 当下次提交时可以直接使用git push origin master
- 克隆远程仓库
使用git clone git@github.com:(github账号)/(项目名)或者使用git clone https://github.com/(github账号)/(项目名)
四.分支管理
常用命令
查看所有分支: git branch
创建分支:git branch 分支名
切换分支:git checkout分支名
创建加切换分支: git branch -b分支名
合并某分支到当前分支: git merge分支名
删除分支:git branch -d 分支名解决冲突
当两个分支同时对文件的某一处进行修改时,需要手动解决冲突,当执行git merge 文件名命令时,会出现冲突提示,保留自己所想保留的代码,然后提交。多人协作
假设远程仓库有两个分支master和dev,使用git clone git@github.com:(github账号)/(项目名)或者使用git clone https://github.com/(github账号)/(项目名)将远程仓库克隆到本地,默认情况下,只能看到本地的master分支。如果要在dev分支上开发,就必须创建远程origin的dev分支到本地,需要使用命令的命令为:git checkout -b dev origin/dev,当有两个以上的人在dev分支上的同一处做了修改后,会无法推送,此时提示需要先拉取远程仓库,但输入拉取操作时,也会出现错误,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:git branch - -set-upstream dev origin/dev,执行完此命令后就可以拉取,然后修改冲突,最后提交,提交使用的命令为git push origin 分支名
五.遇到的问题
- 当执行push时
error: failed to push some refs to 'git@github.com:mtgnorton/gadmin.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
执行git status提示
Unmerged paths:
(use "git add/rm <file>..." as appropriate to mark resolution)
deleted by them: Application/Common/Conf/config.php
执行
git rm Application/Common/Conf/config.php
提示执行pull,此时提示
error: You have not concluded your merge (MERGE_HEAD exists).
hint: Please, commit your changes before merging.
fatal: Exiting because of unfinished merge.
```
git merge --abort
git reset --merge