当前位置:   article > 正文

Git教程(完整)

git教程

转载地址

Git教程(完整)
Git使用教程
git使用教程

Git简介

Git是目前世界上最先进的分布式版本控制系统,在处理各种项目时都十分高效,而且非常的高大上。

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。而且集中式版本控制系统是必须联网才能工作。

Git是分布式版本控制系统,它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。

Git安装(仅列出在Windows系统下的安装过程)

打开Git官网下载安装程序,然后按照默认选项安装即可。

安装完成后,打开Git bash软件,弹出一个类似cmd的命令行窗口,证明安装成功。

安装完成后,需要进行设置,在命令行输入以下代码:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
  • 1
  • 2

顾名思义,这是设置你的名字和Email地址。

我们可以查看一下用户名和密码:

$ git config user.name
$ git config user.email
  • 1
  • 2

假如我们这时候报错,证明Git的用户名和密码没有配置成功,我们还可以这样做:

在用户主目录下找到 .git 文件夹:

然后打开 config 文件,这是专门用来配置和读取相应的工作环境变量的,在里面加上如图所示内容:

这样也就完成了对Git用户名和邮箱的配置。

Git本地仓库操作

创建版本库

版本库(repository)也叫仓库,可以看做一个目录,这个目录里的所以文件都由Git进行管理,每个文件的修改、删除,Git都能跟踪。

1.选择一个合适的地方,创建一个空目录:

$ mkdir learngit //创建一个名叫learngit的空目录
$ cd learngit //把learngit设置为当前目录
$ pwd //查看当前目录
/c/Users/Administrator/learngit
  • 1
  • 2
  • 3
  • 4

如果使用Windows系统,要保证目录名不包含中文。

2.通过如下命令把这个目录变成Git可以管理的仓库:

$ git init
Initialized empty Git repository in /Users/Administrator/learngit/.git/
  • 1
  • 2

这样Git就把仓库建好啦,我们可以看到在当前目录下多了一个 .git 的目录,这个目录是Git来跟踪管理版本库的。
3.把文件添加到版本库

我们在 learngit 目录下编写一个 readme.txt 文件,内容如下:

Git is a version control system.
Git is free software.
  • 1
  • 2

(1) 用 git add 命令,把文件添加到仓库:

$ git add readme.txt
  • 1

执行以上命令,没有任何显示。

(2) 用 git commit 命令,把文件提交到仓库:

$ git commit -m "wrote a readme file" //-m后面输入的是本次提交的说明,可以输入任意内容。
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+) //1 file changed:1个文件被改动(新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt内有两行内容)
 create mode 100644 readme.txt
  • 1
  • 2
  • 3
  • 4

修改文件

我们已经成功添加并提交了一个 readme.txt 文件,继续修改 readme.txt 文件,改成如下内容:

Git is a distributed version control system.
Git is free software.
  • 1
  • 2

运行 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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

上面的命令告诉我们,readme.txt 文件被修改过了,但还没有准备提交的修改。

如果我们想知道上次是怎么修改readme.txt 文件的,需要用 git diff 命令:

$ git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system. //这一句是被删掉的
+Git is a distributed version control system. //这一句是新添加的
 Git is free software.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

接下来还是那两步:

(1) git add

$ git add readme.txt
  • 1

没有任何输出,这时候可以用 git status 查看一下当前仓库状态:

$ git status
On branch master
Changes to be committed: //将要被提交的文件包括 readme.txt
  (use "git reset HEAD <file>..." to unstage)
 
    modified:   readme.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(2) git commit

$ git commit -m "add distributed"
[master e475afc] add distributed
 1 file changed, 1 insertion(+), 1 deletion(-)
  • 1
  • 2
  • 3

再用 git status 查看一下当前仓库状态:

$ git status
On branch master
nothing to commit, working tree clean //当前没有需要提交的修改,而且,工作目录是干净的。
  • 1
  • 2
  • 3

版本回退

如果我们继续对 readme.txt 文件进行修改,改成如下内容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
  • 1
  • 2

然后添加并提交:

$ git add readme.txt
$ git commit -m "append GPL"
[master 1094adb] append GPL
 1 file changed, 1 insertion(+), 1 deletion(-)
  • 1
  • 2
  • 3
  • 4

