Git高级篇(1.3w字)(下)

简介: Git高级篇(1.3w字)(下)

8.远程数据库


8.1 pull


执行pull可以取得远程数据库的历史记录,下面进行数据库提交的讲解


确认更新的本地数据库分支没有任何修改


383ffc8580144a0797de26dd8f430a9d.png2ccec3f521f4447eabba9949349550da.png



只进行fast-forward合并,图中的master是本地数据库的master分支,


orign/master是远程数据库的orign的master分支


e9ac961d34374aaab51a142f1005282e.png


如果本地数据库的master分支有新的历史记录,就需要合并双方的修改。


fa7b0c305de944889690a5408ff9a8b1.png


执行pull就可以进行合并,如果没有冲突的修改,就会自动创建合并提交。


如果发生冲突,先解决冲突,在进行手动提交


11862ce44aa549ca81a8161a25f8e189.png


8.2fetch


执行pull ,远程数据库的内容会进行自动合并,但是有时候只是想确认本地数据库的内容而不是合并,则会进行fetch


执行fetch 就可以取得远程数据库的最新历史记录,取得的提交会导入到没有名字的分支,这个分支可以从名为FETCH_HEAD的退出。


如:本地数据库和远程数据库的orign,如果在从B进行提交的状态下执行fetch,形成下面的历史记录

e04a96a1a1c14427b0038176ec851a0e.png


如果想要远程数据库的内容合并到本地数据库,可以进行合并FETCH_HEAD,或者重新执行pull


b09ecc845e0c4ca08b7e1a07fdbf4a2a.png


合并后,历史记录和pull相同,实际上pull的内容是fetch+merge组成的。


8.3 push


本地数据库oush到远程数据库时,要fast-forward合并push的分支。


如果发生冲突,push将会被拒绝,如果要进行共享本地数据库的分,需要明确的push,因此,没有执行push就不会给远程数据库带来影响,因此可以自由的创建自己的分支。


d65d87c8f30f47edb1b2283a0a8e4503.png


基本上,远程数据库共享的提交是不能修改的,如果进行修改的话,远程数据库同步的其他数据的历史就会变得很奇怪。


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


历史记录


0dcf720dd33f41aa8581d2734524f521.png


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             进行标签


d2bda6490fe5451e9ada316fce69ec77.png


10.4删除标签


如果需要删除标签 ,在tag命令指定-d选项执行


git  tag -d <tagname>


6f48c71a952147618744268dce40e0e8.png


11.改写提交


11.1修改最近提交


指定amend选项执行提交,可以修改同一个分支最近的提交内容和注解


主要使用的场景:


添加最近提交时漏掉的档案。


修改最近提交的注解。


11.2 取消过去的提交


在revert取消指定的提交内容,也可以使用rebase -i,reset可以删除提交,但是不可以随便删除已经发布的提交,需要通过revert创建要否定的提交


f273390db04c499fb074d4abf77eea5a.png


使用场合:


安全的取消过去发布的提交


11.3 遗弃提交


在reset可以遗弃不再使用的提交,执行遗弃的时候,需要根据影响的范围而指定不同的模式,可以指定是否复原索引或工作树的内容。


ec6692d1653349bfa0ab3e9314743302.png


默认:mixed模式,还有soft和hard模式。


如:


d946fc355f8c44a9a66e6939e2a93f13.png


主要使用的场合:


1.复原修改过的索引的状态mixed

2.彻底取消最近的提交hard

3.只取消提交soft


11.4 提取提交


再check-pick 可以进行指定复制的提交,然后导入到现在的分支。


f944bf21a3e84018bab191dfb451c8f2.png


主要使用的场合


1.将弄错的分支的提交移动到正确的地方

2.把其他分支的提交添加到现在的分支


11.5 改写提交的历史记录


在rebase里面,我们可以进行改写,替换,删除,合并提交

76bc20c2bc294a03bb0b386650a011ea.pngf318f047aa4141528e022150a70e42c3.png


主要使用场景


1.push之前,重新输入正确的提交注解。

2.清楚地汇合内容含义相同的提交。

3.添加最近提交时漏掉的档案


11.6 汇合分支上的提交,然后一同合并到分支


我们可以选择merge的选项 squash


