1 | mkdir 创建空目录 |
1 | git init 初始化一个Git仓库:把目录变成Git可以管理的仓库, |
1 | git add 把文件添加到暂存区 |
1 | git log 显示从最近到最远的提交日志(版本) |
1 | git reset --hard HEAD^ 回退到上一个版本 |
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区,当用HEAD时,表示最新的版本。
撤销未add到暂存区(即撤销工作区)的修改:git checkout –
撤消已add,未commit到分支(即撤销暂存区)的修改:第一步,git reset HEAD
;第二步,git checkout – 撤销本次已commit到分支(提交到版本库)的修改:git reset –hard HEAD^
1 | rm <file> 删除文件。工作区和版本库就不一致了 |
分支
创建与合并分支
HEAD是指向master,master指向提交的。所以,HEAD指向的就是当前分支。
master分支是一条线,master是一个指针。
当创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
1 | git checkout -b dev 创建dev分支,然后切换到dev分支 |
1 | git log --graph --pretty=oneline --abbrev-commit 可以看到分支的合并情况(graph图表) |
合并冲突
当Git无法自动合并分支时,就必须首先解决冲突,解决冲突后,再提交,合并完成。
1 | 创建+切换分支feature1,对内容a修改成AND --> add,commit |
合并模式:
- Fast forward,快进模式。
1
git merge dev 直接把master指向dev的当前提交。
这种模式下合并,看不出来曾经做过合并。删除分支后,会丢掉分支信息。
- –no-ff方式的git merge,普通模式合并。
1
2
3
4git merge --no-ff -m "merge with no-ff" dev
这种模式合并,要创建一个新的commit,
所以加上-m参数,把commit描述写进去。
合并后的历史有分支,能看出曾经做过合并。
这相当于有合并冲突,修改冲突后再提交。
Bug分支
从哪个分支修改bug就从哪个分支创建临时分支。如,在master分支上修复
1 | git stash 把未提交的工作现场“储藏起来”, |
可以多次stash,恢复的时候,先用git stash list 查看,然后恢复指定的stash,用命令:
1 | git stash apply stash@{0} |
1 | git branch -D <name> 强行删除没有被合并过的分支 |
远程仓库
先有本地库,后有远程库。添加+关联
Create a new repo按钮,输入name,点击create repository新建仓库。
1 | git remote add origin git@github.com:amyyanjie/test.git在本地关联远程库 |
从远程库克隆
1 | git clone git@github.com:amyyanjie/learngit.git |
当从远程仓库克隆时,Git自动把本地的master分支和远程的master分支对应起来了。远程仓库的默认名称是origin。
1 | git remote -v查看远程库信息 |
多人协作
1 | git remote 查看远程库的信息 |
1 | git push origin <branchName> 把该分支推送到远程库对应的远程分支上 |
1 | git pull 拉取所有分支到本地 |
多人协作的工作模式
1、首先,试图用git push origin
推送修改; 2、如果推送失败,则因为远程分支比本地更新,需要先用git pull试图拉取合并。
若git pull提示”no tracking information”,说明没有指定本地分支与远程分支的链接:
1
2git branch --set-upstream <branchName> origin/<branchName>
或git branch --set-upstream-to=origin/<branchName> <branchName>再git pull就能成功
3、若git pull成功,但显示合并有冲突,需要手动解决,并在本地提交
- 4、没有冲突或解决掉冲突后,再用git push origin
推送就能成功
标签
1 | git tag <name> 打标签。如git tag v1.0 |
1 | git push origin <tagNamae> 推送某个标签到远程 |
1 | git config --global alias.st status 配置别名 |
配置GIt的时候,如果不加–global,只针对当前仓库起作用。
每个仓库的Git配置文件都放在.git/config文件中。而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中。