8.远程数据库
8.1 pull
执行pull可以取得远程数据库的历史记录,下面进行数据库提交的讲解
确认更新的本地数据库分支没有任何修改
只进行fast-forward合并,图中的master是本地数据库的master分支,
orign/master是远程数据库的orign的master分支
如果本地数据库的master分支有新的历史记录,就需要合并双方的修改。
执行pull就可以进行合并,如果没有冲突的修改,就会自动创建合并提交。
如果发生冲突,先解决冲突,在进行手动提交
8.2fetch
执行pull ,远程数据库的内容会进行自动合并,但是有时候只是想确认本地数据库的内容而不是合并,则会进行fetch
执行fetch 就可以取得远程数据库的最新历史记录,取得的提交会导入到没有名字的分支,这个分支可以从名为FETCH_HEAD的退出。
如:本地数据库和远程数据库的orign,如果在从B进行提交的状态下执行fetch,形成下面的历史记录
如果想要远程数据库的内容合并到本地数据库,可以进行合并FETCH_HEAD,或者重新执行pull
合并后,历史记录和pull相同,实际上pull的内容是fetch+merge组成的。
8.3 push
本地数据库oush到远程数据库时,要fast-forward合并push的分支。
如果发生冲突,push将会被拒绝,如果要进行共享本地数据库的分,需要明确的push,因此,没有执行push就不会给远程数据库带来影响,因此可以自由的创建自己的分支。
基本上,远程数据库共享的提交是不能修改的,如果进行修改的话,远程数据库同步的其他数据的历史就会变得很奇怪。
9 标签
标签是为了更加方便的参考提交而给它标上易懂的名称
Git使用2种标签:轻标签和注解标签,打上的标签是固定的,不能像分支那样可以移动位置
轻标签
添加名称
注解标签
添加名称
添加注解
添加签名
发布标签一般采用注解标签来添加注解或者签名的,轻标签是为了在本地暂时使用或一次性使用。
可以进行指定标签名称以退出
10 操作标签准备
10.1 事前预备
建立一个新目录,并在里面建立一个空的数据库。
这里建立一个tutorial的目录
mkdir tutorial
cd tutorial
git init
Initialized empty Git repository in
在tutorial目录创建一个名为myfile.txt 的档案,然后进行提交
git add myfile.txt
git commit -m "first commit"
[master (root-commit) a73ae49] first commit 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 myfile.txt
历史记录
10.2 添加轻标签
使用tag命令来添加标签 在<tagname>执行标签的名称
git tag <tagname>
在HEAD指向的提交里面 添加apple的标签,请执行以下命令
git tag apple
没有指定参数,显示标签的列表
git tag
apple
如果在log命令添加 --decorate选项执行,可以显示包含标签资料的历史记录。
git log --decorate
commit e7978c94d2104e3e0e6e4a5b4a8467b1d2a2ba19 (HEAD, tag: apple, master) Author: yourname <yourname@yourmail.com> Date: Wed Jul 18 16:43:27 2012 +0900
first commit
10.3添加注解标签
添加注解标签,可以在tag命令指定-a选项执行。
执行后会启动编辑区,请输入注解
也可以指定-m选项来添加注解。
git tag -a <tagname>
在HEAD指向的提交里添加名为banana的标签
git tag -am ”进行标签“ banana
如果在tag命令指定-n选项执行,可以显示标签的列表和注解
git tag -n
apple first commit
banana 进行标签
10.4删除标签
如果需要删除标签 ,在tag命令指定-d选项执行
git tag -d <tagname>
11.改写提交
11.1修改最近提交
指定amend选项执行提交,可以修改同一个分支最近的提交内容和注解
主要使用的场景:
添加最近提交时漏掉的档案。
修改最近提交的注解。
11.2 取消过去的提交
在revert取消指定的提交内容,也可以使用rebase -i,reset可以删除提交,但是不可以随便删除已经发布的提交,需要通过revert创建要否定的提交
使用场合:
安全的取消过去发布的提交
11.3 遗弃提交
在reset可以遗弃不再使用的提交,执行遗弃的时候,需要根据影响的范围而指定不同的模式,可以指定是否复原索引或工作树的内容。
默认:mixed模式,还有soft和hard模式。
如:
主要使用的场合:
1.复原修改过的索引的状态mixed
2.彻底取消最近的提交hard
3.只取消提交soft
11.4 提取提交
再check-pick 可以进行指定复制的提交,然后导入到现在的分支。
主要使用的场合
1.将弄错的分支的提交移动到正确的地方
2.把其他分支的提交添加到现在的分支
11.5 改写提交的历史记录
在rebase里面,我们可以进行改写,替换,删除,合并提交
主要使用场景
1.push之前,重新输入正确的提交注解。
2.清楚地汇合内容含义相同的提交。
3.添加最近提交时漏掉的档案
11.6 汇合分支上的提交,然后一同合并到分支
我们可以选择merge的选项 squash
使用这个进行指定分支进行合并,这样就可以把所有汇合的提交添加到分支上
主要使用的场景:
汇合主题分支的提交,然后合并提交到目的分支
12.改写提交
12.1commit --amend
进行修改最近的一次提交
进入stepup-tutorial/tutorial1目录。本地端的历史记录状态如
log命令进行确认历史记录
git log
commit 326fc9f70d022afdd31b0072dbbae003783d77ed Author: yourname <yourname@yourmail.com> Date: Mon Jul 16 23:17:56 2012 +0900
添加add的说明
commit 48eec1ddf73a7fb508ef664efd6b3d873631742f Author: yourname <yourname@yourmail.com> Date: Mon Jul 16 23:16:14 2012 +0900
first commit
首先打开sample.txt档案,并添加commit注释
add 把变更录入到索引里面
commit 记录索引的状态
git add sample.txt
git commit --amend
编辑工具会显示最近的一次提交信息,将消息进行修改为{添加add和commit的讲解}并进行保存。
进行log命令确认历史记录和提交信息。
git log
commit e9d75a02e62814541ee0410d9c1d1bf47ab1c057 Author: yourname <yourname@yourmail.com> Date: Mon Jul 16 23:17:56 2012 +0900
添加add和commit的讲解
commit 48eec1ddf73a7fb508ef664efd6b3d873631742f Author: yourname <yourname@yourmail.com> Date: Mon Jul 16 23:16:14 2012 +0900
first commit
12.2 revert
我们使用revert来取消{添加pull的讲解}提交
进入目标目录,显示历史记录
用log命令确认历史记录
git log
commit 0d4a808c26908cd5fe4b6294a00150342d1a58be Author: yourname <yourname@yourmail.com> Date: Mon Jul 16 23:19:26 2012 +0900
添加pull的讲解
commit 9a54fd4dd22dbe22dd966581bc78e83f16cee1d7 Author: yourname <yourname@yourmail.com> Date: Mon Jul 16 23:19:01 2012 +0900
添加commit的讲解
commit 326fc9f70d022afdd31b0072dbbae003783d77ed Author: yourname <yourname@yourmail.com> Date: Mon Jul 16 23:17:56 2012 +0900
添加add的讲解
commit 48eec1ddf73a7fb508ef664efd6b3d873631742f Author: yourname <yourname@yourmail.com> Date: Mon Jul 16 23:16:14 2012 +0900
first commit
打开sample.txt的档案,确认内容
add 把变更录入到索引里面
commit 记录索引的状态
pull 取得远端数据库的内容
类似:
add:将更改添加到索引中 假设我们对"sample.txt"文件进行了修改,并希望将这些更改添加到Git的索引(暂存区)中。
git add sample.txt
commit:记录索引的状态 在将更改添加到索引后,我们可以使用commit命令将其记录为一个新的提交。同时,我们需要提供一个提交消息来描述所做的更改。
git commit -m "Update sample.txt file"
pull:取得远程数据库的内容 如果我们与其他人协作开发,并且有一个远程Git存储库,我们可以使用pull命令从远程数据库获取最新的内容,并将其合并到本地分支中。
git pull origin master
假设我们正在工作的分支是"master"分支,而远程Git存储库的名称是"origin"。通过运行以上命令,我们从"origin"远程数据库获取最新的内容,并将其合并到本地"master"分支中。
git revert HEAD
[master d47bb1d] Revert "添加pull的说明" 1 files changed, 1 insertions(+), 2 deletions(-)
打开sample.txt 档案进行查看,如果pull的说明消失了,就表明取消提交成功。
12.3 reset
使用reset来进行删除master分支最前面的两个提交。
进行目标目录,历史记录如下:
git log 确认信息
打开sample.txt的档案,确认内容
add 把变更录入到索引里面
commit 记录索引的状态
pull 取得远端数据库的内容
使用reset 进行删除提交
git reset --hard HEAD~~
HEAD is now at 326fc9f 添加add的说明
打开sample.txt进行查看 看看最近两个提交是否消失了
或者log命令确认历史记录
git log
进行还原
git reset --hard ORIG_HEAD
HEAD is now at 0d4a808 添加pull的说明
12.4 cherry -pick
进入目标目录,历史记录的状态如下:
git checkout master
git cherry-pick 99daed2
如果发生冲突就打开sample.txt,修改冲突的部分之后再提交
git add sample.txt
git commit
12.5 用rebase -i 汇合提交
进入目标目录,本地的历史记录
进行汇合(添加commit的讲解)和(添加pull的讲解)的修改,然后合并到一个提交。
如果汇合过去的提交
git rebase -i HEAD~
打开文本编辑器,看到HEAD到HEAD~~的提交如图
pick 9a54fd4 添加commit的说明 pick 0d4a808 添加pull的说明
# Rebase 326fc9f..0d4a808 onto d286baa # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. #
将第二行的pick改成squash,保存并退出,由于合并后要提交,所以接着会显示提交信息的编辑器,编辑信息后保存并退出。
这样两个提交就合并成一个提交
历史记录:
12.6 用rebase -i 修改提交
打开目标目录 历史记录如下
修改(添加commit的讲解)的内容
使用rebase -i ,进行选择要进行修改的提交
git rebase -i HEAD~~
打开文本编辑器,看到HEAD到HEAD~~的提交如:
pick 9a54fd4 添加commit的说明 pick 0d4a808 添加pull的说明
# Rebase 326fc9f..0d4a808 onto d286baa # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. #
将第一行的pick改成edit 保存后退出
显示:
Stopped at d286baa... 添加commit的说明
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
打开sample.txt 适当进行修改commit的讲解部分
add 把变更录入到索引中
commit 记录索引的状态
pull 取得远端数据库的内容
用commit --amend保存修改
$ git add sample.txt $ git commit --amend
通知这个提交的操作已经结束,指定 --continue选项执行rebase
$ git rebase --continue
这时,有可能其他提交会发生冲突, 请修改冲突部分后再执行add和rebase --continue。这时不需要提交。如果在中途要停止rebase操作,请在rebase指定--abort选项执行,这样就可以抹去并停止在rebase的操作。
提交的修改完成了。如果要把多个提交修改成edit,下一个要修改的提交会退出,请执行同样的修改。
实际上,在rebase之前的提交会以ORIG_HEAD之名存留。如果rebase之后无法复原到原先的状态,可以用git reset --hard ORIG_HEAD复原到rebase之前的状态。
12.7 merge --squash
打开目标目录 ,历史记录
将所有分支合并成一个进行提交,并导入到master分支
切换到master分支 指定--squash选项执行merge
git checkout master
Switched to branch 'master' git merge --squash issue1
将issue1合到master
Auto-merging sample.txt CONFLICT (content): Merge conflict in sample.txt Squash commit -- not updating HEAD Automatic merge failed; fix conflicts and then commit the result.
发生了冲突
打开sample.txt ,进行修改冲突的部分,然后进行提交
git add sample.txt
git commit
[master 0d744a7] Conflicts: sample.txt 1 files changed, 4 insertions(+), 0 deletions(-)
issue1分支上所有的提交都汇合并添加到master分支了。可用log命令确认历史记录。