使用这个进行指定分支进行合并,这样就可以把所有汇合的提交添加到分支上


670e3f80f548461ba453864d28c3ce55.png


主要使用的场景:


汇合主题分支的提交,然后合并提交到目的分支


12.改写提交


12.1commit --amend


进行修改最近的一次提交


进入stepup-tutorial/tutorial1目录。本地端的历史记录状态如


2f6deaf8c8c143cbbfcf3ea2e64e22da.png


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命令确认历史记录和提交信息。


c5d5730fc6994a98aeb28e57ce30332d.png


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的讲解}提交


进入目标目录,显示历史记录


5950cf7f463c4c2291de4c52422a71f2.png


用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的说明消失了,就表明取消提交成功。

3a2c2477aab04466a75584611354c05b.png



12.3 reset


使用reset来进行删除master分支最前面的两个提交。


进行目标目录,历史记录如下:


78da58808d7b4537830d153236a07f07.png


git log 确认信息


打开sample.txt的档案,确认内容


add 把变更录入到索引里面


commit 记录索引的状态


pull 取得远端数据库的内容


使用reset 进行删除提交


ea4f2a52dc774bb7be44d613c5842098.png


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


进入目标目录,历史记录的状态如下:


ce83b32da9814876bd2e690a9c249d87.png


git checkout master


git cherry-pick 99daed2


如果发生冲突就打开sample.txt,修改冲突的部分之后再提交


git add sample.txt


git commit


12.5  用rebase -i 汇合提交


进入目标目录,本地的历史记录


进行汇合(添加commit的讲解)和(添加pull的讲解)的修改,然后合并到一个提交。


cec0472d32e746e191779df5f42e767f.png


如果汇合过去的提交


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,保存并退出,由于合并后要提交,所以接着会显示提交信息的编辑器,编辑信息后保存并退出。


这样两个提交就合并成一个提交


历史记录:


cdcff1c40c694875b46b305384e0b2e2.png


12.6 用rebase -i 修改提交


打开目标目录 历史记录如下


修改(添加commit的讲解)的内容


eb57542dd2c24eb29ed80afb130ac592.png


使用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分支


1b8b0f86330744f393274d2d5d78fd44.png


切换到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命令确认历史记录。


相关文章
|
8月前
|
jenkins 开发工具 数据库
Git高级篇(1.3w字)(上)
Git高级篇(1.3w字)(上)
51 0
|
10天前
|
jenkins 持续交付 开发工具
Git高级使用技巧与策略
【4月更文挑战第30天】本文介绍了Git的高级使用技巧和策略,包括设置命令别名、使用`.gitignore`、交互式暂存、重新排序提交、变基和子模块。此外,还探讨了特性分支、主题分支等分支管理策略,强调保持历史整洁、原子提交以及应对紧急修复的方法。推荐使用GUI工具、钩子和持续集成工具提升效率。掌握这些技巧能有效提升代码管理和团队协作效率。
|
21天前
|
测试技术 数据处理 开发工具
《Git 简易速速上手小册》第5章:高级 Git 技巧(2024 最新版)
《Git 简易速速上手小册》第5章:高级 Git 技巧(2024 最新版)
25 2
|
2月前
|
开发工具 git
Git命令大全:从基础到高级应用
Git命令大全:从基础到高级应用
|
9月前
|
存储 缓存 运维
【运维知识高级篇】一篇文章带你搞懂Git!(Git安装+全局配置+Git初始化代码仓库+Git四大区域+Git四种状态+Git常用命令+Git分支+Git测试代码回滚)
【运维知识高级篇】一篇文章带你搞懂Git!(Git安装+全局配置+Git初始化代码仓库+Git四大区域+Git四种状态+Git常用命令+Git分支+Git测试代码回滚)
176 0
|
5月前
|
开发工具 git
git 高级用法
git 高级用法
35 0
git 高级用法
|
9月前
|
Java 开发工具 git
Git【java 高级】
Git【java 高级】
46 0
|
JavaScript Java 开发工具
接上篇:Git Worktree 高级使用,这样清爽多了
接上篇:Git Worktree 高级使用,这样清爽多了
接上篇:Git Worktree 高级使用,这样清爽多了
|
开发工具 git
Git高级操作
Git高级操作

相关实验场景

更多