git的使用

在多人协作作业中,我们需要用到版本控制工具,这里我以git做演示

在这里我们就不演示安装了,直接开始

  1. 第一次使用Git设置你的名字和email,这些就是你在提交commit时的签名,每次提交记录里都会包含这些信息。使用git config命令进行配置:
  $ git config --global user.name "xiaoming"
  $ git config --global user.email "xiaoming@163.com"

执行命令后,会在家目录(/c/Users/Administrator
) 【如果来linux上:就是(/home)路径】, 建立一个叫.gitconfig 的文件(该文件为隐藏文件,需要使用ls -al查看到). 内容如下,cat查看文件内容:

$ cat ~/.gitconfig
 [user]
        email = xiaoming@163.com
        name = xiaoming

上面的配置文件就是Git全局配置的文件,git config --global <配置名称> <配置的值>

  1. 我们需要一个Git仓库。有两种方法可以得到它:一种是从已有的Git仓库中clone (克隆,复制) / 码云;还有一种是新建一个仓库,把未进行版本控制的文件进行版本控制。

    为了得到一个项目的拷贝(copy),我们需要知道这个项目仓库的地址(Git URL). Git能在许多协议下使用,所以Git URL可能以ssh://, http(s)?/, git://. 有些仓库可以通过不只一种协议来访问。

在码云上提供了一个名字为 chinatelecom的项目,点下面的这个链接,开始进行测试:
链接到我的码云。
https://gitee.com/ctg8088/chinatelecom/invite_link?invite=860ea391d9958c9ec2b37819e0ff82e3ed3f86a28e824067b7993663152babc550ca46dce2ca8058383038e943f171de
开始进行clone的URL
https://gitee.com/ctg8088/chinatelecom.git

     git clone https://gitee.com/ctg8088/chinatelecom.git

clone 操作完成后,会发现当前目录下多了一个 chinatelecom文件夹,这个文件夹里的内容就是我们刚刚clone下来的代码
可以点进去看到 cd chinatelecom

3.初始化新的仓库:
可以对一个已存在的文件夹用下面的命令让它置于Git的版本控制管理之下。
$ cd D:
$ mkdir project

进入到代码目录,创建并初始化Git仓库:
$ cd project
$ git init
Git会输出:
Initialized empty Git repository in D:/project/.git/

通过ls -la命令会发现project目录下会有一个名叫.git 的目录被创建,这意味着一个仓库被初始化了。可以进入到.git目录查看下有哪些内容。

$ ls -la
total 28
drwxr-xr-x 1 Administrator 197121 0 12月  5 20:42 ./
drwxr-xr-x 1 Administrator 197121 0 12月  5 20:41 ../
drwxr-xr-x 1 Administrator 197121 0 12月  5 20:42 .git/

$ cd .git/

$ ls -la
total 11
drwxr-xr-x 1 Administrator 197121   0 12月  5 20:42 ./
drwxr-xr-x 1 Administrator 197121   0 12月  5 20:42 ../
-rw-r--r-- 1 Administrator 197121 130 12月  5 20:42 config
-rw-r--r-- 1 Administrator 197121  73 12月  5 20:42 description
-rw-r--r-- 1 Administrator 197121  23 12月  5 20:42 HEAD
drwxr-xr-x 1 Administrator 197121   0 12月  5 20:42 hooks/
drwxr-xr-x 1 Administrator 197121   0 12月  5 20:42 info/
drwxr-xr-x 1 Administrator 197121   0 12月  5 20:42 objects/
drwxr-xr-x 1 Administrator 197121   0 12月  5 20:42 refs/


  1. git的基本流程如下:
    创建或修改文件
    使用git add命令添加新创建或修改的文件到本地的缓存(Index)
    使用git commit命令提交到本地代码库
    (可选,有的时候并没有可以同步的远端代码库)使用git push命令将本地代码库同步到远端代码库

    进入我们刚才建立的project目录,分别创建文件file1,file2,file3:
    $ touch file1.txt file2.txt file3.txt
    $ ls
     file1.txt  file2.txt  file3.txt
    修改文件,可以使用vim编辑内容,也可以直接echo添加测试内容。
     $ echo "test" >> file1
     $ echo "test" >> file2
     $ echo "test" >> file3
   
   此时可以使用git status命令查看当前git仓库的状态:
   $ git status
On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        file1.txt
        file2.txt
        file3.txt
