git版本库
本地提交:
git init
git add file/dir/./* 交互式添加文件到暂存区:git add -i
git commit -m “提示”
远程:
连接git remote add origin git@github.com:michaelliao/learngit.git ssh支持的原生git协议 速度快
git remote add origin https://github.com/daduryi/git_learn.git https协(remote add 用于你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器)
推送git push -u origin master
-u 并进行关联,用于第一次
git push origin mastergit push -f <remote> <branch> 强制你的本地分支,以便覆盖远程的分支 --force
克隆:git clone git@github.com:daduryi/git_learn.git(只克隆到了master分支)
git remote 查看远程库信息(名称 origin [ˈɔ:rɪdʒɪn] 起源) git remote -V
删除文件
rm file
git rm file 并且 git commit
分支
git checkout -b dev 从当前创建并切换到dev分支,相当于以下两条命令:
git brach dev 创建
git checkout dev 切换
git branch 查看分支
git branch -d dev 删除dev分支
git brash -D dev 强力删除未合并的分支
git checkout -b dev origin/dev 创建远程的dev分支到本地
git branch查看所有分支,当前分支带* -a所有
更新pull与合并merge
git pull 在你的工作目录中 获取(fetch) 并 合并(merge) 远端的改动。
git pull -r (--rebase)使用
git pull --rebase
主要是为是将提交约线图平坦化,而 git merge --no-ff
则是刻意制造分叉。
git pull origin next:master 取回origin主机的next分支,与本地的master分支合并
git merge dev 合并指定分支dev到当前分支(有时需要解决冲突,修改冲突后需要add commit,然后自动执行失败的merge) --no-ff强制不是用Fast forward
git diff <source_branch> <target_branch> 在合并改动之前,你可以使用如下命令预览差异
git diff file 查看工作区和暂存区的区别
git diff HEAD -- file 查看工作区和版本库的区别
bug分支:stash
git stash 将工作现场存储起来(多用于去修复master临时出现的bug),等以后恢复现场后继续工作
git stash apply 应用储藏, 然后git stash drop删除stash内容)或者(git stash pop 恢复并删除stash) stash [stæʃ] 藏匿
git stash list列出存储的现场
git stash apply stash@{0},恢复指定stash
https://git-scm.com/book/zh/v1/Git-%E5%B7%A5%E5%85%B7-%E5%82%A8%E8%97%8F%EF%BC%88Stashing%EF%BC%89
替换本地改动(回退):
git checkout -- file 丢掉工作区的修改,让这个文件回到最近的一次git commit或git add的状态,没有--就表示切换分支 新文件都不会受到影响
git reset HEAD file 可以把暂存区的修改撤销掉(即撤销add的,重新回到工作区)
reset --hard commit_id 本地版本回退
假如你想丢弃你在本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将你本地主分支指向它:git fetch origin 或者
git reset --hard origin/master
log:
git status
git log
--pretty=oneline 一个压缩后的每一条提交记录只占一行的输出
--graph 查看分支合并图
--abbrev-commit简化command id
--decorate --all每个分支都标示了他的名字和标签)
--author=bob 只看某一个人的提交记录
--name-status 看看哪些文件改变了
git log --graph --pretty=oneline --abbrev-commit查看分支情况
git reflog 查看命令历史,以便确定回到未来的哪个版本
git log --help
标签:
git tag 1.0.0 1b2e1d63ff git tag -a v1.4 1b2e1d63ff -m 'my version 1.4' 推荐带m的
git tag git tag -l 'v1.4.2.*' git show v1.4
git push origin [tagname]
默认情况下,git push
并不会把标签传送到远端服务器上 git push origin --tags(所有的标签)
git tag -d 标签名
https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE
概念:
工作区workspaces: 电脑里能看到的目录,如git_learn目录
暂存区stage/index:
版本库: .git目录 在.git目录中存在暂存区,称为stage或index; master分支; 以及指向master的一个指针HEAD
add从workdir到stage,commit从stage到master
0、设置账号
$ git config --global user.email "lixuening7115@163.com" $ git config --global user.name 'daduryi'
远程:
1、ssh-keygen -t rsa -C "name@163.com"
2、登录GitHub,打开“Account settings", SSH KEYS页面;点add ssh key,填上title,粘贴id_rsa.pub文件内容
解释:
1、在Git中,用HEAD表示当前版本,上一个版本用HEAD^,上上个版本用HEAD^^,当前网上100个版本HEAD~100
2、fast forward模式 merge后看不出做过合并,no-ff能看出来,所以ff模式删除分支后会丢掉分支信息。
3、合作开发时,master用来发布新版本,dev用来干活,每个人在自己分支上干活,时不时往dev上合并。
创建bug分支修复bug,多用到git stash
当从远程库克隆时,实际上git自动把本地分支master和远程master分支对应起来,并且远程库的默认名称是origin
主分支master 开发分支dev需要推送远程, 其他分支看需不需要大家合作(是否推送的原则)
参考:
http://rogerdudler.github.io/git-guide/index.zh.html