到目前为止,readme.txt 文件一共有三个版本被提交到了 Git 仓库里,我们可以用 git log 命令进行查看:

$ git log //查看历史记录
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:06:15 2018 +0800
 
    append GPL
 
commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:03:36 2018 +0800
 
    add distributed
 
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 20:59:18 2018 +0800
 
    wrote a readme file
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

我们还可以加上 --pretty=oneline 参数:

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file //一大串数字是 commit id ,而且每个人的都不一样。
  • 1
  • 2
  • 3
  • 4

好了,现在如果我们想把 readme.txt 文件退回到上一个版本,就可以使用 git reset 命令:

$ git reset --hard HEAD^ //HEAD表示当前版本,则HEAD^表示上一个版本,那么上上版本就是HEAD^^
HEAD is now at e475afc add distributed
  • 1
  • 2

这时候用 cat 命令查看一下 readme.txt 的内容:

$ cat readme.txt //查看 readme.txt 文件的内容
Git is a distributed version control system.
Git is free software.
  • 1
  • 2
  • 3

果然 readme.txt 文件返回到了上一个版本。

我们现在想要回到最新的版本,还是使用 git reset 命令:

$ git reset --hard 1094a //这里不能用HEAD而必须使用 commit id ,因为最新版本在之前返回时已经被删除了,1094a就是最新版本的 commit id,可以在之前的代码中查到
HEAD is now at 83b0afe append GPL
  • 1
  • 2

这时再查看一下 readme.txt 文件内容:

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
  • 1
  • 2
  • 3

果然,又回到了最新的版本

工作区和暂存区

工作区(Working Directory)

learngit 文件夹就是一个工作区。

版本库(Repository)

工作区有个隐藏目录 .git ,这个不算工作区,而是 Git 的版本库。

版本库里面的 index(stage) 文件叫暂存区,还有Git为我们自动创建的第一个分支 master ,以及指向 master 的一个指针叫做 HEAD。

前面我们提到过,如果我们想把文件添加到Git里面时,需要分两步:

第一步是用 git add 把文件添加进去,实际上就是把文件修改添加到暂存区。

第二步是用 git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支。(我们现在只有唯一一个分支 master,所以现在就是往 master 分支上提交更改)

我们可以实践一下:

在 readme.txt 文件中加上一行内容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
  • 1
  • 2
  • 3

然后在工作区新建一个 LICENSE 文本文档(任意内容)

使用两次 git add 命令分别把 readme.txt 和 LICENSE 都添加后,可以用 git status 命令查看一下:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
 
    new file:   LICENSE
    modified:   readme.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

现在,暂存区的状态就变成这样了:

再使用 git commit 命令把暂存区的所有修改提交到分支:

$ git commit -m "understand how stage works"
[master e43a48b] understand how stage works
 2 files changed, 2 insertions(+)
 create mode 100644 LICENSE
  • 1
  • 2
  • 3
  • 4

这时候的工作区就是干净的:

$ git status
On branch master
nothing to commit, working tree clean
  • 1
  • 2
  • 3

这时候版本库就变成了这样:

管理修改

Git 如此的优秀是因为,Git 跟踪并管理的不是文件,而是修改。

我们对 readme.txt 文件进行修改:

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes.
  • 1
  • 2
  • 3
  • 4
  • 5

然后,添加:

$ git add readme.txt
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   readme.txt
#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

然后再修改 readme.txt 文件:

