真正理解 git fetch, git pull
要讲清楚git fetch,git pull,必须要附加讲清楚git remote,git merge 、远程repo, branch 、 commit-id 以及 FETCH_HEAD。
1. 【git remote】首先, git是一个分布式的结构,这意味着本地和远程是一个相对的名称。
本地的repo仓库要与远程的repo配合完成版本对应必须要有 git remote子命令,通过git remote add来添加当前本地仓库的远程repo, 有了这个动作本地的repo就知道了当遇到git push 的时候应该往哪里提交代码
(git push 后不加参数的时候,默认就是git push origin 当前的分支名,比如对本地的master分支执行git push,其实就是git push origin master,当然,如果远程仓库没有master这个分支的话,肯定会报错)。
2. 【git branch】其次,git天生就是为了多版本分支管理而创造的,因此分支一说,不得不提, 分支就相当于是为了单独记录软件的某一个发布版本而存在的,既然git是分布式的,便有了本地分支和远程分支一说,git branch 可以查看本地分支, git branch -r 可以用来查看远程分支。 本地分支和远程分支在git push 的时候可以随意指定,交错对应,只要不出现版本冲突即可。
3. 【git merge】再者,git的分布式结构也非常适合多人合作开发不同的功能模块,此时如果每个人都在其各自的分支上开发一个相对独立的模块的话,在每次release制作时都需先将各成员的模块做一个合并操作,用于合并各成员的工作成果,完成集成。 此时需要的就是git merge.
4.【git push 和 commit-id】在每次本地工作完成后,都会做一个git commit 操作来保存当前工作到本地的repo, 此时会产生一个commit-id,这是一个能唯一标识一个版本的序列号。 在使用git push后,这个序列号还会同步到远程repo。
在理解了以上git要素之后,分析git fetch 和 git pull 就不再困难了。
首先,git fetch 有四种基本用法
1. git fetch →→ 这将更新git remote 中所有的远程repo 所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中
2. git fetch remote_repo →→ 这将更新名称为remote_repo 的远程repo上的所有branch的最新commit-id,将其记录。
3. git fetch remote_repo remote_branch_name →→ 这将这将更新名称为remote_repo 的远程repo上的分支: remote_branch_name
4. git fetch remote_repo remote_branch_name:local_branch_name →→ 这将这将更新名称为remote_repo 的远程repo上的分支: remote_branch_name ,并在本地创建local_branch_name 本地分支保存远端分支的所有数据。
FETCH_HEAD: 是一个版本链接,记录在本地的一个文件中,指向着目前已经从远程仓库取下来的分支的末端版本。
git pull 的运行过程:
git pull : 首先,基于本地的FETCH_HEAD记录,比对本地的FETCH_HEAD记录与远程仓库的版本号,然后git fetch 获得当前指向的远程分支的后续版本的数据,然后再利用git merge将其与本地的当前分支合并。
git pull 后不加参数的时候,跟git push 一样,默认就是git pull origin 当前分支名,当然远程仓库没有跟本地当前分支名一样的分支的话,肯定会报错。
本地master分支执行git pull的时候,其实就是git pull origin master。
拆解git pull 操作。
git pull操作其实是git fetch 与 git merge 两个命令的集合。
git pull 等效于先执行 git fetch origin 当前分支名, 再执行 git merge FETCH_HEAD.
通过上述分析,可以知道,如果要合并代码就并不一定要用git merge命令了,也可以用git pull命名的,比如要把远程origin仓库的xx分支合并到本地的yy分支,可以有如下两种做法。
第一种,传统标准的做法:
git fetch origin 目标分支名 // fetch到远程仓库目标分支的最新commit记录到 ./git/FETCH_HEAD文件中
git checkout 要被合并的分支名 // 切换到要合并的分支
git merge FETCH_HEAD // 将目标分支最新的commit记录合并到当前分支
举例说明:将远程origin仓库的xx分支合并到本地的yy分支。
git fetch origin xx
git checkout yy
git merge FETCH_HEAD
完成。
第二种,直接使用pull命令,将远程仓库的目标分支合并到本地的分支:
git pull <remoterepo_name> <branch_name>
举例说明:将远程origin仓库的xx分支合并到本地的yy分支
git checkout yy
git pull origin xx
完成。
其实还有一种思路,在前面第一种,第二种方式的基础上,可以这样来思考。
是否可以先本地checkout远程目标分支,或者本地已经有了,先pull更新下来,然后将本地的两个分支进行merge不也可以吗?
答案是肯定的。
举个例子:
将远程origin仓库的xx分支合并到本地的yy分支。
git checkout xx
git pull // 如果本地没有xx分支的,这一步都可以不执行。
git checkout yy // 切换到yy分支
git merge xx // 将xx分支合并到yy分支 这一步可以加上 --no-ff 参数,即 git merge --no-ff
相关推荐
Git pull 和 Git fetch 命令的理解与区别 在 Git 版本控制系统中,git pull 和 git fetch 是两个常用的命令,它们都用于从远程仓库获取最新的代码版本,但是它们之间存在着一定的区别。 首先,让我们从基础开始,...
最近在一个基于 git 的发布系统中拉取代码,发现无法拉取最新的提交记录,通过调试和查看日志文件找到一行错误:error: cannot open .git/FETCH_HEAD: Permission denied,原因是文件权限问题导致。 问题原因 ...
例如,如果你从`FETCH_HEAD`合并到本地的`master`分支,可以使用`git merge FETCH_HEAD`。 另一方面,`git pull`命令则是`git fetch`和`git merge`的组合。当你运行`git pull`时,它首先执行`git fetch`获取远程...
通过`git remote add`可以关联远程仓库,`git push`将本地更改推送到远程,而`git pull`则用于获取远程仓库的更新。Git的`fetch`和`merge`命令还可以用来获取并整合远程分支的更改。 对于冲突解决,Git提供了一套...
理解`git fetch`和`git pull`的区别是使用Git的关键。在实际工作中,根据项目管理策略和个人喜好,你可以选择使用其中一个或结合两者。在不确定的情况下,`git fetch`通常是更安全的选择,因为它允许你在合并之前...
5. 异步操作:Git-2.8.1-64-bit支持异步操作,用户可以在进行耗时的命令(如push或fetch)的同时进行其他工作,提高了开发的效率。 6. Git Bash:这个版本包含了Git Bash,一个模拟Linux命令行环境的工具,使得...
8. **远程分支**:`origin/master`是远程仓库(如GitHub)上的master分支的本地引用,可以使用`git fetch`和`git pull`来更新本地的远程分支。 9. **HEAD指针**:HEAD是一个特殊的指针,总是指向当前分支的最新提交...
`git remote`命令用于管理远程仓库,`git fetch`和`git pull`操作用于与远程仓库同步。 6. **解决冲突**:当多人同时修改同一部分代码时,Git可能会报告冲突。使用`git diff`查看冲突,并手动编辑冲突文件以解决。...
以及如何使用,需要查看其官方文档或解压`git-fetch-gitignore-0.0.2`这个压缩包,查看其中的`README`、`setup.py`等文件,或者直接在Python环境中运行`import git_fetch_gitignore; print(git_fetch_gitignore.__...
`git remote add origin url`命令添加远程仓库,`git fetch`或`git pull`用来获取远程仓库的更新,而`git push`则用于将本地变更推送到远程仓库。此外,`git clone`命令可以复制远程仓库到本地,便于团队成员快速...
这个操作包括了`git fetch`(获取远程仓库的最新变更)和`git merge`(将获取的变更合并到本地分支)两步。在日常开发中,我们经常用`git pull`来保持本地代码与远程仓库的同步。 在Windows环境下,批处理脚本(....
`git fetch`和`git pull`用于从其他副本获取更新,`git push`则将本地更改共享出去。 了解和熟练使用Git是现代软件开发者的必备技能。通过实践和学习,你可以掌握Git的强大功能,提高团队协作效率,确保代码的安全...
Git pull命令与fetch命令的区别 今天在公司碰到个问题,公司不使用master分支作为主分支,而使用release分支作为主分支,这就碰到了个问题,也就是当clone一个项目下来的时候,如果master跟release分支有冲突,就不...
7. **远程操作**: 除了基本的`push`和`pull`,还可以使用`git fetch`获取远程仓库的更新但不合并,`git remote`管理远程仓库的链接,以及`git push --force`强制推送,但这通常只在特殊情况下使用,因为可能会覆盖...
对于团队项目,可以使用`git clone`下载远程仓库,`git pull`同步远程更新,`git push`推送本地更改,以及`git fetch`和`git merge`或`git rebase`来整合远程分支。 总之,Git-2.37.3-64-bit_3.exe是Git的64位...
另外,`git pull`命令通常结合`git fetch`一起使用,它不仅获取远程更新,还会尝试合并到本地分支,但`gitfetch`工具主要关注的是获取更新,而不是合并。 总的来说,`git自动更新远程仓库工具`通过`gitfetch`简化了...
`git remote`命令用于管理远程仓库,`git push`将本地提交推送到远程仓库,而`git pull`则将远程仓库的更新拉取到本地。此外,`git fetch`和`rebase`在协作中也起到关键作用,它们可以获取远程变更并在本地历史之上...
- `git fetch <remote>`:获取远程仓库的信息,但不合并。 - **其他命令**: - `git log`:查看提交历史。 - `git diff`:比较文件差异。 - `git blame <file>`:查看文件每行的最后修改者。 - `git stash`:...