Git
Git 是一个 分布式版本控制系统 (Distributed Version Control System, DVCS),由 Linus Torvalds(Linux 内核创始人)于 2005 年开发,用于高效管理代码的变更历史。它广泛应用于软件开发、文档管理等领域,支持多人协作开发。
Git安装
Linux-ubuntu
安装GIt
bash
sudo apt-get install git -y
查看Git安装的版本
bash
git --version
GIt基本操作
创建Git本地仓库
要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来。
创建⼀个 Git 本地仓库对应的命令为git init
,注意命令要在⽂件⽬录下执行
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git init
已重新初始化已存在的 Git 仓库于 /home/gjw/Desktop/gitcode/.git/
gjw@gjw-virtual-machine:~/Desktop/gitcode$
创建仓库后,会在当前目录下创建出一个.git
隐藏文件,.git
目录是Git用来跟踪管理仓库的,不要手动修改这个目录里面的文件,否则GIt仓库就给破坏了.
bash
#使用tree命令可查看文件内容
tree .git/

配置Git
安装Git后首先设置用户名称和E-mail地址
bash
git config [--global] user.name "username"
git config [--global] user.email "email"
其中,--global
选项为选择是否对本机器的所有Git仓库进行统一配置
查看配置命令
bash
git config -l
删除对应的配置命令
bash
git config [--global] --unset user.name
git config [--global] --unset user.email
认识工作区,暂存区,版本库
- 工作区: 是在电脑上你要写代码或文件的目录
- 暂存区 : 英文叫做stage或index.一般存放在
.git
目录下的Index文件(.git/index)中,我们把暂存区有时也叫做索引(index) - 版本库 : 又名仓库(
repositore
),工作区有一个隐藏目录.git
,它不算工作区,而是Git的版本库.这个版本库里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能追踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以"还原"
下图展示了工作区,暂存区和版本库之间的关系:
- 图中左侧为工作区,右侧为版本库。Git的版本库里存了很多东西,其中最重要的就是暂存区.
- 在创建Git版本库时,Git会为我们自动创建一个唯一的master分支,以及指向master的一个指针叫HEAD.
- 当对工作区修改(或新增)的文件执行
git add
命令时,暂存区目录树的文件索引会被更新 - 当执行提交操作
git commit
时,master分支会做相应的更新,可以简单理解为暂存区的目录数才会被真正写到版本库中
由上述描述我们便得知: 通过新建或粘贴进目录的文件,并不能称之为向仓库中新增文件,而只是在工作区新增了文件.必须要通过git add
和git commit
命令才能将文件添加到仓库中进行管理!
添加文件
在包含.git的目录下新建一个ReadMe文件,我们可以使用git add
命令将文件添加到暂存区:
- 添加一个或多个文件到暂存区:
git add [file1] [file2] ...
- 添加指定目录到暂存区,包括子目录:
git add [dir]
- 添加当前目录下的所有文件改动到暂存区:
git add .
再使用git commit
命令将暂存区内容添加到本地仓库中:
- 提交暂存区全部内容到本地仓库中:
git commit -m "message"
- 提交暂存区的指定文件到仓库区:
git commit [file1] [file2] ... -m "message"
注意git commit
后面的-m
选项,要跟上描述本次提交的message,由用户自己完成,这部分内容绝对不能省略,并要好好描述,是用来记录你的提交细节.
例如:
git commit
命令执行成功后会告诉我们,3个文件被改动(就是我们新添加的三个文件),插入了零行内容(file文件为空)
可以使用git log
命令,查看下历史提交记录:

