【无标题】

设置机器信息

$ git config --global user.name "username"
$ git config --global user.email "email@example.com"

创建版本库

1.创建新目录
$ mkdir mymenu
$ cd mymenu
$ pwd
/Users/hxk/mymenu

pwd 显示当前目录

2.初始化仓库

git init命令把这个目录变成git可以管理的仓库

$ git init
Initialized empty Git repository in /Users/hxk/mymenu/.git/

初始化了一个空的仓库,目录下多了.git目录
系统自动创建了唯一一个master分支
版本控制系统只能跟踪文本文件的改动,且编码方式是utf-8

3.文件的基本操作

创建一个test.txt文件,内容如下:

Hello World
1.添加文件到仓库
$ git add test.txt
2.提交到仓库
$ git commit -m "a new file"

-m后面输入的是本次提交的说明,提交成功后会显示:

1 file changed:1个文件被改动(我们新添加的readme.txt文件);

2 insertions:插入了两行内容(readme.txt有两行内容)。

为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

如果提交的备注写错了,可以用以下命令修改刚刚提交的备注

$ git commit --amend
3.修改文件

将test.txt文件修改如下:

Hello World ABC

提交

$ git add test.txt
$ git commit -m "append ABC"

每次commit都会生成一个“快照”

4.查看历史记录
$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: hxk <hxk@gmail.com>
Date:   Fri July 20 21:06:15 2018 +0800
 
    append ABC
 
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: hxk <hxk@gmail.com>
Date:   Fri July 20 20:59:18 2018 +0800
 
    a new file

git log显示最近到最远的提交日志,我们可以看到两次提交,最后一次是append ABC

git的版本号是用SHA1计算出来的一个16进制数

如果嫌输出信息太多,可以加上–pretty=oneline

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append ABC
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 a new file
5.回退历史版本
$ git reset

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb…,上一个版本就是HEAD^ ,上上一个版本就是HEAD^^
当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

回退上一版本

$ git reset --hard HEAD^
HEAD is now at eaadf4e a new file

这时再次查看历史版本

$ git log
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: hxk <hxk@gmail.com>
Date:   Fri July 20 20:59:18 2018 +0800
 
    a new file

之前那个版本已经看不到了,这时如果想回到之前那个版本,需要知道版本号,git内部有个指向当前版本的head指针,将指针从当前版本指回去,所以git回退版本特别快

$ git reset --hard 1094adb7
6.查看历史命令

要是不记得刚才的版本号了,可以使用以下命令:

$ git reflog
7.查看状态
$ git status
4.工作区和暂存区

Git和SVN的一个不同之处就是有暂存区的概念

名词解释:

工作区(Working Directory):指的是在电脑里能看到的目录,比如mymenu文件夹就是一个工作区

版本库(Repository):.git目录,Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

git add是把需要提交的文件添加到暂存区
在这里插入图片描述
git commit是把暂存区的所有内容提交到当前分支
-------------------------测试一下--------------------------

在工作区新增一个testfile文本文件

先用git status查看一下状态:

$ git status
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:   test.txt
 
Untracked files:
  (use "git add <file>..." to include in what will be committed)
 
    testfile
 
no changes added to commit (use "git add" and/or "git commit -a")

Git非常清楚地告诉我们,test.txt被修改了,而testfile还从来没有被添加过,所以它的状态是Untracked。

将testfile提交后再查看状态

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
 
    new file:   testfile
    modified:   test.txt

提交后没有对工作区进行修改的话,查看状态,工作区是干净的

$ git status
On branch master
nothing to commit, working tree clean

-------------------------------测试结束------------------------------------

5.分支管理

1)创建分支 git branch
切换分支 git checkout
首先,我们创建dev分支,然后切换到dev分支:

$ git checkout -b dev
Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

2)查看分支 git branch
然后,用git branch命令查看当前分支:

$ git branch
* dev
  master

git branch命令会列出所有分支,当前分支前面会标一个*号。
然后,我们就可以在dev分支上正常提交,比如对test.txt做个修改,再提交,dev分支的工作完成后,我们就可以切换回master分支:

$ git checkout master
Switched to branch 'master'

切换回master分支后,再查看一个test.txt文件,刚才添加的内容不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变:
3)合并某个分支到当前分支 git merge
现在,我们把dev分支的工作成果合并到master分支上:

$ git merge dev

git merge命令用于合并指定分支到当前分支。合并后,再查看test.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。

4)删除分支 git branch -d
合并完成后,就可以放心地删除dev分支了:

$ git branch -d dev
Deleted branch dev (was b17d20e).

删除后,查看branch,就只剩下master分支了:

$ git branch
* master

因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

  1. 解决冲突
    创建一个新的分支feature1
$ git checkout -b feature1
Switched to a new branch 'feature1'

将test.txt修改了一下,加上“AND Simple”,在feature1分支上提交

Hello World ABC
This is the second line AND Simple

切换到master分支

$ git checkout master

在master分支上,将test.txt的最后一行加上“& Simple”,提交:

Hello World ABC
This is the second line & Simple

当两个分支都分别有了新的提交:
这种情况下无法进行快速合并,只能试图把各自的修改合并起来,这样有可能会造成冲突:

$ git merge feature1
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.

这时我们必须手动解决冲突后再提交,git status可以查看冲突的文件:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)
 
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)
 
Unmerged paths:
  (use "git add <file>..." to mark resolution)
 
    both modified:   test.txt
 
no changes added to commit (use "git add" and/or "git commit -a")

查看test.txt文件的内容:

Hello World ABC
<<<<<<< HEAD
This is the second line & Simple
=======
This is the second line AND Simple
>>>>>>> feature1

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存:

This is the second line and Simple

再提交

$ git add test.txt 
$ git commit -m "conflict fixed"
[master cf810e4] conflict fixed

现在,master分支和feature1分支变成了下图所示:
在这里插入图片描述
用git log --graph --pretty=oneline --abbrev-commit可以看到分支的合并情况,包括分支合并图(–graph)、一行显示(–pretty=oneline)、提交校验码缩略(–abbrev-commit)显示:

$ git log --graph --pretty=oneline --abbrev-commit
*   cf810e4 (HEAD -> master) conflict fixed
|\  
| * 14096d0 (feature1) AND simple
* | 5dc6824 & simple
|/  
* b17d20e branch test
* d46f35e (origin/master) remove test.txt
* b84166e add test.txt
* 519219b git tracks changes
* e43a48b understand how stage works
* 1094adb append ABC
* eaadf4e a new file
来源

链接: 来源

https://blog.csdn.net/qq_34964197/article/details/81104419

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值