$ cat readme.txt 
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.```
  • 1
  • 2
  • 3
  • 4
  • 5

提交:

$ git commit -m "git tracks changes"
[master 519219b] git tracks changes
 1 file changed, 1 insertion(+)
  • 1
  • 2
  • 3

这时候我们查看一下状态:

$ 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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

我们可以发现,第二次修改并没有被提交。

因为在工作区的第一次修改被放入暂存区,准备提交;而在工作区的第二次修改并没有被放入暂存区,所以, git commit 命令只负责把暂存区的修改提交了。

提交后,我们可以用 git diff HEAD -- readme.txt 命令去查看工作区和版本库里面最新版本的区别:

$ git diff HEAD -- readme.txt 
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
 Git is a distributed version control system.
 Git is free software distributed under the GPL.
 Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

撤销修改

假如说你在 readme.txt 文件中添加了一行内容如下:

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
My stupid boss still prefers SVN.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

最后一行是万万不能让BOSS看到的,应该怎么撤销呢?

(1) 没有 git add 之前

可以手动删除最后一行,手动把文件恢复到上一个版本的状态。然后再用 git checkout -- file 命令丢弃工作区的修改

$ git checkout -- readme.txt //把readme.txt文件在工作区的修改全部撤销。
  • 1

现在看一下 readme.txt 文件内容:

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
  • 1
  • 2
  • 3
  • 4
  • 5

果然复原了。

(2) git add了,但没有git commit

这时候的修改添加到了暂存区,但没有提交到分支,用git status查看一下:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
 
    modified:   readme.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这时候我们可以使用 git reset HEAD file 命令把把暂存区的修改撤销掉,重新放回工作区:

$ git reset HEAD readme.txt //git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区,HEAD表示最新版本。
Unstaged changes after reset:
M    readme.txt
  • 1
  • 2
  • 3

现在再用 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 //暂存区是干净的,工作区有修改。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这时候再丢弃工作区的修改就OK了:

$ git checkout -- readme.txt //丢弃工作区的修改。
 
$ git status
On branch master
nothing to commit, working tree clean
  • 1
  • 2
  • 3
  • 4
  • 5

终于大功告成了。

(3) 既 git add 了,也 git commit

可以回退到上一个版本,见回退版本内容。

删除文件`

在工作区即 learngit 文件夹下新建一个 test.txt 文件,并添加和提交到Git:

$ git add test.txt
 
$ git commit -m "add test.txt"
[master b84166e] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这时候可用 rm 命令删除:

$ rm test.txt
  • 1

这时工作区和版本库就不一样了。

现在又分两种情况:

(1) 确实要从版本库中删除该文件,那就用 git rm 命令删除,并且 git commit

$ git rm test.txt
rm 'test.txt'
 
$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这时候文件就从版本库被删除了。
(2) 文件被删错了。因为版本库里有,所以很好恢复:

$ git checkout -- test.txt //用版本库里的版本替换工作区的版本。
  • 1

Git与远程仓库交互

远程仓库准备工作

在开始这部分之前,我们需要自行注册GitHub账号。而且,因为你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以需要设置:

(1) 创建SSH Key。在用户主目录下,看看有没有.ssh 目录,如果有的话,看此目录下有没有 id_rsa 和 id_rsa.pub 这两个文件,如果有,直接跳到下一步。如果没有,打开Git Bash,创建SSH

(2) 登陆GitHub,打开"Account settings"

然后点击"Add SSH and GPG Keys",再点击"New SSH Key"进行SSH Key 的创建,填上任意 Title ,把 id_rsa.pub 中的内容复制到Key文本框内:

添加远程库

现在我们已经在本地创建了一个Git仓库了,又想在GitHub上创建一个Git仓库,然后让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作。那么我们应该怎么做呢?

首先,登陆GitHub,在右上角找到“Create a new repo”按钮,创建一个新的仓库:

在Repository name填入 learngit (因为我已经创建完成了,所以提示此用户名存在)其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库:

如上图所示我已经把本地仓库的内容推送到了GitHub上了,大家创建完以后应该是一个空的仓库。这时候我们可以在本地learngit仓库下运行命令:

$ git remote add origin git@github.com:RFHzhj/learngit.git //“RFHzhj”是我的GitHub的账户名,你需要填写你自己的账户名
  • 1

添加后,远程库的名字就是 origin ,这是Git默认的叫法。

然后,我们就可以把本地库的所有内容推送到远程库上:

$ git push -u origin master 
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:RFHzhj/learngit.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

使用 git push 命令,就是把当前分支 master 推送到远程。

因为远程库是空的,所以我们在第一次推送 master 分支时,要加上 -u 参数,Git不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令。

推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:

从现在起,只要本地作了提交,就可以通过命令:

$ git push origin master
  • 1

把本地 master 分支的最新修改推送至GitHub。现在,我们拥有了真正的分布式版本库。

从远程库克隆

我们的学习过程是先有了本地库,后有了远程库,然后再对远程库进行关联。

其实,我们大部分时候是先创建远程库,然后再从远程库克隆。
(截取从第二个转载连接的远程仓库部分进行转载)
上面我们了解了先有本地库,后有远程库时候,如何关联远程库。