该命令可以显示从最近到最远的提交日志,并且可以看到我们commit时的日志消息
commit后面跟着的一连串字符串是每次提交的commit id
(版本号),用十六进制表示
查看.git文件
先看我们的.git
的目录结构:
index
就是我们的暂存区,add后的内容都是添加到这里的HEAD
就是我们的默认指向master分支的指针:
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat .git/HEAD
ref: refs/heads/master
默认的master分支,其实就是:
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat .git/refs/heads/master
c811d57fbe6d7664aa1ce5d683c9d7fde0b391b1
其中的c811d...这个字符串,就是当前最新的commit id
objects
为Git的对象库,里面包含了创建的各种版本库对象及内容.当执行git add
命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,就位于".git/objects"目录下.
我们可以使用git cat-file
命令来查看版本库对象的内容:
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git cat-file -p c811d57fbe6d7664aa1ce5d683c9d7fde0b391b1
tree 15a37e9ef171cca4a5d985fccd1fcf9414b2c7cf
parent bd06097bd6c04c24d3090928c82167840da81a79
author gjw <[email protected]> 1745170816 +0800
committer gjw <[email protected]> 1745170816 +0800
add 3 files
这就是最近一次的提交
还有一行: tree 15a37e9ef171cca4a5d985fccd1fcf9414b2c7cf
,用同样的方法,看看结果:
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git cat-file -p 15a37e9ef171cca4a5d985fccd1fcf9414b2c7cf
100644 blob 8d0e41234f24b6da002d962a26c2495ea16a425f ReadMe
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file1
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file2
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file3
总结: 在本地的git仓库中,有几个文件或目录很特殊
- index: 暂存区:,
git add
后会更新该内容 - HEAD: 默认指向master分支的一个指针
- refs/heads/master: 文件里保存当前
master
分支的最新commit id
- objects: 包含了创建的各种版本库对象及内容,可以简单理解为放了git维护的所有修改
修改文件
Git跟踪并管理的是修改,而非文件
此时对ReadME文件进行修改,仓库中的ReadMe和工作区的ReadMe是不同的,如何查看当前仓库的状态呢?使用git status
命令查看在你上次提交之后是否对文件进行再次修改
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git restore <文件>..." 丢弃工作区的改动)
修改: ReadMe
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
上面的信息说明,ReadMe被修改了,但是没有完成添加与提交
使用git diff [file]
命令用来显示暂存区和工作区文件的差异,显示的格式是Unix通用的diff格式
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git diff ReadMe
diff --git a/ReadMe b/ReadMe
index 8d0e412..05fe86c 100644
--- a/ReadMe
+++ b/ReadMe
@@ -1 +1,2 @@
hello git
+hello world
版本回退
Git能够管理文件的历史版本,这也是版本控制器重要的能力.
执行git reset
命令用于回退版本,可以指定退回某一次提交的版本.回退的本质是将版本库中的内容进行回退,工作区和暂存区是否回退由命令参数决定
bash
git reset [--soft | --mixed | --hard] [HEAD]
- soft: 仅回退版本库
- mixed: 默认选项,回退版本库和暂存区
- hard: 回退版本库,暂存区和工作区
Git还提供了一个git reflog
命令,用来记录本地的每一次命令
撤销修改
如果我们在我们的⼯作区写了很⻓时间代码,越写越写不下去,觉得自己写的实在是垃圾,想恢复到上⼀个版本
情况一: 对于工作区的代码,还没有add
使用git checkout -- [filename]
,回退到上一次add
或commit
的状态
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ vim ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat ReadMe
hello git
hello world
xxx code
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout -- ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat ReadMe
hello git
hello world
情况二: 已经add,但没有commit
先使用git reset
回退命令,将空白的版本库内容,回退给暂存区,此时暂存区就变为和版本库一致的内容了.之后再参照情况一的做法仅回退工作区即可
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ vim ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat ReadMe
hello git
hello world
hello version2
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git add ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git status
位于分支 master
要提交的变更:
(使用 "git restore --staged <文件>..." 以取消暂存)
修改: ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git reset HEAD ReadMe
重置后取消暂存的变更:
M ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git restore <文件>..." 丢弃工作区的改动)
修改: ReadMe
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout -- ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git status
位于分支 master
无文件要提交,干净的工作区
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat ReadMe
hello git
hello world
情况三: 已经add,并且也commit了
前提条件: commit之后没有push到远程仓库中.
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ vim ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git add ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git commit -m "modify ReadMe: xxx code"
[master 2663209] modify ReadMe: xxx code
1 file changed, 1 insertion(+)
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git reset --hard HEAD^
HEAD 现在位于 cbfff40 add modify ReadMe file
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git status
位于分支 master
无文件要提交,干净的工作区
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat ReadMe
hello git
hello world
删除文件
使用git rm [filename]
命令,可简化步骤,对工作区和暂存区的内容进行删除,用户仅需再commit
一次即可完成删除操作
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git rm file3
rm 'file3'
gjw@gjw-virtual-machine:~/Desktop/gitcode$ ls
file1 file2 ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git status
位于分支 master
要提交的变更:
(使用 "git restore --staged <文件>..." 以取消暂存)
删除: file3
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git commit -m "delete file3"
[master 65f8ba5] delete file3
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 file3
分支管理
理解分支
在版本回退里,已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就可以理解为是一个分支.截至到目前,只有一个时间线,在Git里,这个分支叫主分支,即master分支
再看HEAD,HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支.
每次提交,master分支都会向前移动一步,这样,随着不断提交,master分支的线也越来越长,而HEAD只要一直指向master分支即可指向当前分支,通过查看当前的版本库,理出清晰的思路
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat .git/HEAD
ref: refs/heads/master
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat .git/refs/heads/master
65f8ba5de6295fa2e39b6b5eba15531400d07284
创建分支
Git支持我们查看或创建其他分支,我们现在创建第一个分支dev
,对应的命令为
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git branch
* master
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git branch dev
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git branch
dev
* master
切换分支
使用git checkout
命令即可完成切换
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout dev
切换到分支 'dev'
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git branch
* dev
master
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat .git/HEAD
ref: refs/heads/dev
切换到dev分支后修改ReadMe文件进行添加和提交,再切回master分支发现看不到修改,此时dev和master分支的提交点是不同的

