前些日子,不想学习,就在廖雪峰的博客学习了一下git工具。大概过了一遍之后,对git 有了基本的认识,但一直没融化到日常中进行使用,忘记殆尽,趁今天有点时间,整理一下常用命令,梳理一下这个工具。
安装
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
由于在windows 上看多了英文的git status
结果,先在Ubuntu中将中文改成英文:
echo "alias git='LANG=en_GB git'" >> ~/.bashrc
建立本地仓库
首先,需要在本地进行操作,进入工程目录,操作系统的命令不再赘述。
到达当前目录之后,建立本地仓库,输入以下命令,物理上建立一个.git的隐藏目录。
git init
版本控制 -本地仓库
在本地,有三个位置,自底向上分别为:
- 工作区
- stage
- master
工作区就是操作系统下正常的工作目录,是所见所得的一个位置;stage和master都属于repository,是不可见的一个位置。
git status //用于查询当前目录的状态,反馈回的信息很详尽
git log //查看commit的各个版本
git log --pretty=oneline //同上,初略显示,只显示一行
git add <file>... //把工作区的更改提交到stage
git rm <file>... //删除文件,把工作区的删除文件提交到stage
git commit -m "版本名" //将工作区的更改提交到master分支,本地的最高层
git reset --hard HEAD^ //回退到上一个版本
git reset --hard HEAD^^^ //回退到上三个版本
git reset --hard HEAD~100 //回退到上100个版本
git reset --hard <版本id> //回退到这个id版本
git reset HEAD <file>... //撤销该文件的git add提交
git checkout -- <file>... //清除工作区这个文件的更改,恢复到最近一次git add或者git commit时的情形
创建与合并分支
HEAD指针永远指向当前分支。
git branch //查看当前分支
git branch dev //创建一个名字为dev的分支
git checkout dev //转向一个名字为dev分支
git checkout -b dev //创建并转向一个名字为dev的分支,相当与上面两条命令之和
git merge dev //合并dev到当前分支
git branch -d dev //删除dev分支
git branch -D dev //强制删除dev分支
以上,均为本地进行的版本控制,若只有这点功能,git 就显得太鸡肋了,接下来,就是那些常常听说的名词:push pull clone诸如此类。
远程仓库
首先,讲ssh的公钥添加到github上去,生成公钥的方法:
//建立ssh,将公钥添加到github账户,建立本地公钥的方法为
ssh-keygen -t rsa -C "youremail@example.com"
github上的操作请参考与原来的教程,太简单按下不表。
接下来,一些常用的命令
查询
//查询远程库信息
git remote
//详细信息
git remote -v
clone
//从github上下载一个仓库
git clone git@github.com:name/peoject.git
//注意默认是master分支,并默认关联本地与远程origin;如需需要其他分支,则:
git checkout -b dev origin/dev
//之后push
git push origin dev
push和pull
最一般的push
git push origin branch-name
如果因为有别人的提交或者其他的一些原因产生问题,可以pull一下,是自己本地库最新,之后在push
git pull
若出现fatal: refusing to merge unrelated histories问题,参考https://stackoverflow.com/questions/37937984/git-refusing-to-merge-unrelated-histories
git pull origin master --allow-unrelated-histories
同步
//在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致;
git checkout -b branch-name origin/branch-name
//建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name