git使用笔记
git使用笔记(watch:liaoxuefeng.com)
创建版本库
1.创建一个目录,用来存项目
$ mkdir projectGit
2.git版本控制器上切换到该目录
$ cd projectGit
3.通过get init
命令把这个目录变成Git可以管理的仓库
$ git init
Initialized empty Git repository in /YourDir/projectGit/.git/
4.因为所有版本控制系统都是只能跟踪文本文件的改动的,所以在projectGit目录下创建一个readme.txt,内容随意
5.使用git add
命令把文件添加到仓库
$ git add readme.txt
6.使用git commit
把文件提交到仓库
$ git commit -m “wrote a readme file”
balabla一段提示:几个文件被修改,文件内容修改情况
修改文件再提交
1.打开readme.txt
,把里面的内容随意修改或者增加几个字符
2.运行git status
命令看看当前仓库状态
$ git status
1 |
|
文件表示readme.txt
被修改过了,但还没有准备提交的修改
3.可以使用git diff
来查看被修改的地方,diff->difference
$ git diff readme.txt
4.把文件重新提交到仓库
$ git add readme.txt
$ git commmit -m “midif file”
5.再次使用git status
查看仓库当前状态
$ git status
1 |
|
版本回退
1.用git log
命令查看历史记录
$ git log
1 |
|
以上显示最近一次提交时的备注是’append GPL’,上一次为’add distributed’。·1094ad..·为commit id,这个id也是有用的
2.使用git reset
命令回退上一个版本
$ git reset –hard HEAD^
HEAD is now at e475afc add distributed
HEAD代表此版本,上一个版本就是HEAD^,上上个版本就是HEAD^^,上一百个版本HEAD~100
3.当回退后,再使用git log
命令,则“append GPL”已经看不到了。如果回退后反悔了,想要重新回到原来的状态,则需要使用下面的命令
$ git reset –hard 1094a
HEAD is now at 83b0afe append GPL
版本号没必要写全,前几位能被区别就可以了,Git会自动去找。
4.如果不记得commit id
,则可以使用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
创建与合并分支
1.创建dev分支,然后再切换到dev分支
$ git checkout -b dev
Switched to a new branch ‘dev’
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to a new branch ‘dev’
2.用git branch
命令查看当前分支
$ git branch
1 |
|
git branch
命令会列出所有分支,当前分支会标一个*
号
3.然后,我们就可以在dev分支上做开发了。合并分支的话可以使用git merge
命令。首先切换回master分支上。
$ git checkout master
Switched to branch ‘master’
$ git merge dev
Updating d46f35e..b17d20e
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。
4.合并完成后,就可以放心地删除dev分支了:
$ git branch -d dev
Deleted branch dev (was b17d20e).
解决冲突
1.当我们在dev分支上对某一个文件修改后,某人在master分支同一个文件同一个地方或不同的地方做另外的修改后,这时合并两个分支将会有冲突,如下:
$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result
2.另外git status
命令也可以告诉我们冲突的文件
$ git status
1 |
|
3.打开文件可提示如下内容:
1 |
|
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
4.把文件修改后再提交则可解决冲突,用git log –graph命令可以看到分支合并图。
$ git log –graph –pretty=oneline –abbrev-commit
1 |
|
多人协作
推送分支
1.查看远程库的信息
1 |
|
2.显示远程库更详细的信息
1 |
|
上面显示了可以抓取和推送的origin的地址
3.把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上
1 |
|
推送dev分支
1 |
|
在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!
抓取分支
1.在另一个目录下克隆
1 |
|
当从远程库clone时,默认情况下,只能看到本地的master分支。这是需要使用如下命令切换到dev分支上开发
1 |
|
2.两个不同目录推送提交,模拟冲突
1 |
|
当第二个人推送时会提示如下信息:
1 |
|
3.解决办法:先用git pull
把最新的提交从origin/dev
抓下来,然后,在本地合并,解决冲突,再推送
指定本地dev分支与远程origin/dev分支的链接
1 |
|
pull
1 |
|
解决冲突后再提交push
1 |
|
因此,多人协作的工作模式通常是这样:
1.首先,可以试图用git push origin
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin
如果git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
。
这就是多人协作的工作模式,一旦熟悉了,就非常简单