git研究1

error:src refspec master does not match any  将本地GIT版本库PUSH到一个GITHUB上一个空的版本库时出现错误,本地版本库为空, 空目录不能提交 (只进行了init, 没有add和commit)

git stash 缓存目前的文件    
git push origin master -f  强覆盖,不推荐使用
git push origin 本地分支:远程分支 提交本地分支的名字到远程分支上(如果远程分支的名字没有,那么就创建一个),如果本地分支留空不写,那么则会删除远程分支
git pull origin master 
git log    查看git提交日志,退出可按q命令
pwd   查看当前目录,print work directory
mkdir learngit   产生一个目录文件夹,叫做learngit
cat kmsh.xml 打开某个文件
git init  初始化当前目录
ls -ah      显示该目录所有的内容,包括隐藏的内容
git status   时刻掌握仓库当前状态
git diff     查看两次修改内容                      
git reset --hard HEAD  硬回退到当前版本,HEAD当前版本,上一个版本是HEAD^^,多次回退可以写成HEAD~100 就是100次
git reset --hard 3628164 硬回退到即可HEAD是一个指针,指向某个版本,有soft和mix,soft仅仅回退commit 记录
git reflog 来记录用户的每一次使用命令
git diff HEAD --readme.txt 可以查看工作区和版本库里面最新版本的区别                                   
git checkout -- readme.txt 把readme.txt文件在工作区的修改全部撤销,
       两种情况,一种是readme.txt自修改后还没有被放到暂存区,现在撤销修改就回到和版本库一模一样的状态;                 
               一种是readme.txt已经添加到暂存区,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
                    总之,就是让这个文件回到最近一次 git commit 或者 git add时的状态
git checkout origin/dev -b dev  检出一个新的分支,全新的分支,和远程分支上一样
git reset HEAD file 可以把暂存区的修改撤销掉(unstage),重新放回工作区;
git reset 命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
 
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
 
rm file 删除一个文件
git rm file 从版本库中删除某文件,需要继续git commit
git checkout -- test.txt  其实就是用版本库里的版本替换工作区的版本,无论工作区还是修改或删除,都可以一键还原。
git remote add origin git@github.com:michaelliao/learngit.git 关联远程库
git push -u origin master  第一次把本地的仓库推送到远程仓库,把本地的master分支和远程的master分支关联起来,以后推送或者拉取时就可以简化命令
 
ssh-keygen -t rsa  generate ssh key  click enter
 
git branch dev 创建分支dev
git checkout dev 切换到分支dev
git checkout -b dev 创建且切换到分支dev
 
git branch 查看目前的分支 
git merge dev 把dev分支上面的内容合并到当前分支上,一般这是默认的fast-forward,直接把master指向dev的当前提交
 当出现冲突,解决了之后,需要再次提交
 
git branch -d dev 在当前分支上面删除dev分支,而且dev分支被当前分支合并过了,如果没有合并那么会出错
git branch -D dev 强制删除dev分支
git show-ref 展示所有本地引用的分支
git branch -r 展示连接的远程分支
git checkout -b my origin/my  基于远程分支my创建并切换到本地分支my  (注意对于分支my,如果再创建分支的话,那么就不能进行pull,除非加上--track参数)
 
git rebase master 合并分支,考虑几种情况。从远程服务器origin 下面拉分支到master,多个人开发,于是就会出现不同的分支增长,这时候另外一个人修改了提交到了远程分支上面,当我也做好了修改后,准备提交,首先pull下来origin分支。然后可以采用merge或者rebase方法。如果采用merge,则会把我的分支历史给覆盖掉,也就是本来两个人一人都有两次提交,然后Merge了,最后也只有2个分支,可能还加上最后合并的这次分支。如果采用rebase,那么假设是在dev开发分支上面rebase master,那么就是把dev分支上面做的修改全部撤销并保存在.git文件里面,然后对master分支逐个提交之前撤销的commit记录,撤销几个就再次提交几个,考虑队列的数据结构,然后在rebase 后面的分支上面就多了4个分支,也就是我和另外一个小伙伴的分支都被记录了,这样显然比较好。图片情况,百度一下,你就知道。
 
git log --graph --pretty=oneline --abbrev-commit 用带参数的git log 也可以看到分支的合并情况,
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
 
git merge --no-ff -m "merge with no-ff" dev 禁止用fast forward模式提交,所以加上-m 参数提交一个新的commit
合并后,我们用git log看看分支历史:
 
git stash 暂存当前工作目录
git stash list 查看暂存区有哪些工作目录
git stash pop 恢复暂存区内容,并把stash内容也删除  如git stash pop stash@{1}
git stash apply 恢复暂存区内容,但是不删除stash内容
git stash drop stash@{1} 删除stash中序号为1的内容
其中上面两个可以在最后加参数 如 stash@{0}
 
git remote 查看远程库的信息  当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin
git remote -v 显示远程库更详细的信息,这些是有推送权限的
 
git push origin dev 推送dev到远程的dev分支上面
 
git clone git@github.com:like/a.git  克隆仓库(需要提前把SSH key添加到github上面),默认只能看到master分支
 
git checkout -b dev origin/dev 创建远程origin的dev分支到本地
 
git branch --set-upstream dev origin/dev 指定本地dev分支与远程origin/dev分支的链接
git tag v1.0 给当前分支搭上标签1.0,git的标签是版本库的快照,其实是指向某个commit的指针,方便删除和创建,打在最新的commit
git tag 查看所有标签
git tag v0.9 6224937 给对应的commit id 打上了tag标签,标签不是按时间顺序列出,而是按字母排序的
git checkout v1.0 切到v1.0标签上面
git show v0.9 查看标签信息
git tag -a v0.1 -m 创建带有说明的标签,-a指定标签名,-m指定说明文字
git tag -d v0.1 删除分支
git push origin v1.0 推送分支到远程
git push origin --tags 一次性推送全部尚未推送到远程的本地标签
git push origin :refs/tags/v0.9 删除远程一个标签

在git工作区的根目录下创建一个特殊的.gitignore文件,把要忽略的文件名填进去,git就会自动忽略这些文件。可参考https://github.com/github/gitignore

比如操作系统自动生成的文件,缩略图。编译生成的中间文件、可执行文件,.class文件。忽略带有敏感信息的配置文件,比如存放口令的配置文件。

git config --global alias.st status 构造快捷键,将st映射到status,git st 就可以查看当前状态

如果不设置gitignore文件,在开发android的时候会相当蛋疼,因为每次运行bin文件夹里面都会修改,这样会频繁影响.git的变化,所以需要加入忽略文件,忽略文件可在

github上面的开源工程上面看到,本地有一个gitconfig文件,可先在命令行下敲git config --global core.excludesfile ~/.gitignore_global  需要更换为windows下面的视窗。

进去修改如下,excludesfile = c:/Users/你的账户文件夹/.gitignore_global 

 

 

每个仓库的Git配置文件都放在.git/config文件中:

$ cat .git/config 
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = git@github.com:michaelliao/learngit.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[alias]
    last = log -1

别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。

而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中:

$ cat .gitconfig
[alias]
    co = checkout
    ci = commit
    br = branch
    st = status
[user]
    name = Your Name
    email = your@email.com

配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置

apt advance package tool 高级包管理工具

posted @ 2015-12-01 17:58  likeshu  阅读(300)  评论(0编辑  收藏  举报