之前一直用svn,这次入职新公司,用的是git,对于之前没用过git的我来说,简直是有些不知所措。不过幸好,部门老大不辞辛劳,给我们进行了多次讲解与培训,现在终于算是入门了。为了以后不会再出现低级错误,赶紧发篇文章,记录一下,压压惊。
1、如果之前没有下载过此版本库代码,则需要执行以下命令:
git clone 远程代码库链接
2、如果之前下载过此版本库代码,那么只需要拉取最新的代码即可。
git checkout master
(2) 拉取远程master的代码
git pull
1、获取远程最新代码后,则需要从本地master分支切换到开发分支。(此处我们以每个新功能为一个新的开发分支)
git branch -a
git checkout 72-banner
Ⅰ、创建分支
git branch 72-banner
Ⅱ、切换到72-banner分支
git checkout 72-banner
Ⅲ、直接创建的同时切换分支(对Ⅰ、Ⅱ的一种简写方式,只需要一个命令就可解决)
//同时创建本地分支和远程分支,并切换本地分支为72-banner
//下面这条代码有问题,暂不适用
/*git checkout -b 72-banner origin/72-banner*/
//先使用这种方法吧
git checkout -b 72-banner //先在本地创建分支并切换过去
git push origin 72-banner //将代码push到远程的72-banner分支。
1、先查看一下当前文件的状态。
git status
2、此时如果之前没有进行过add,则此时会看到很多红色的代码,而仔细看,会发现这些红色的代码都是一些自己修改过的文件。现在就是要将这些文件提交,首先add
//git add . 的作用是把所有文件添加到仓库中
git add .
//当然如果只有1、2个文件,那么可以分别添加
//git add file1.txt
//git add file2.txt
3、将文件加入到暂存区后,再使用git status看一下。会发现所有之前红色的代码全部变成绿色啦。说明已经加入到了暂存区中,接着我们要将代码commit(提交)到当前分支。
//可以对本地commit的代码功能进行描述,方便代码管理,以及版本回退
git commit -m "本次commit的描述"
4、commit之后,然后将本地本开发分支代码push到远程对应分支。
git push
1、此时远程的72-banner分支代码已经是最新的代码啦,这时,由于我们的账号没有合并到master主分支的权限,需要在gitLab上发起合并请求(merge request)
2、需要有合并权限的人员,进行同意,即可将该分支的代码合并到master主分支上,同时可以删除该分支。
git branch -d 72-banner
在要发版的分支上打tag
git tag v2.11.20 //git tag 发版的版本号(方便以后查找)
//然后将tag 推到远程版本库中
git push --tags
如果tag打错了,怎么办?那自然要删掉啦
git tag -d v2.11.20 //本地删除tag
//本地tag删除后,执行下面命令可删除远程版本库中的对应tag
git push origin :refs/tags/v2.11.20
如果想知道现在都打了多少tag,可以使用git tag查看
git tag //可以查看tag列表
1、当想从远程仓库里拉取一条本地不存在的分支时
git fetch origin branchname:branchname //git fetch origin 本地分支:远程分支
//拉取之后,还需要手动切换到对应分支
git checkout branchname //git checkout 本地分支
2、当本地分支里有和远程分支一样的分支,可以这样拉去该远程分支到本地:
//首先确保在想要拉去的分支上,如branchname
git pull origin branchname:branchname // git pull origin 本地分支:远程分支
git checkout -b branchname tag // git checkout -b 新分支的名称 要拉取的tag
// 例如: git checkout -b 300-bug v3.0
本人比较穷,买不起高大上的mac,linux也是半吊子,还是老老实实地玩我的windows吧。本篇主要针对win用户。其他用户请略过。
//使用--global参数,则表示你电脑上当前用户都会使用这个配置信息
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
结束啦。
$ git status //git status命令查看仓库的当前状态。以下是执行该命令后出现的结果之一。
//在git add之前使用该命令,会出现以下结果
On branch master //显示当前所在分支(例如:此处显示当前分支为mater主分支)
Changes not staged for commit: //在进行commit之前,有部分改变还没有加入暂存区,可以利用以下命令进行操作
(use "git add <file>..." to update what will be committed) //git add 文件名---将该文件先添加到暂存区
(use "git checkout -- <file>..." to discard changes in working directory) //git checkout --文件名---将文件移除
modified: readme.txt //标明发生改变的文件名(或者文件列表)
no changes added to commit (use "git add" and/or "git commit -a")
//在git add之前使用该命令,如果有新文件添加到工作区,则会出现以下结果
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
Untracked files: //从未添加过的文件列表(新增加的)
(use "git add <file>..." to include in what will be committed) //可以通过git add 该文件夹名 -----将文件添加到暂存区
LICENSE
no changes added to commit (use "git add" and/or "git commit -a")
//在使用git add之后,使用该命令,会出现以下结果
On branch master //显示当前所在分支(例如:此处显示当前分支为mater主分支)
Changes to be committed: //已经做好commit准备
(use "git reset HEAD <file>..." to unstage) //可以通过git reset HEAD 文件名---将该文件移出堆栈
modified: readme.txt //标明发生改变的文件名(或者文件列表)
//执行git commit后,使用该命令,会出现以下结果
On branch master //显示当前所在分支(例如:此处显示当前分支为mater主分支)
nothing to commit, working tree clean //没有任何需要commit的,工作目录已经清空
$ git diff readme.txt //git diff 文件名---查看该文件修改了什么内容(以下结果暂时不太懂,稍后注释)
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
$ git commit -m "add distributed" //git commit -m "本次提交的描述信息",以下是执行命令后的可能结果
[master e475afc] add distributed //[master(当前所在分支) 版本号] 本次提交的描述信息
1 file changed, 1 insertion(+), 1 deletion(-) //1个文件改变,1行增加,1行删除
$ git log //git log 查看从最近到最远的提交日志
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) //commit提交的版本号 (HEAD -> 当前所在分支)
Author: Michael Liao <askxuefeng@gmail.com> //该commit的作者
Date: Fri May 18 21:06:15 2018 +0800 //该commit提交的时间
append GPL //该commit的描述
commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:03:36 2018 +0800
add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 20:59:18 2018 +0800
wrote a readme file
如果觉得上面打印的日志内容太多,可以加上–pretty=oneline
$ git log --pretty=oneline //查看日志仅一行显示
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL //版本号 (HEAD -> 当前所在分支) 该commit的描述
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
先通过git log找到自己需要回退的版本
//如果回退到距离最近比较近的版本,可以使用以下命令:
$ git reset --hard HEAD~1 //git reset --hard HEAD~回退数(从当前版本回退到上一个版本,则为1,回退上上个版本,则为2,以此类推)
HEAD is now at e475afc add distributed //(回退成功) 当前所在版本号为 e475afc 该版本的commit描述
//如果回退的版本比较远,可以使用版本号进行回退操作:
$ git reset --hard 1094a //git reset --hard 需要回退到的版本号
HEAD is now at 83b0afe append GPL //(回退成功) 当前所在版本号为 83b0afe 该版本的commit描述
如果回退了版本后,又后悔了,想要重新返回之前的版本怎么办?这个时候就要用到reflog,找到需要回退的版本号,然后执行上面的git reset操作就可以啦
$ git reflog //git reflog查看命令操作历史
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file
git rebase b // 将b分支合并到当前分支
git merge b // 将b分支合并到当前分支
在项目开发中,遇到多人协同合作的情况,就需要利用版本控制工具来汇总大家的代码,之前一直使用svn,后来git火了之后,就学习了一下,对于命令行操作不熟练的童鞋,自然有些头大,那么GUI工具必然成为了大家的首选。下面就是介绍一款GUI工具————SourceTree。
https://www.sourcetreeapp.com/自行下载安装。
安装软件想必做开发的人自然不用多说,选择安装目录后,一路next。
但是, 安装过程中,会有一步让注册之类的,那么如果没有访问外国网站的用户,自然注册不了的。那有没有跳过注册的方法,自然是有的,且继续看、
1、安装到注册页面时,如图。此时,安装页面什么也不要操作,直接去打开“我的电脑”。
2、进入C盘,打开当前电脑用户的文件夹,进入AppData这个文件夹(注意: 如果此时你没有看到该文件夹,可能是你电脑设置了默认隐藏了该文件夹,此时你需要设置显示隐藏的文件夹),继续进入Local文件夹,接着进入Atlassian这个文件夹,找到SourceTree并进入,看看有没有 accounts.json 这个文件。如果有,直接打开,并将以下代码进行替换。如果没有的话,自己手动创建一个,然后将以下代码写入文件并保存。
3、accounts.json 代码如下:
[
{
"$id": "1",
"$type": "SourceTree.Api.Host.Identity.Model.IdentityAccount, SourceTree.Api.Host.Identity",
"Authenticate": true,
"HostInstance": {
"$id": "2",
"$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountInstance, SourceTree.Host.AtlassianAccount",
"Host": {
"$id": "3",
"$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountHost, SourceTree.Host.AtlassianAccount",
"Id": "atlassian account"
},
"BaseUrl": "https://id.atlassian.com/"
},
"Credentials": {
"$id": "4",
"$type": "SourceTree.Model.BasicAuthCredentials, SourceTree.Api.Account",
"Username": "",
"Email": null
},
"IsDefault": false
}
]
4、上述步骤全部操作完毕后(桌面可能会多一个快捷启动方式),然后重新启动sourceTree,此时惊人的事情发生了,直接跳过了注册页面,打开了软件。
接下来,你就可以愉快地玩耍啦