《Git学习记录》——第一个Git项目

一、安装Git
https://pc.qq.com/detail/13/detail_22693.html
下载git安装包之后按提示一直next安装即可。

利用自带的命令行工具 Bash 使用git
Git Bash
然后用config命令配置以下用户名和用户邮箱:

$ git config --global user.name "Your Name"
$ git config --global user.email "Your Email"

二、创建版本库
git init

$ git init
Initialized empty Git repository in D:/workspace/git-demo/.git/

init命令会在该目录创建一个名为.git的隐藏目录,并在里面创建一个版本库。

三、提交代码
git提交代码有两个步骤,先是将改动add到暂存区,然后commit至本地版本库。

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        newA.txt
        newB.txt
        newC.txt

nothing added to commit but untracked files present (use "git add" to track)

这里t通过status命令可以看到目录里有三个文件是不在版本库里的,

$ git add newA.txt

$ git commit --message="commit newA"
[master a9f14f9] commit newA
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 newA.txt

我们add了newA到版本库,之后通过commit命令,将项目提交到版本库里。

下面再看下修改文件时的提交:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   newA.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        newB.txt
        newC.txt

这里通过status命令,看到A文件有改动(modified),而B跟C文件还是不被版本控制的状态。

$ git commit
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   newA.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        newB.txt
        newC.txt

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

这里先直接执行commit命令,可以看到是没有改动可以提交的。

$ git add newA.txt

$ git commit --message="commit newA modify"
[master 25ca2df] commit newA modify
 1 file changed, 1 insertion(+)

这里先对A文件执行了add命令,然后再执行commit命令的时候,发现A文件的改动被提交了。

从这里看,git的提交,跟svn是有很大区别的。svn可以直接提交某一个文件的修改,提交命令是针对具体的文件或文件夹的。而git不是,git需要先对修改过的文件和新的文件,执行add命令,这样接下来的commit命令才会对这些文件生效。

而删除文件则是执行rm命令。

$ git rm newA.txt
rm 'newA.txt'

$ git commit --message="rm newA"
[master d2f8100] rm newA
 1 file changed, 1 deletion(-)
 delete mode 100644 newA.txt

三、查看状态
通过status命令,可以查看该项目(或目录)跟上次版本的所有差异。

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        newB.txt
        newC.txt

nothing added to commit but untracked files present (use "git add" to track)

四、显示日志
通过log命令,可以显示项目的提交历史。而有几个常用的辅助熟悉

$ git log
commit d2f81007cb6d9d3bbf2e47283ca39f7edd082992 (HEAD -> master)
Author: Janenesome <826995166@qq.com>
Date:   Tue Mar 3 22:55:38 2020 +0800

    rm newA

commit 25ca2dfb733ec811c7a144970437033a45a32944
Author: Janenesome <826995166@qq.com>
Date:   Tue Mar 3 22:52:54 2020 +0800

    commit newA modify
$ git log --oneline
d2f8100 (HEAD -> master) rm newA
25ca2df commit newA modify
a9f14f9 commit newA
ae21d11 rm all
da37eb7 commit newA modify
225a57b commit newB
56e8410 commit newA

五、Git的协作功能
1、克隆版本库
通过clone命令,可以创建另一个本地版本库,版本库里包含整个项目的所有历史信息。而文件则需要手动去拉取下来。从远程版本库中克隆也是一样的命令,地址换成远程的地址即可(例如git:// ssh://等等)

$ git clone git-demo/ git-demo-clone/
Cloning into 'git-demo-clone'...
done.

2、从另一个版本库中获取修改

$ cd git-demo

$ git add newB.txt

$ git commit --message="add newB"
[master ab94bc8] add newB
 1 file changed, 1 insertion(+)
 create mode 100644 newB.txt

我们先在git-demo库里添加了B文件。我们再去git-demo-clone库里添加以下C文件

$ cd ../git-demo-clone/

$ git add newC.txt

$ git commit --message="commit newC"
[master bf9b114] commit newC
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 newC.txt

接下来,我们在git-demo-clone中执行pull命令,将原版本库(git-demo)中的新提交传递到clone库中。由于创建时从git-demo中创建出来的,原本的路径就已经被储存在clone库了,所以直接pull命令会知道该从哪里拉取回新的提交。

$ git pull
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), 499 bytes | 1024 bytes/s, done.
From D:/workspace/git-demo
   ab94bc8..31e3efc  master     -> origin/master
Updating bf9b114..31e3efc
Fast-forward
 newB.txt | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

3、共享版本库
clone时带上bare参数可以创建共享版本库。
共享版本库的意思是没有开发者在上面开发的版本库,里面不带工作区,可以用来充当各个开发者传递提交(push命令)的地方,其他开发者可以从中拉回他们所做的提交。

$ git clone --bare git-demo-clone/ git-demo-bare
Cloning into bare repository 'git-demo-bare'...
done.

4、push命令推送修改
我们先在git-demo库改动一个文件

$ cd ../git-demo

$ git add newC.txt

$ git commit --message="commit C"
[master 78aaf47] commit C
 1 file changed, 1 insertion(+)

然后,我们用push命令,将该修改推送共享版本库。

$ git push ../git-demo-bare/ master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 266 bytes | 266.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ../git-demo-bare/
   31e3efc..78aaf47  master -> master

最后,我们到clone库中利用pull命令,取回刚才的修改。

$ cd ../git-demo-clone/

$ git pull ../git-demo-bare/ master
From ../git-demo-bare
 * branch            master     -> FETCH_HEAD
Updating 31e3efc..78aaf47
Fast-forward
 newC.txt | 1 +
 1 file changed, 1 insertion(+)

最后要注意的是,如果另一个开发者在我们之前已经做过一次push操作,此次push命令就会被拒绝,我们只能先做一次pull拉回操作,将其他开发者的更新取回,跟本地合并。之后才能进行push操作。

六、总结
1、工作区与版本库:工作区是一个包含.git子目录(内含版本库)中的目录。我们可以用Init命令在当前目录中创建版本库。
2、版本提交:一次版本提交通常定义了版本库中所有文件的一个版本,它详细说明了该版本是由和人在何时何地创建的。当然,我们需要用add命令来确定哪些文件将被纳入下一次提交,然后再用commit命令来创建新的版本提交。
3、查看信息:通过status命令,我们可以查看哪些文件已被本地修改,以及哪些修改将被纳入下次提交。另外,log命令可以用来显示提交历史。diff命令可用来显示两个版本文件之间的差异。
4、克隆:对于用clone命令来创建某一个版本库的副本,我们称之为该版本库的克隆体。在一般情况下,每个开发者都会拥有整个项目版本库的完整克隆体,开发者的工作区中将会包含完整的项目历史。这时我们可以各自独立在本地开展工作,无需连接服务器。
5、推送和拉回:push和pull命令,可用于在本地和远程版本库之间共享版本提交。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值