现在我们想,假如远程库有新的内容了,我想克隆到本地来 如何克隆呢?

首先,登录github,创建一个新的仓库,名字叫testgit2.如下:

如下,我们看到:

现在,远程库已经准备好了,下一步是使用命令git clone克隆一个本地库了。如下所示:

接着在我本地目录下 生成testgit2目录了,如下所示:

创建与合并分支

在 版本回填退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

首先,我们来创建dev分支,然后切换到dev分支上。如下操作:

git checkout 命令加上 –b参数表示创建并切换,相当于如下2条命令

git branch dev

git checkout dev

git branch查看分支,会列出所有的分支,当前分支前面会添加一个星号。然后我们在dev分支上继续做demo,比如我们现在在readme.txt再增加一行 7777777777777

首先我们先来查看下readme.txt内容,接着添加内容77777777,如下:

现在dev分支工作已完成,现在我们切换到主分支master上,继续查看readme.txt内容如下:

现在我们可以把dev分支上的内容合并到分支master上了,可以在master分支上,使用如下命令 git merge dev 如下所示:

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

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

合并完成后,我们可以接着删除dev分支了,操作如下:

总结创建与合并分支命令如下:

查看分支:git branch

创建分支:git branch name

切换分支:git checkout name

创建+切换分支:git checkout –b name

合并某分支到当前分支:git merge name

删除分支:git branch –d name

如何解决冲突?
下面我们还是一步一步来,先新建一个新分支,比如名字叫fenzhi1,在readme.txt添加一行内容8888888,然后提交,如下所示:

同样,我们现在切换到master分支上来,也在最后一行添加内容,内容为99999999,如下所示:

现在我们需要在master分支上来合并fenzhi1,如下操作:

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中<<<HEAD是指主分支修改的内容,>>>>>fenzhi1 是指fenzhi1上修改的内容,我们可以修改下如下后保存:

如果我想查看分支合并的情况的话,需要使用命令 git log 命令行演示如下:

3.分支管理策略。 通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff 来禁用”Fast forward”模式。首先我们来做demo演示下:

创建一个dev分支。
修改readme.txt内容。
添加到暂存区。
切换回主分支(master)。
合并dev分支,使用命令 git merge –no-ff -m “注释” dev
查看历史记录
截图如下:

分支策略:首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

bug分支

在开发中,会经常碰到bug问题,那么有了bug就需要修复,在Git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉。

比如我在开发中接到一个404 bug时候,我们可以创建一个404分支来修复它,但是,当前的dev分支上的工作还没有提交。比如如下:

并不是我不想提交,而是工作进行到一半时候,我们还无法提交,比如我这个分支bug要2天完成,但是我issue-404 bug需要5个小时内完成。怎么办呢?还好,Git还提供了一个stash功能,可以把当前工作现场 ”隐藏起来”,等以后恢复现场后继续工作。如下:

所以现在我可以通过创建issue-404分支来修复bug了。

首先我们要确定在那个分支上修复bug,比如我现在是在主分支master上来修复的,现在我要在master分支上创建一个临时分支,演示如下:

修复完成后,切换到master分支上,并完成合并,最后删除issue-404分支。演示如下:

现在,我们回到dev分支上干活了。

工作区是干净的,那么我们工作现场去哪里呢?我们可以使用命令 git stash list 来查看下。如下:

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,可以使用如下2个方法:

1.git stash apply恢复,恢复后,stash内容并不删除,你需要使用命令git stash drop来删除。
2.另一种方式是使用git stash pop,恢复的同时把stash内容也删除了。
演示如下

多人协作

当你从远程库克隆时候,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且远程库的默认名称是origin。

要查看远程库的信息 使用 git remote

要查看远程库的详细信息 使用 git remote –v
如下演示:

1. 推送分支:

推送分支就是把该分支上所有本地提交到远程库中,推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上: 使用命令 git push origin master

比如我现在的github上的readme.txt代码如下:

本地的readme.txt代码如下:

现在我想把本地更新的readme.txt代码推送到远程库中,使用命令如下:

我们可以看到如上,推送成功,我们可以继续来截图github上的readme.txt内容 如下:

可以看到 推送成功了,如果我们现在要推送到其他分支,比如dev分支上,我们还是那个命令 git push origin dev

那么一般情况下,那些分支要推送呢?

