git fetch, merge, pull, push需要注意的地方

在git操作中,我们经常会用到fetch, merge, pull和push等命令,以下是一些我们需要注意的地方。

给大家准备了参考资料:

1. What?s a Fast Forward Merge?:https://sandofsky.com/images/fast_forward.pdf

2. Understanding the Git Workflow:https://sandofsky.com/blog/git-workflow.html

3. Understanding Git: Merging:http://www.sbf5.com/~cduan/technical/git/git-3.shtml

  1. $ git pull origin test
  2. // git pull合并代码的时候,若发生冲突,会处于merging状态,检查代码,发现自己的分支低于主分支,这个时候想撤销merge
  3. // 撤销merge
  4. git reset --hard HEAD (or sha_1)

git pull = git fetch + git merge

在git仓库中运行命令:git remote -v

可以看到fetch和push命令可以分别对远程分支进行fetch和push操作,而pull不是直接跟远程分支对话的。

fetch同pull的区别在于:git fetch:是从远程获取最新版本到本地,不会自动merge   而git
pull是从远程获取最新版本并merge到本地仓库   从安全角度出发,git fetch比git
pull更安全,因为我们可以先比较本地与远程的区别后,选择性的合并。   git push
默认推送到master,如果有多个分支,则多个分支一起推送到远程

git merge

git merge其实有很多参数的哦,我们来看看merge有哪些参数可以供我们选择:

git merge -n <branch> 不会在合并后显示合并前后的不同状态

git merge –stat <branch> 跟上面的参数相反,它会在合并结束后显示合并前后的不同状态

git merge -e <branch> 在合并之前会调用配置的编辑器,您可以自己编写commit,否则的话commit的内容就是git自动生成的

git merge –no-commit <branch>相当于一次快进式合并,不会生成一次提交,如下图所示:

git merge –stat <branch> 在合并后会显示不同的状态,如下图红色框中部分:

git merge –no-stat <branch> 合并后不会显示不同的状态,如下图:

git merge –quiet <branch> 无声的合并(不会输出任何信息)

git merge –ff <branch> 当合并是快进式合并的时候,仅仅是更新了分支的指针,不会产生合并提交,这也是默认的合并行为

git merge –no-ff <branch> 及时是快进式合并,也会创建一个合并提交

git merge –ff-only <branch> 只允许快进式合并

快进式合并和非快进式合并

何为快进式合并??

如果当前的分支和另一个分支没有内容上的差异,就是说当前分支的每一个提交(commit)都已经存在另一个分支里了,git 就会执行一个“快速向前”(fast forward)操作;git 不创建任何新的提交(commit),只是将当前分支指向合并进来的分支。

快进式和非快进式的区别

目前仓库的状态是,master分支上有了5次提交,然后基于master创建分支test,并在test上进行3次提交,接下来,我在master分支上对test分支分别进行快进式和非快进式合并。

先进行快进式合并, git merge test (默认为–ff合并),如下图所示,我们看到一共是5+3=8个提交,分支的提交历史也没有“开叉”,即没有多个父提交节点。

随后,我回到master的第五次提交,然后对test进行非快进式合并,git merge –no-ff test

这时候,同快进式合并不同的是,在c5处产生了“开叉”,然后新生成了一个commit “Merge branch ‘test‘”,即多了一个父提交。

现在,大家应该对这两种合并有了一种直观的了解了吧。

非快进式合并

非快进式合并会生成新的提交,并“开叉”,可以让我们的提交历史更加的清晰!

http://www.cnblogs.com/hutaoer/archive/2013/03/14/3078869.html

原文地址:https://www.cnblogs.com/zjm-1/p/11039857.html

时间: 2024-10-05 05:31:57

git fetch, merge, pull, push需要注意的地方的相关文章

[转] git fetch与pull

原文: http://www.tech126.com/git-fetch-pull/ Git中从远程的分支获取最新的版本到本地有这样2个命令:1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge git fetch origin mastergit log -p master..origin/mastergit merge origin/master 以上命令的含义:   首先从远程的origin的master主分支下载最新的版本到origin/master分支上  

转Git fetch 和 pull 的区别

原文:http://blog.csdn.net/hudashi/article/details/7664457 Git中从远程的分支获取最新的版本到本地有这样2个命令:1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge git fetch origin mastergit log -p master..origin/mastergit merge origin/master 以上命令的含义:   首先从远程的origin的master主分支下载最新的版本到origin

git fetch和pull的区别

Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge 1 2 3 Git fetch origin master git log -p master..origin/master git merge origin/master 以上命令的含义: 首先从远程的origin的master主分支下载最新的版本到origin/master分支上:然后比较本地的master分支和origin/master分支的差别:最后进

Git 少用 Pull 多用 Fetch 和 Merge(转)

英文原文:git: fetch and merge, don’t pull This is too long and rambling, but to steal a joke from Mark Twain Blaise Pascal I haven’t had time to make it shorter yet.  There is some discussion of this post on the git mailing list, but much of it is tangen

Git 少用 Pull 多用 Fetch 和 Merge(转)

This is too long and rambling, but to steal a joke from Mark Twain Blaise Pascal I haven’t had time to make it shorter yet.  There is some discussion of this post on the git mailing list, but much of it is tangential to the points I’m trying to make

第二章-第二题(练习使用git的add/commit/push/pull/fetch/clone等基本命令)--梁绍楠

题目描述: 每人自己建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令.比较项目的新旧版本的差别. 使用步骤: (1)创建版本库 选择一个合适的地方,创建一个空目录HelloWorld.而后通过git init把这个目录变成Git可以管理的仓库(目录下会多出了一个.git目录,该目录是git跟踪管理版本库的,勿轻易修改): 编辑hello文件,内容如下: (2)将文件hello放到git仓库 首先,需要设置用户名.邮箱信息

Git 协作:Fetch Pull Push Branch Remote相关

前言 学习git的时候,我们首先学习的是最常用的,自己独立开发Software时用的命令: git init #初始化git仓库 git add <file_name> #将文件添加到暂存区 git rm <file_name> #将暂存区的该文件删除 git commit -m "<commit info>" #将暂存区的修改提交到当前分支 git status #查看当前状态 git reset --hard <commit_id>

第二章-第二题(练习使用git的add/commit/push/pull/fetch/clone等基本命令)-By郭青云(未完待续)

题目描述: 每人自己建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令.比较项目的新旧版本的差别. 使用步骤: 未完待续...... 参考文件:http://blog.csdn.net/u012575819/article/details/50553501

git:Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists).

Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists). 解决办法一:保留本地的更改,中止合并->重新合并->重新拉取 $:git merge --abort $:git reset --merge $:git pull 解决办法二:舍弃本地代码,远端版本覆盖本地版本(慎重) $:git fetch --all $:git reset --hard origin/ma