合并分支
将dev上新的提交合并到master分支
使用命令git merge
进行分支合并
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout master
切换到分支 'master'
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git merge dev
更新 65f8ba5..6284b42
Fast-forward
ReadMe | 1 +
1 file changed, 1 insertion(+)
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat ReadMe
hello git
hello world
aaa on dev branch
删除分支
合并完成后,dev分支就没有用了,就可以删除此分支,前提是当前不能处在此分支下.
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git branch
dev
* master
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git branch -d dev
已删除分支 dev(曾为 6284b42)。
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git branch
* master
因为创建,合并和删除分支非常快,所以Git鼓励使用分支完成某个任务,合并后再删除分支,这和直接在master分支上工作效果是一样的,但过程更安全
合并冲突
实际分支合并的时候,并不是想合并就能合并成功的,有时候可能会遇到代码冲突的问题.这里使用git checkout -b dev1
一步完成创建并切换新分支的动作
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout -b dev1
切换到一个新分支 'dev1'
在dev1分支下修改ReadMe文件,然后切回master分支再次修改
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ vim ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git add ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git commit -m "md ReadMe; bbb"
[dev1 b487628] md ReadMe; bbb
1 file changed, 1 insertion(+), 1 deletion(-)
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout master
切换到分支 'master'
gjw@gjw-virtual-machine:~/Desktop/gitcode$ vim ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git add .
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git commit -m "md ReadMe: ccc"
[master ef5535b] md ReadMe: ccc
1 file changed, 1 insertion(+), 1 deletion(-)
此时两分支的状态变为

