Git是目前世界上最先进的分布式版本控制系统。GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可以浏览源代码,管理缺陷和注释。
1.安装git
首先,输入git,检查系统是否安装git
然后,如果没有安装,输入命令
sudo apt-get install git
2.创建版本库(repository)
(1)创建空目录
$ mkdir learngit $ cd $project_root #进入工程目录 $ pwd #显示当前目录(2)创建空仓库
$ git init #初始化git仓库 $ ls -ah #查看隐藏文件可以发现目录下多了一个.git文件
3.把文件添加到仓库
git add <file> #添加文件到仓库 可反复多次使用,添加多个文件; git commit -m "init commit" #提交代码到仓库例如:添加多个文件到仓库
$ git add file1.txt $ git add file2.txt file3.txt $ git commit -m "add 3 files."
4.添加到远程库
git remote add origin [email protected]:namespace/projectname.git #连接到git远程库 git push -u origin master #第一次把本地库的所有内容(当前分支master)推送到远程库上,并将本地的master分支和远程的master分支关联起来
以后提交的命令
$ git push origin master
5.从远程库克隆
首先,登陆GitHub,创建一个新的仓库
用命令git clone克隆一个本地库
$ git clone [email protected]:examplename/examplefolder.git $ cd examplefolder $ ls或者使用http协议地址
$ git clone https://github.com/examplename/examplefolder.git6.版本退回
$ git reset --hard HEAD^
用git status 查看是否有文件被修改过;
用git diff查看修改内容;
用git log查看提交历史,以便确定要回退到哪个版本。
用git reflog查看命令历史,以便确定要回到未来的哪个版本。
7.撤销修改
丢弃工作区的修改
$ git checkout -- readme.txt
把暂存区的修改撤销掉,重新放回工作区
$ git reset HEAD readme.txt $ git checkout -- readme.txt8.删除文件
从文件管理器中删除文件
$ rm test.txt从版本库删除文件
$ git rm test.txt $ git commit -m "remove test.txt"把误删的文件恢复到最新版本
$ git checkout -- test.txt
9.创建与合并分支
$ git checkout -b dev #创建并切换到dev分支 $ git branch #查看当前分支 $ git add readme.txt #在dev分支添加并提交文件 $ git commit -m "branch test" $ git checkout master #切换回主分支master $ git merge dev #将dev分支的结果合并到主分支master $ git branch -d dev #删除dev分支 $ git branch #查看当前分支
10.解决冲突
当Git无法自动合并分支时,必须先手动解决冲突(通过vim)。解决冲突后,再提交,合并完成。
如下命令可查看分支合并图
git log --graph
11.临时工作分支
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop
,回到工作现场。
$ git status $ git stash #隐藏当前工作现场 $ git status $ git checkout master #切换到master分支 $ git checkout -b issue-101 #创建新的分支,并在本地修改文件 $ git add readme.txt $ git commit -m "fix bug 101" $ git checkout master #切换到master分支 $ git merge --no-ff -m "merged bug fix 101" issue-101 #合并临时分支issue-101 $ git branch -d issue-101 #删除分支issue-101 $ git checkout dev #切换到dev分支 $ git status $ git stash list $ git stash pop #恢复工作现场,并删除stash内容 $ git stash list $ git stash apply stash@{0} #可以多次stash,恢复指定的stash
12.多人协作
$ git remote -v #查看远程库的信息 会显示出可以抓取和推送的origin地址
- 推送分支
在git中,分支完全可以在本地自己玩,是否推送,视个人情况而定。
master分支是主分支,要时刻与远程同步;
dev分支是开发分支,也需要与远程同步;
bug分支只用于在本地修复bug,没必要推到远程;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
$ git push origin dev #把本地dev分支推送到远程库
- 抓取分支
$ git clone [email protected]:examplename/examplefolder.git $ git branch #查看分支 $ git checkout -b dev origin/dev #创建远程origin的dev分支到本地 $ git commit -m "add /usr/bin/env" $ git push origin dev #把dev分支push到远程 $ git add hello.py $ git commit -m "add coding: utf-8" $ git push origin dev $ git pull #未指定本地dev分支和远程origin/dev分支的链接 no tracking information $ git branch --set-upstream dev origin/dev $ git pull
git pull成功,但是合并有冲突,需要手动解决(通过vim进入文件,手动修改删除),解决后,提交,再push。
$ git commit -m "merge & fix hello.py" $ git push origin dev