创建一个仓库
mkdir nnn //创建仓库
git init //初始化仓库(要在目录内)
touch readme.txt //创建文件
cat readme.txt 查看文件
git status //查看仓库状态
git add readme.txt //添加文件至暂存区
git commit -m "hhh" //把暂存区的提交到仓库 "hhh"是备注(可以有多次add,但只有一次commit)
git log --pretty=short //加--pretty=short 只显示提交信息的第一行
git diff //查看修改
git diff HEAD //查看工作区与最新提交的差别
回退版本
git reset --hard HEAD^ 回退到上一个版本,用HEAD表示当前版本修改撤销
git checkout -- readme.txt 丢弃工作区的修改(修改了文件但是还没有add)
git reset HEAD readme.txt (add了,还没有commit)把暂存区的修改撤销掉,重新放回工作区(再用上一个命令)
分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name> //需要add和commit后
删除分支:git branch -d <name>
远程库:
关联远程仓库(需要在github上面添加SSH KEY)git remote add origin git@server-name:path/repo-name.git;(我的git remote add origin git@github.com:bobnumbertwo/learngit.git)
关联后使用命令git push -u origin master第一次推送master分支的所有内容;
此后使用命令git push origin master推送master分支的最新提交;推送分支,就是把该分支上的所有本地提交推送到远程库
从远程仓库克隆一个仓库git clone git@github.com:bobnumbertwo/learngit.git
查看远程库信息,使用git remote -v;
在本地创建和远程分支对应的分支,git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,git branch --set-upstream branch-name origin/branch-name;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交,然后再推送;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
标签:
命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;
命令git tag可以查看所有标签。
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
思考:
在dev分支上修改了文件,但是并没有执行git add. git commit命令,然后切换到master分支,仍然能看到dev分支的改动,这个现象怎么解释?
因为未add的内容不属于任何一个分支, 未commit的内容也不属于任何一个分支。 也就是说,对于所有分支而言, 工作区和暂存区是公共的
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下(git add 但没有commit),然后去修复bug,修复后,再git stash pop,回到工作现场;
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
总的来说,就是,在dev分支下进行的工作,如果不commit的话,回到master,就会显示出你在分支下所添加的工作。这个时候,你在master下修改完bug提交后,正在分支进行的工作也会提交了。为了避免这个情况,你就在分支下,git stash将工作隐藏,这个时候,切换到master时候,修改了bug,提交。分支的内容不会被提交上去。