master分支是主分支,因此要时刻与远程同步。
一些修复bug分支不需要推送到远程去,可以先合并到主分支上,然后把主分支master推送到远程去。

2. 抓取分支:

多人协作时,大家都会往master分支上推送各自的修改。现在我们可以模拟另外一个同事,可以在另一台电脑上(注意要把SSH key添加到github上)或者同一台电脑上另外一个目录克隆,新建一个目录名字叫testgit2

但是我首先要把dev分支也要推送到远程去,如下

接着进入testgit2目录,进行克隆远程的库到本地来,如下:

现在目录下生成有如下所示:

现在我们的小伙伴要在dev分支上做开发,就必须把远程的origin的dev分支到本地来,于是可以使用命令创建本地dev分支:

git checkout –b dev origin/dev

现在小伙伴们就可以在dev分支上做开发了,开发完成后把dev分支推送到远程库时。

如下:

小伙伴们已经向origin/dev分支上推送了提交,而我在我的目录文件下也对同样的文件同个地方作了修改,也试图推送到远程库时,如下:

由上面可知:推送失败,因为我的小伙伴最新提交的和我试图推送的有冲突,解决的办法也很简单,上面已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后在本地合并,解决冲突,再推送。

git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:如下:

这回git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的 解决冲突完全一样。解决后,提交,再push:
我们可以先来看看readme.txt内容了。

现在手动已经解决完了,我接在需要再提交,再push到远程库里面去。如下所示:

因此:多人协作工作模式一般是这样的:

首先,可以试图用git push origin branch-name推送自己的修改.
如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并。
如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch-name推送

工作使用Git

不墨迹直接上代码:
知道如何生成SSH KEY
知道know_hosts文件路径在哪儿
loading…
项目经理:
(1)项目经理搭建项目的框架。
(2)搭建完项目框架之后,项目经理把项目框架代码放到服务器。

普通员工:
(1)在自己的电脑上,生成ssh公钥,然后把公钥给项目经理,项目经理把它添加的服务器上面。
(2)项目经理会给每个组员的项目代码的地址,组员把代码下载到自己的电脑上。
(3)创建本地的分支dev,在dev分支中进行每天的开发。
(4)每一个员工开发完自己的代码之后,都需要将代码发布远程的dev分支上。

项目里一般会有两个分支,如:
Master:用于保存发布的项目代码。
Dev:用于保存开发过程中的代码。所有的组员开发完自己的代码提交到该分支上。
补充小技巧:
首先,整体认知一下工作中git常用的就这么几个命令:
步骤1.创建项目目录,如git_test【强烈建议返回到2.安装配置一节,学一学在windows中用mkdir git_test。工作中点来点去,文件夹一多就不爽了,学会在windows上用linux命令,工作效率谁用谁知道~】
步骤2.git init【如果你考皮github上别人的代码,必须将别人的.git文件删掉。步骤:进入项目目录,如git_test,cd git_test,ls -al,rm -rf .git】【工作中linux必会的,赶快回到2.安装配置一节,学一学在windows使用linux命令,这样就不用装linux环境了,简单胜于复杂~】
步骤3.git add .
步骤4.git commit -m “整体提交”
步骤5.git remote add origin/github URL
add 后面的名字可以是【origin/github】
URL是【你的github/gitlab仓库地址】
步骤6.git checkout -b dev
步骤7.git push origin/github dev
步骤8:权限控制允许了吗?

如何在Windows的cmd 中使用linux的命令

cmd的命令功能肯定没有linux的命令功能好用,这点毋庸置疑。
现在装好了Git,就可以在Windows的cmd中使用linux命令了。
记住关键词:环境变量 Git命令
怎么玩?如下2步操作:
假如你按照上述步骤将Git装在C盘,那么做如下操作:
操作1:找Git命令的【.exe文件】。如图:

操作2:添加到环境变量,就可以在cmd里使用linux命令了。如图:


最终效果:

PyCharm也可以使用linux命令。【环境变量–全局—使用】

备注:你可能需要关闭之前打开的cmd窗口/PyCharm窗口,重新打开新的cmd窗口//PyCharm窗口,使用命令才可能生效。
恭喜你已经掌握在Windows环境下使用linux命令了【效率会提高一点点】

思维导图

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/382533?site
推荐阅读
相关标签
  

闽ICP备14008679号