这种状态下,Git只能试图把各自的修改合并起来,但这种合并可能会有冲突,我们需要手动调整冲突代码,并需要再次提交修正后的结果(一定要再次提交!)
这样就解决了合并冲突的问题
用带参数的git log
可以看到分支的合并情况
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout master
切换到分支 'master'
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git log --graph --abbrev-commit
* commit 8bf96f4 (HEAD -> master)
|\ Merge: ef5535b b487628
| | Author: gjw <[email protected]>
| | Date: Mon Apr 21 18:00:48 2025 +0800
| |
| | merge dev1
| |
| * commit b487628 (dev1)
| | Author: gjw <[email protected]>
| | Date: Mon Apr 21 17:54:52 2025 +0800
| |
| | md ReadMe; bbb
| |
* | commit ef5535b
|/ Author: gjw <[email protected]>
| Date: Mon Apr 21 17:56:12 2025 +0800
|
| md ReadMe: ccc
分支管理策略
通常合并分支时,如果可能,Git会采用Fast forward
模式.在这种模式下,删除分支后,查看分支历史时,会丢掉分支信息,看不出来最新提交到底是merge进来的还是正常提交的.
但是合并冲突时,通过解决冲突问题,会再一次进行新的提交,这样就不是Fast forward
模式了,这样的好处是,从分支历史上就可以看出分支信息.例如我们已经删除了合并冲突部分创建的dev1
分支,但依旧能看到master其实是由其他分支合并得到的
Git支持我们强制禁用Fast forward
模式,那么就会在merge时生成一个新的commit
,这样,从分支历史上就可以看出分支信息,以下使用--no-ff
方式的git merge
首先创建并切换至新的分支dev2
,修改ReadMe文件并提交
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout -b dev2
切换到一个新分支 'dev2'
gjw@gjw-virtual-machine:~/Desktop/gitcode$ vim ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git add .
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git commit -m "md ReadMe"
[dev2 dd18711] md ReadMe
1 file changed, 1 insertion(+)
切换回master分支进行合并,注意使用--no-ff
参数,表示禁用Fast forward
模式.禁用Fast forward
模式后合并会创建一个新的commit
,所以还要加上-m
参数,写上描述
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout master
切换到分支 'master'
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git merge --no-ff -m "merge with no-ff" dev2
Merge made by the 'ort' strategy.
ReadMe | 1 +
1 file changed, 1 insertion(+)
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat ReadMe
hello git
hello world
bbb on dev branch
abcd
合并后,查看分支历史
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git log --graph --abbrev-commit
* commit 2f47329 (HEAD -> master)
|\ Merge: 8bf96f4 dd18711
| | Author: gjw <[email protected]>
| | Date: Mon Apr 21 19:42:01 2025 +0800
| |
| | merge with no-ff
| |
所以在合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而Fast forward
模式合并就看不出来曾经做过合并
分支策略
实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活
干活都在dev分支上,也就是说dev分支是不稳定的.
BUG分支
假如我们现在正在dev2
分⽀上进行开发,开发到⼀半,突然发现 master
分⽀上面有 bug,需要解决。在Git中,每个 bug 都可以通过⼀个新的临时分⽀来修复,修复后,合并分⽀,然后将临时分⽀删除。
可现在dev2
的代码在⼯作区中开发了⼀半,还⽆法提交,怎么办?
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout -b dev2
切换到一个新分支 'dev2'
gjw@gjw-virtual-machine:~/Desktop/gitcode$ vim ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout master
M ReadMe
切换到分支 'master'
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat ReadMe
hello git
hello world
bbb on dev branch
abcd
i am coding...
Git提供了git stash
命令,可以将当前的工作区信息进行储藏,被储藏的内容可以在将来某个时间恢复出来
用git status
查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心的创建分支来修复Bug
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git stash
保存工作目录和索引状态 WIP on dev2: 2f47329 merge with no-ff
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git status
位于分支 dev2
无文件要提交,干净的工作区
储藏dev2
工作区之后,由于我们要基于master分支修复bug,所以需要切回master
分支,再新建临时分支来修复bug
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout master
切换到分支 'master'
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout -b fix_bug
切换到一个新分支 'fix_bug'
gjw@gjw-virtual-machine:~/Desktop/gitcode$ vim Read
gjw@gjw-virtual-machine:~/Desktop/gitcode$ ls
file1 file2 ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ vim ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git add .
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git commit -m "fix bug: f"
[fix_bug 7cdd7ca] fix bug: f
1 file changed, 1 insertion(+), 1 deletion(-)
修复完成后,切换到master
分支,并完成合并,最后删除fix_bug
分支
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout master
切换到分支 'master'
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git merge --no-ff -m "merge fix_bug" fix_bug
Merge made by the 'ort' strategy.
ReadMe | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git status
位于分支 master
无文件要提交,干净的工作区
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat ReadMe
hello git
hello world
bbb on dev branch
abcdef
至此,bug的修复已经完成,现在回到dev2
分支进行开发,需要恢复刚才保存的工作现场,先使用git stash list
查看工作现场存在哪
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git stash list
stash@{0}: WIP on dev2: 2f47329 merge with no-ff
现在使用git stash pop
命令恢复现场,恢复的同时也会把stash也删了
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git stash pop
位于分支 dev2
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git restore <文件>..." 丢弃工作区的改动)
修改: ReadMe
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
丢弃了 refs/stash@{0}(2257a06a5b5892dfbe35baaacad6e5ea6f2842c1)
因为dev2
分支是在bug存在的情况下开发的,此时恢复后,仍然是存在bug的,此时master
分支是修复完bug的.
我们的最终目的是要让master
合并dev2
分支的,那么正常情况下我们切回master
分支直接合并即可,但这样是有一定风险的,因为在合并时可能会有冲突,而代码冲突需要我们手动解决(在master
上解决).无法保证对于冲突问题可以一次性解决掉.
解决这个问题的方法就是: 在自己的本地分支上合并master
,对本地分支进行修改和测试,调试完成后,再合并回master
.
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git merge --no-ff -m "merge master" master
自动合并 ReadMe
冲突(内容):合并冲突于 ReadMe
自动合并失败,修正冲突然后提交修正的结果。
gjw@gjw-virtual-machine:~/Desktop/gitcode$ vim ReadMe
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git add .
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git commit -m "merge master fix"
[dev2 fd1be65] merge master fix
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git checkout master
切换到分支 'master'
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git merge --no-ff -m "merge dev2" dev2
Merge made by the 'ort' strategy.
ReadMe | 1 +
1 file changed, 1 insertion(+)
gjw@gjw-virtual-machine:~/Desktop/gitcode$ cat ReadMe
hello git
hello world
bbb on dev branch
i am coding... DONE
abcdef
在合并完代码后,删除掉dev2
和fix_bug
分支
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git branch
dev2
fix_bug
* master
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git branch -d dev2
已删除分支 dev2(曾为 fd1be65)。
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git branch -d fix_bug
已删除分支 fix_bug(曾为 7cdd7ca)。
删除临时分支
在分支上的功能开发完成后,需要合并,然后删除掉该分支,可是如果该分支上的功能开发到了一半,被叫停了,该如果销毁呢
传统的git branch -d
命令是不行的,此时可以使用git branch -D
bash
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git branch -d dev3
error: 分支 'dev3' 没有完全合并。
如果您确认要删除它,执行 'git branch -D dev3'。
gjw@gjw-virtual-machine:~/Desktop/gitcode$ git branch -D dev3
已删除分支 dev3(曾为 6c01871)。
远程仓库
向远程仓库推送
本地已经clone
成功远程仓库后,便可以向仓库中提交内容,这里举例新增一个file.txt
文件
注意:之前设置的全局name和email,这两项配置需要和gitee上配置的信息相同.
bash
git push <远程主机名> <本地分支名>:<远程分支名>
#如果本地分支和远程分支名相同,可以将冒号":"和后面的远程分支名一起省略
git push <远程主机名> <本地分支名>
拉取远程仓库
如果远程仓库的分支领先于本地仓库的分支,这时就需要将远程仓库中的代码拉取至本地
bash
git pull <远程主机名> <远程分支名>:<本地分支名>
#与推送相同,如果两个分支名相同,则可以进行省略
git pull <远程主机名> <远程分支名>
配置Git
忽略特殊文件
日常开发中,如果有些文件不想提交到远端,比如保存数据库密码等的配置文件,可以在Git工作区的根目录下创建一个特殊的.gitignore
文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件了
bash
gjw@gjw-virtual-machine:~/Desktop/post-hub$ vim .gitignore
gjw@gjw-virtual-machine:~/Desktop/post-hub$ cat .gitignore
*.so
#不想忽略的文件前面加上感叹号"!"
!b.so
如果有时候就是想添加一个文件到Git
,但由于这个文件被.gitignore
忽略了,根本添加不了,可以使用-f
强制添加
bash
git add -f [filename]
ail,这两项配置需要和gitee上配置的信息相同.
bash
git push <远程主机名> <本地分支名>:<远程分支名>
#如果本地分支和远程分支名相同,可以将冒号":"和后面的远程分支名一起省略
git push <远程主机名> <本地分支名>
拉取远程仓库
如果远程仓库的分支领先于本地仓库的分支,这时就需要将远程仓库中的代码拉取至本地
bash
git pull <远程主机名> <远程分支名>:<本地分支名>
#与推送相同,如果两个分支名相同,则可以进行省略
git pull <远程主机名> <远程分支名>
配置Git
忽略特殊文件
日常开发中,如果有些文件不想提交到远端,比如保存数据库密码等的配置文件,可以在Git工作区的根目录下创建一个特殊的.gitignore
文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件了
bash
gjw@gjw-virtual-machine:~/Desktop/post-hub$ vim .gitignore
gjw@gjw-virtual-machine:~/Desktop/post-hub$ cat .gitignore
*.so
#不想忽略的文件前面加上感叹号"!"
!b.so
如果有时候就是想添加一个文件到Git
,但由于这个文件被.gitignore
忽略了,根本添加不了,可以使用-f
强制添加
bash
git add -f [filename]