记录学习笔记、分享资源工具、交流技术思想、提升工作效率

git学习笔记

后端 xiaomudk 6年前 (2015-05-16) 3918次浏览 0个评论

1.安装git

centos下

# yum  install git

win下安装msysgit

2.创建版本库

# mkdir myblog
# cd myblog
# git init

3.配置提交时所使用的用户名和邮箱(必须)

1).配置当前目录下git用户名和邮箱(配置存放在.git/config里)

# git config user.name "xiaomu"
# git config user.email "[email protected]"

2).配置全局的git用户名和邮箱(配置存放在~/.gitconfig里)

# git config --global user.name "xiaomu"
# git config --global user.email "[email protected]"

这两种配置用户名和邮箱的方式任先一种即可

4.版本库里添加文件

# echo  "this is my blog" > readme.txt
# git add readme.txt     #把文件添加缓存区
# git commit -m "add a readme.txt file"   #-m 本次提交的说明

git add 和git commit 的区别:其实就是git系统分三个区:本地项目,缓存区,仓库区。远程仓库只认从缓存区过来的代码,add的作用就是选择本地项目里哪些文件将被添加到缓存区, git commit 是把缓存区的文件同步到远程区。可以参看Git详解之九:Git内部原理

5.查看git仓库中的文件状态

# git status
On branch master
nothing to commit, working directory clean

没有需要提交的东西

6.修改文件,并提交(git status和git diff的使用)

# echo "22222" >>readme.txt

现在使用 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:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

告诉我们 readme.txt被修改,但是还没有提交

使用 git diff 查看readme.txt修改了哪些内容

$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 2b899ee..f49d278 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
 this is my blog
+22222

+号这一行,表示新添加的(同理,如果有-号,刚表示去掉的)

提交到缓存区

# git add readme.txt

再使用 git status 来查看下状态

# git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   readme.txt

告诉我们readme.txt等待被提交至仓库

将更新提交至仓库

# git commit -m "add a line"
[master 4185e90] add a line
 1 file changed, 1 insertion(+)

如果这时再使用 git status 查看,就会告诉我们当前没有需要提交的修改

再修改一下 readme.txt增加

把readme.txt修改成这样
this is my blog
2222211111
bbbbb

git -a commit -m "add bbbb line"

查看提交日志


# git log 
commit e14dc966304c3593295a324b9148f4bfa5beb1c7
Author: xiaomu <[email protected]>
Date:   Sat May 16 13:55:15 2015 +0800

    add bbbb line

commit 4185e9086104e0b77e98ba0bb9df5b2782841ecc
Author: xiaomu <[email protected]>
Date:   Wed May 6 22:35:10 2015 +0800

    add a line

commit 4d9359a8b2c2e836326063ae2ada4f1a29529d06
Author: xiaomu <[email protected]>
Date:   Wed May 6 22:01:31 2015 +0800

    add a readme.txt file

7.版本回退

# git reset --hard HEAD^  # HEAD^ 回退到上个版本   HEAD^^ #回退到上上个版本   HEAD~100  #回退到100个版本前
# git reset --hard HEAD^
HEAD is now at 4185e90 add a line

# cat readme.txt   #可以看到回到了上一个版本
this is my blog
22222

# git reflog    #查看所有分支的所有操作记录(包括commit和reset的操作)
4185e90 [email protected]{0}: reset: moving to HEAD^
e14dc96 [email protected]{1}: commit: add bbbb line
4185e90 [email protected]{2}: commit: add a line
4d9359a [email protected]{3}: commit (initial): add a readme.txt file

#git reset --hard <commit id>   #回到commit id 对应的版本(可以来回回退)
#git reset --hard e14dc96      # 再返回最后一个版本
HEAD is now at e14dc96 add bbbb line

# cat readme.txt
this is my blog
2222211111
bbbbb

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,git只是修改HEAD指向的位置

文件对比

git diff HEAD -- readme.txt  #当前工作区和版本库对比
git diff  -- readme.txt      #当前工作区和暂存区对比 

撤销回退

(1).修改了工作区的文件后,没有add,没有commit(你commit也没有效果),想撤销工作区的修改:git checkout -- filename

(2).修改了工作区的文件后,已经add到暂存区但是没有commit,想撤销工作区的修改.这里有两种情况:
a.建议是先消除暂存区的记录:git reset HEAD filename,然后回到(1),撤销工作的修改;
b.如果没有注意先执行git checkout -- filename,暂存区修改依然存在,工作区内容回到的执行最后一次add之后的位置(因为可能多次add而没有commit),所以没什么效果,没有达到撤销回退的目的。

(3)修改工作区的内容后,既add又commit了,那就如同版本回退

删除文件

# git add test.txt
# git commit -m "add test.txt"
# rm test.txt
# git rm test.txt
# git commit -m "remove test.txt"

如果删错了,恢复

# git checkout -- test.txt   #用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。


本网站采用知识共享署名-相同方式共享 4.0 国际许可协议进行授权
转载请注明原文链接:git学习笔记
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址