Git学习笔记

一、 创建版本库

1. 选择一个合适的地方创建一个空目录(在一个已有文件的非空目录下也可以)
mkdir myproject
2. 使用git init命令把上述空目录变成Git可以管理的仓库
cd myproject
git init
3. 使用git config --global user.name "yourname"git config --global user.email "your email" 设置自己的信息,便于管理更改信息。
此时,该仓库中多了一个名为.git的隐藏目录,用于跟踪管理版本库。

二、 提交文件

在本地仓库myproject下提交文件:
1. 使用命令git add 把文件添加到暂存区。
git add file_name
2. 使用命令git commit把文件添加到仓库。
git commit –m “some info about the file”

三、 时光穿梭机

git status 命令可以让我们时刻掌握仓库的当前状态。
比较文件修改前后的差异,可以使用git diff file_name

1. 版本回退

git log 查看历史记录,显示从最近到最远的提交日志。使用git log –pretty=oneline可以简化显示提交日志。(只显示版本号和修改信息)
在Git中,用HEAD表示当前版本,也就是最新提交的版本。上一个版本就是HEAD^,前两个版本就是HEAD^^,前n个版本就是HEAD~n。
使用命令git reset --hard HEAD^就可以回到前一个版本。也可以使用git reset --hard commit_id。如果从1号版本回到2号版本,现在又想回到1号版本,此时,git log 查看历史记录,已经没有1号版本对应commit_id,我们可以使用命令git reflog查看命令历史,以确定1号版本的commit_id,再使用git reset --hard commit_id(1号版本的commit_id)回到号版本。

2. 工作区和暂存区

工作区:就是电脑中能够看到的目录。如前面的myproject文件夹就是一个工作区。
工作区有一个隐藏文件夹.git,这个不是工作区,而是Git版本库。该版本库中存了很多东西,其中最重要的就是成为stage(或者index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向这个分支master的一个指针HEAD。
我们把文件往Git版本库里添加的时候,是分两步执行:
A. git add file_name把file_name文件添加进去,实际上就是把文件添加到暂存区。
B. git commit –m “some info about the file”提交更改,实际上就是把暂存区的所有内容提交到当前分支。

3. 管理修改

Git比其他版本控制器优秀是因为Git跟踪并管理的是修改而非文件。

4. 撤销修改

a) 针对修改文件后,还未添加到暂存区,即还没使用git add file_name,想要撤销对文件的修改,可以使用命令:git checkout –file_name 撤销修改。
b) 针对修改文件后,已经添加倒了暂存区,此时想要撤销修改,分两步,第一步使用git reset HEAD file_name将文件撤出暂存区;第二步使用命令:git checkout --file_name撤销修改。
c) 针对文件修改后,已经提交到了版本库,即使用了git commit –m “xxxx”,此时想要撤销修改,可以使用版本回退,即:git reset --hard HEAD^撤销修改。

5. 删除文件

有两种情况:
a) 误删。在工作空间中直接使用rm –rf file_name删了文件file_name,事后想要恢复文件,则使用git checkou --file_name恢复被删的文件(注意,该文件file_name必须要是已经被Git跟踪才行,即曾经使用git add过该文件)。
b) 确定想要删除。使用git rm file_name,然后使用git commit --“xxxx”。同时删除工作空间和版本库中该文件。
 注意,确定删除后,其实文件还是存在的,还是可以恢复,可以使用git log查看该文件的commit_id,然后使用git reset --hard commit_id回到该文件的最近版本。(亲测可行)

四、 添加远程仓库

*注意,远程版本库的默认名称为origin,
现在的情形是我们已经又了一个本地的Git仓库,在GitHub上创建了一个Git仓库(我们是在本地搭建了一个Git服务器,并在Git服务器上建了一个testproject仓库,下面我们使用本地Git服务器做说明)。让本地仓库和远程仓库同步。
首先,在本地仓库下使用命令
git remote add origin git@:testproject.git 关联远程仓库。
然后,把本地仓库所有内容推送到远程仓库。
git push –u origin master
*注意,把本地仓库推送到远程,用git push命令,实际上是把当前分支master推送到远程。由于远程仓库为空,首次推送加了-u参数,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地master分支与远程master分支挂链起来,以后推送或者拉取就可以简化命令了。
如远程仓库与本地仓库不同步,即远程仓库含有本地仓库不存在的内容。此时直接推送会出错。需要先使用命令git pull origin master,将远程仓库中存在,而本地仓库不存在的文件拉取到本地,与本地master合并,再使用git push origin master才能推送成功。

五、 从远程克隆

在本地任何目录下使用:
git clone git@:testproject.git可以将远程仓库testproject克隆到当前目录下。

六、 分支

1. 创建并切换到dev分支

git checkout –b dev 创建并切换到dev分支
或使用
git branch dev 创建dev分支
git checkout dev 切换到dev分支

2. 查看当前分支

使用命令:git branch

3. 合并分支

将dev分支合并到当前(master)分支:
git merge dev

4. 删除分支dev

使用命令:git branch –d dev

5. 解决冲突

当不同分支中对同一文件作修改后,使用git merge 自动合并分时,会发生冲突,并将双方修改在该文件中显示出来,供使用者作选择。修改后,就可以使用git add file_name,git commit –m “xxxxxx”将该文件file_name提交到版本库了。

6. Bug分支

在软件开发过程中,遇到bug需要修复,但是当前工作未完成,还不能提交。此时若新建分支去修正bug,会导致当前分支工作空间修改的内容被丢弃。因此需要现场保护(即将当前工作状态保存,以便事后恢复)。
保护当前工作状态:git stash
查看保存状态:git stash list
恢复保存状态:a. git stash apply 恢复标识为ID的保存状态
b. git stash drop 删除stash中标识为ID的保存状态
或者使用 git stash pop 恢复最近的一个保存状态,并在stash中删除该状态。

7. 多人协作

当我们从远程仓库克隆时,实际上Git自动把本地master分支和远程的master分支对应起来,并且远程仓库的默认名称是origin。
查看远程仓库信息: git remotegit remote –v

8.推送分支(将本地分支如dev推送到远程仓库)

git push origin dev

9.抓取分支

多人协作时,大家都会在master和dev分支上推送各自的修改。当我们将自己的分支dev推送到远程仓库后,其他小伙伴克隆了远程仓库(只是克隆下了master分支,dev分支看不到),想在dev上开发,就必须创建远程orgin到本地dev的分支,使用命令:git checkout -b origin/dev
当小伙伴推送了dev上的内容,而我们也推送了自己dev的内容,恰巧两人修改了同样的文件,产生冲突,导致无法推送成功,此时需要使用命令: git pull 把新提交的内容从origin/dev分支上抓取下来,再推送。如果git pull也失败了,说明没有指定本地dev与远程origin/dev分支的链接:
git branch --set-upstream dev origin/dev
再pull就行了。
以此,多人协作的工作模式基本上是这样:
a) 首先可以试图用git push origin brach-name推送自己的分支;
b) 如果推送失败,则先用git pull试图合并;
c) 如合并有冲突,则解决冲突,然后本地提交到本地版本库;
d) 如无冲突或已经解决冲突,再用git push origin branch_name
如果git pull出错,提示“no tracking information”,则说明那个本地分支和远程分支链接未创建,使用命令创建链接即可。
因本人初学Git,笔记中难免疏漏,大家可以参考下这个网址:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
如有问题,欢迎讨论。

你可能感兴趣的:(Git相关)