nothing added to commit but untracked files present (use "git add" to track)

可以发现,有三个文件处于untracked状态,下一步我们就需要用git add命令将他们加入到缓存区(Index)。

使用git add命令将新建的文件添加到:
   $ git add file1.txt file2.txt file3.txt
然后再次执行git status就会发现新的变化:
$ git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   file1.txt
        new file:   file2.txt
        new file:   file3.txt
 
 你现在为commit做好了准备,你可以使用 git diff 命令再加上 --cached 参数,看看缓存区中哪些文件被修改了。进入到git diff --cached界面后需要输入q才可以退出:
diff --git a/file1.txt b/file1.txt
new file mode 100644
index 0000000..8e27be7
--- /dev/null
+++ b/file1.txt
@@ -0,0 +1 @@
+text
diff --git a/file2.txt b/file2.txt
new file mode 100644
index 0000000..8e27be7
--- /dev/null
+++ b/file2.txt
@@ -0,0 +1 @@
+text
diff --git a/file3.txt b/file3.txt
new file mode 100644
index 0000000..8e27be7
--- /dev/null
+++ b/file3.txt
@@ -0,0 +1 @@
+text

如果没有--cached参数,git diff 会显示当前你所有已做的但没有加入到索引里的修改。
如果你要做进一步的修改, 那就继续做, 做完后就把新修改的文件加入到缓存区中。

当所有新建,修改的文件都被添加到了缓存区,我们就要使用git commit提交到本地仓库:
$ git commit -m "add 3 files"

需要使用-m添加本次修改的注释,完成后就会记录一个新的项目版本。除了用git add 命令,我们还可以用下面的命令将所有没有加到缓存区的修改也一起提交,但-a命令不会添加新建的文件。
git commit -a -m "add 3 files"
再次输入git status查看状态,会发现当前的代码库已经没有待提交的文件了,缓存区已经被清空。
$ git status
On branch master
nothing to commit, working tree clean

如果是修改文件,也需要使用git add命令添加到缓存区才可以提交。如果是删除文件,则直接使用git rm命令删除后会自动将已删除文件的信息添加到缓存区,git commit提交后就会将本地仓库中的对应文件删除。

如果我们希望将本地仓库关联到远端服务器,我们可以使用 git remote 命令,不同于刚刚的 git clone 命令,直接将远端的仓库克隆下来。 我们当前的仓库是使用 git init 初始化的本地仓库,所以我们需要将本地仓库与远程仓库关联,使用如下命令(需要修改下面的远程仓库地址为自己的仓库地址)
 git remote add origin https://gitee.com/ctg8088/chinatelecom.git
git remote add 命令用于添加远程主机,origin 是主机名,此处我们可以自定义,不一定非要使用 origin,而 https://gitee.com/ctg8088/chinatelecom.git,是我自己的远程仓库,此处 需要替换为你自己的远程仓库地址

这个时候如果本地的仓库连接到了远程Git服务器,可以使用下面的命令将本地仓库同步到远端服务器:
     # 需要输入仓库对应的用户名和密码
      $ git push origin master

5.分支与合并
Git 的分支可以让你在主线(master分支)之外进行代码提交,同时又不会影响代码库主线。分支的作用体现在多人协作开发中,比如一个团队开发软件,你负责独立的一个功能需要一个月的时间来完成,你就可以创建一个分支,只把该功能的代码提交到这个分支,而其他同事仍然可以继续使用主线开发,你每天的提交不会对他们造成任何影响。当你完成功能后,测试通过再把你的功能分支合并到主线。


    一个Git仓库可以维护很多开发分支。现在我们来创建一个新的叫dd的分支:
     $ git branch dd        
   运行git branch命令可以查看当前的分支列表,以及目前的开发环境处在哪个分支上
   $ git branch
      dd
     * master

      dd 分支是你刚才创建的,master分支是Git系统默认创建的主分支。星号标识了你当工作在哪个分支下,输入git checkout 分支名可以切换到其他分支:
     $ git checkout dd
       Switched to branch 'dd'
       Administrator@SC-201807231600 MINGW64 /d/project (dd)
      切换到dd分支,切换完成后,先编辑里面的一个文件,再提交(commit)改动,最后切换回 “master”分支:
      $ echo "update" >>file1.txt

