2023暑期学习
- Git基础
- Git Fetch VS Git Pull
- git pull --rebase VS git pull
- 几种merge的方法
- Fork VS Clone CS Branch
- 如何把master的内容更新到分支上
- 详尽介绍 git fetch VS git pull
- 其他命令
Git基础
git branch branch-name
# 创建一个新的分支
=========================
git checkout branch-name
# 切换到新的分支
=========================
git log
# 查看所有的commits操作 以及显示对应的hash
git log --online --graph --all
# 以图像的方式显示出所有commits的操作
=========================
git status
# 显示工作目录和暂存区域的状态。
# 它可以让您查看哪些变更已commit,哪些尚未commit,以及哪些文件未被Git 跟踪untracked。
# 状态输出不显示有关已提交项目历史记录的任何信息
=========================
对于未跟踪的文件,通常分为两类。要么是刚刚添加到项目中但尚未提交的文件,要么是编译后的二进制文件,比如 .pyc、.obj、.exe 等等,或者是运行了什么模型产生的文件。
git show log-hash
# 显示提交的所有内容
=========================
git diff log-hash
# 显示更改的内容
=========================
git branch -a |grep layers
# 显示所有的 远程跟踪的分支和本地分支【包含layers的名字】
=========================
git reset log-hash
# 回退到指定版本
=========================
git reset --hard origin/master
# 将本地的状态回退到和远程的一样
# throw away all my staged and unstaged changes,
# forget everything on my current local branch
# and make it exactly the same as origin/master
=========================
Git Fetch VS Git Pull
git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。
而git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。
git pull --rebase VS git pull
git pull --rebase -->
git pull就是先fetch,然后执行merge操作,如果加-rebase参数,就是使用git rebase代替git merge 。更新本地仓库
那 merge 和 rebase的区别在哪
可以看到merge操作会生成一个新的节点,之前提交分开显示。而rebase操作不会生成新的节点,是将两个分支融合成一个线性的操作。
通过上面可以看到,想要更好的提交树,使用rebase操作会更好一点,这样可以线性的看到每一次提交,并且没有增加提交节点。
在操作中。merge操作遇到冲突时候,当前merge不能继续下去。手动修改冲突内容后,add 修改,commit 就可以了
而rebase操作的话,会中断rebase,同时会提示去解决冲突。解决冲突后,将修改add后执行git rebase -continue继续操作。
===========
几种merge的方法
https://www.youtube.com/watch?v=CRlGDDprdOQ
https://morningspace.github.io/tech/git-merge-stories-1/
一开始, master有两个commits。m1 --> m2
然后你拉下来进行,并创建了一个feature branch进行修改,所以你的logs为 m1 --> m2 --> f1 --> f2
但此时 另一个开发者已经对matser进行修改 所以master的logs变成 m1 --> m2 --> m3
此时 你需要如何解决并merge呢。
有几种方法
(1)merge
(2)squash merge
(3)rebase
git rebase master
就可以把master的东西自己的分支合并。【在这之前 需要checkout到master分支,把最新的远程master pull下来】
Fork VS Clone CS Branch
- fork 只能对代码仓进行操作,且 fork 不属于 git 的命令,通常用于代码仓托管平台的一种“操作”
- clone 是 git 的一种命令,它的作用是将文件从远程代码仓下载到本地,从而形成一个本地代码仓
- branch 特征与 fork 很类似,fork 得到的是一个新的、自己的代码仓,而 branch 得到的是一个代码仓的一个新分支
如何把master的内容更新到分支上
https://blog.csdn.net/chen134225/article/details/100128593
当你在work on你的分支的时候,这个时候,很可能远程master的内容已经有更新了。这个时候,必须要把远程的内容更新到你的分支上,如果有conflicts 你需要手动来解决,再push上去。
下面是具体的步骤:
(1)切回master的分支
git checkout master
(2)将远程的master代码pull到本地
git pull
(3)切换到你的分支下,比如是dev
git checkout dev
(4)合并master到dev分支
git merge master
如果在合并的过程中,提示某文件出现冲突了,手动修改一下这个文件,修改成自己想要内容;然后add和commit一下这个文件。
(5)将本地分支的代码push到远程仓库对应的分支上
git push
或者最简单的方式是直接使用
git pull --rebase
这个会把最新的origin master的code pull下来 跟你现在的分支进行合并。
详尽介绍 git fetch VS git pull
命令查看关联的主机名字
git remote -v
ouput:
origin git@github.com:jquery/jquery.git (fetch)
origin git@github.com:jquery/jquery.git (push)
这里关联的主机名字为origin。
git fetch命令通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响。
默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。
git fetch <远程主机名> <分支名>
比如,取回origin主机的master分支。
git fetch origin master
查看远程所有分支
git branch -r
output:
origin/3_layers
origin/ASKEXIT-145.bid_handler_timeout_exp
origin/ASKEXIT-146.p1
origin/ASKEXIT-146.p2
origin/ASKEXIT-146.p3
origin/AddAgencyEntity
...
...
补充
有时候分支过多,可以使用这个命令查找你的那个分支
git branch -r|grep layer
# 意思是查找所有包含layer的远程分支
查看所有的分支
git branch -a
output:
* new_3layers
remotes/origin/2275_run_test_env_in_jenkins
remotes/origin/3_layers
remotes/origin/ASKEXIT-145.bid_handler_timeout_exp
remotes/origin/ASKEXIT-146.p1
remotes/origin/ASKEXIT-146.p2
remotes/origin/ASKEXIT-146.p3
所以这里的关键点事
远程主机名 --> origin
远程分支名 --> 3_layers
本地分支名 --> new_3layers
当你要pull 拉下来的时候,使用命令
git pull <远程主机名> <远程分支名>:<本地分支名>
比如,取回origin主机的3_layers分支,与本地的new_3layers分支合并,需要写成下面这样
git pull origin 3_layers:new_3layers
如果远程分支是与当前分支合并,则冒号后面的部分可以省略
直接写成
git pull origin 3_layers
如果想要rebase的模式进行merge的话,则直接用
git pull --rebase origin 3_layers
如果存在追踪关系,则直接可以用 git pull
同理,git push也是
但为了理解,还是用全。
git push <远程主机名> <本地分支名>:<远程分支名>
git push origin new_3layers:3_layers
介绍Git的非常详尽的文章
https://www.ruanyifeng.com/blog/2014/06/git_remote.html
其他命令
将本地的main分支重置到远程版本库:
git reset --hard origin/main
清理任何未被追踪的变化
git clean -xdf