1 本地Git仓库的创建
在使用Git前想到的就是怎样显示是自己提交的名字
$ git config --global user.name "你的名字" # 设置提交名字
$ git config --global user.email "你的email" # 设置email
git init 创建一个空的git仓库
创建好后可以通过git add <file> 命令添加文件,如:git add readme.md
最后通过git commit 提交
$ mkdir GitSutdy
$ cd GitStudy
$ git init # 此时创建了一个Empty Git仓库啊
$ touch readme.md #新增加一个readme.md文件
$ git add readme.md # 将readme.md文件添加到仓库
$ git commit -m "add readme.md" # 提交所加文件到仓库
2 远程仓库
远程仓库创建:在git.oschian.net上创建一个远程仓库 GitStudy
1)将远程仓库从git上clone下来:
$ git clone [git@git.oschina.net:wangcccong/GitStudy.git](mailto:git@git.oschina.net:wangcccong/GitStudy.git)
此时可会出现Permission denied,需要添加一个ssh public key:
$ cd ~/.ssh
$ ssh-keygen -t rsa -C "wangcccong@outlook.com" #(生成一个rsa,名字自定义:加上叫id_rsa) 此时你的.ssh会多出两个文件 id_rsa id_rsa.pub
$ cat id_rsa.pub # 将公匙取出,填入网站即可(公匙标题随意取,然后将cat 出来的公匙拷贝粘贴到网站)
$ ssh -T git@git.oschina.net # 出现Welcome git@osc xxx)及配置公匙成功
再次调用git clone [git@git.oschina.net:wangcccong/GitStudy.git即可](mailto:git@git.oschian.net:wangcccong/GitStudy.xn--git-7l3e6v)
注意:
git clone 默认会把整个远程仓库克隆下来,但是只会创建master 分支,如果还存在其他分支
$ git branch -r # 或者 git branch -a 查看所有分支
origin/HEAD -> origin/master
origin/dev
origin/master
$ git checkout origin/dev # 将远程分支checkout
$ git checkout -t dev # 在本地创建一个和远程一样名字的分支
2)将远程仓库与本地仓库合并:
$ git remote add origin git@git.oschina.net:wangcccong/GitStudy.git (将远程仓库与本地仓库合并)
$ git push -u origin master # 推送仓库
3 Git时光穿梭机
1) git版本回退
当前如果新增了文件,或者修改了文件等其他操作并且已经git commit,发现问题需要回退到之前版本
$ git reset --hard HEAD^ # (HEAD^ 回到上一个版本 HEAD^^ 回到上一个的上一个版本,HEAD~100 回到之前的第100个版本)
还可以通过(git log 查看提交日志,git reflog 查看命令日志)
$ git log --pretty=oneline # 查询到改变版本的id
$ git reset --hard idxxx
2) 管理修改
$ git status # 查看当前状态
$ git add <file> # 添加文件或者文件夹
$ git diff # 查看冲突
$ git commit # 提交
3) 撤销修改
$ git checkout -- readme.txt # "--" 很重要,如果木有"--" 则命令就变为了切换分支
$ git reset HEAD readme.txt # 将暂存区的文件撤销
4) 删除文件
$ git rm <file> #(删除文件) 如果删除错误可以通过上述 git checkout -- <file>恢复
4 Git分支管理
1)创建与合并分支
$ git checkout -b dev #(创建+切换分支dev)与下面两句一样的功能
$ git branch dev
$ git checkout dev
$ git branch -d dev #删除分支
$ git branch #查看当前分支及版本库存在哪些分支#
*dev
master
$ git checkout dev # 将分支切换到dev
Switched branch to 'dev'
如果修改了某个分支,希望里面的内容与其他分支合并则通过
$ git merge dev # 则将当前所在分支与dev合并
2)分支管理情况
$ git merge dev 默认采用的是Fast Forward方式合并分支,在这种模式下合并分支后会丢掉分支信息,如果需要在后续能够看出来合并的历史信息,可以加上--no-ff
$ git merge --no-ff -m "merge with no-ff" dev
3) Bug分支
在开发中遇到bug需要修改,这个时候就需要重新创建一个bug分支如:issue-101,但是当前在分支dev 上进行了修改,但是又不想将当前修改立即提交并,可以使用
$ git stash 将分支暂时“储藏”起来,等以后恢复后继续工作
// 如下:假设将README.md文件中的“Git is free software...”改为“Git is a free software...”,然后提交
$ git checkout dev # 切换到dev分支下,如果当前有修改,但是不想合并提交
$ git stash
$ git checkout master # 进入master分支下修改README.md
$ git checkout -b issue-101
$ git add README.md
$ git commit -m "fix bug 101"
修复完成后回到master分支
$ git checkout master
$ git merge --no-ff -m "merged bug fix 101" issue-101
修复完bug后回到dev继续工作
$ git checkout dev
$ git status # 查看更状态
# On branch dev
nothing to commit (working directory clean) # 工作区是干净的无任何修改
$ git stash list # 查看刚才“储藏”的工作到哪儿去了
stash@{0}: WIP on dev: 6224937 add merge
$ git stash apply # 恢复工作
$ git stash drop # 删除stash内容 或者使用 git stash pop 完成上两个动作
4) Feature分支
$ git checkout -b feature
Feature分支用于在接到新功能的情况下新建分支,Feature分支与bug分支类似,新建-处理-合并-删除;但是当你在合并前有可能现在你接到一个命令说,当前功能不需要做了,需要删除新功能:
$ git branch -d feature
此时会出现销毁失败,可以使用
$ git branch -D feature # 强行删除分支
在此感谢 - 在此感谢廖雪峰的Git教程