Administrator@SC-201807231600 MINGW64 /d/project (dd)
$ git status
On branch dd
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:   file1.txt

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

Administrator@SC-201807231600 MINGW64 /d/project (dd)
$ git add file1.txt
warning: LF will be replaced by CRLF in file1.txt.
The file will have its original line endings in your working directory.

Administrator@SC-201807231600 MINGW64 /d/project (dd)
$ git commit -m "update file1.txt"
[dd a1326ea] update file1.txt
 1 file changed, 1 insertion(+)

$ git checkout master
Switched to branch 'master'

查看下file1.txt中的内容会发现刚才做的修改已经看不到了。因为刚才的修改时在experimental分支下,现在切换回了master分支,目录下的文件都是master分支上的文件了。
$ cat file1.txt
text

分支合并:

$ cat file1.txt
text

修改文件file2.txt
Administrator@SC-201807231600 MINGW64 /d/project (master)
$ echo "update agian" >>file2.txt
查看当前状态
Administrator@SC-201807231600 MINGW64 /d/project (master)
$ 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:   file2.txt

no changes added to commit (use "git add" and/or "git commit -a")
添加并提交file2.txt的修改
Administrator@SC-201807231600 MINGW64 /d/project (master)
$ git add file2.txt
warning: LF will be replaced by CRLF in file2.txt.
The file will have its original line endings in your working directory.

Administrator@SC-201807231600 MINGW64 /d/project (master)
$ git commit -m "update file2.txt on master"
[master 0f0339b] update file2.txt on master
 1 file changed, 1 insertion(+)
查看file2.txt的内容
Administrator@SC-201807231600 MINGW64 /d/project (master)
$ cat file2.txt
text
update agian

这时,两个分支就有了各自不同的修改,分支的内容都已经不同,如何将多个分支进行合并呢?
可以通过下面的git merge命令来合并dd到主线分支master:
Administrator@SC-201807231600 MINGW64 /d/project (master)
$ git merge -m "hebing" dd
Merge made by the 'recursive' strategy.
 file1.txt | 1 +
 1 file changed, 1 insertion(+)

Administrator@SC-201807231600 MINGW64 /d/project(master)
$ cat file1.txt
text
update

Administrator@SC-201807231600 MINGW64 /d/project(master)
$ cat file2.txt
text
update agian
-m参数仍然是需要填写合并的注释信息。

由于两个 branch 修改了两个不同的文件,所以合并时不会有冲突,执行上面的命令后合并就完成了。

如果有冲突,比如两个分支都改了一个文件 file3,则合并时会失败。首先我们在master分支上修改file3文件并提交:
# 切换到master分支
$ git checkout master
# 修改file3文件
$ echo "master: update file3" >> file3
# 提交到master分支
$ git commit -a -m 'update file3 on master'

然后切换到dd,修改file3并提交:
# 切换到dd分支
$ git checkout dd
# 修改file3文件
$ echo "experimental: update file3" >> file3
# 提交到experimental分支
$ git commit -a -m 'update file3 on dd'
切换到master进行合并:
$ git checkout master
$ git merge dd
合并失败后先用git status查看状态,会发现file3显示为both modified,查看file3内容会发现
$ cat file3.txt
text
<<<<<<< HEAD
update file3.txt
=======
update:fileafdfdkfajg
>>>>>>> dd

vim编辑这个文件,去掉git自动产生标志冲突的<<<<<<等符号后,根据需要只保留我们需要的内容后保存,然后使用git add file3.txt和git commit命令来提交合并后的file3内容,这个过程是手动解决冲突的流程
    # 编辑冲突文件
$ vim file3.txt
# 提交修改后的文件
$ git add file3.txt
$ git commit -m 'merge file3.txt'

当我们完成合并后,不再需要dd时,可以使用下面的命令删除:
git branch -d只能删除那些已经被当前分支的合并的分支. 如果你要强制删除某个分支的话就用git branch –D

如果你觉得你合并后的状态是一团乱麻,想把当前的修改都放弃,你可以用下面的命令回到合并之前的状态:

 $ git reset --hard HEAD^   
 注意(~1上一个)   有^和~ 两种用法
 # 查看file3的内容,已经恢复到合并前的master上的文件内容
 $ cat file3

git log命令可以显示所有的提交(commit):
如果提交的历史纪录很长,回车会逐步显示,输入q可以退出。

还有一些其他小的命令,可以自行百度学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值