git 创建分支会把复制所有代码吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git 创建分支会把复制所有代码吗相关的知识,希望对你有一定的参考价值。
git config -global user.name "Your name"git config -global user.email "you@example.com"
建立一个存放工程的文件夹
git init命令用于初始化当前所在目录的这个项目
会创建一个隐藏文件 .git
创建 main.c 文件
创建 .gitignore文件,忽略该文件里面有的项目文件
git status 查看项目状态
git add ..
给我目前的这个项目制作一个快照snapshot(快照只是登记留名,快照不等于记录在案,git管快照叫做索引index)
git commit用于将快照里登记的内容永久写入git仓库中,也就是开发者已经想好了要提交自己的开发成果了。
要说一句:切记写开发日志的时候,第一行一定要是少于50字的开发概括信息,而且第二行务必是空行,第三行开始才可以开始细致描述开发信息。这是因为很多版本服务系统中的email机制都会选取log中的第一行为邮件题目。
git commit -a这个命令可以直接提交所有修改,省去了你git add和git diff和git commit的工序
注意:无法把新增文件或文件夹加入进来,所以,如果你新增了文件或文件夹,那么就要老老实实的先git add .,再git commit
git log -p
如果你觉得git log给出的信息太单薄了,可以使用git log -p,这样git不但会给出开发日志,而且会显示每个开发版本的代码区别所在。
总结:先git add你修改过的文件,再git diff并git status查看确认,然后git commit提交,然后输入你的开发日志,最后git log再次确认。
创建分支
git branch experiment 创建一个分支
直接输入git branch,不加任何后续参数,就表示让git列出所有已存在的分支。
前面带“星号”的分支表示当前所在的分支。
切换分支到experiment
git checkout experiment
分支程序OK
git commit -a
在分支上提交工作
切换住干道
git checkout master
git commit -a
git merge experiment
合并分支到主干道
提示合并失败
查看源文件
git迷惑之处在于它不知道是把hello world这行放在前面还是把报时功能这段放在前面。
修改冲突
重新提交
git commit -a
gitk 图形化的git管理界面
合并完分支后,对分支进行删除
git branch -d experiment
-d,表示“在分支已经合并到主干后删除分支”。如果使用大写的-D的话,则表示“不论如何都删除分支”, 参考技术A 不会 他只会在里新建的分支上 保存修改的内容之后得自己进行 再合并
Git:从另一个分支复制目录中的所有文件
【中文标题】Git:从另一个分支复制目录中的所有文件【英文标题】:Git: copy all files in a directory from another branch 【发布时间】:2011-02-09 18:22:06 【问题描述】:如何从另一个分支复制目录中的所有文件?我可以通过
列出该目录中的所有文件git ls-tree master:dirname
然后我可以单独复制所有文件
git checkout master -- dirname/filename
但是,到目前为止,使用通配符完全失败了。这无济于事:
git checkout master -- dirname/*.png
虽然我想我可以使用 bash 脚本来做到这一点,但一定有更简单的方法,对吧?
【问题讨论】:
【参考方案1】:由于您没有尝试在树中移动文件,因此您应该能够检出目录:
git checkout master -- dirname
【讨论】:
如果我想保留复制过来的文件的提交消息怎么办? @totels,严格来说,没有与文件关联的提交消息;提交消息与提交对象本身相关联。这就是我猜你想要的:git checkout master -- dirname; git add dirname; git commit -c $COMMIT_SHA1 --reset-author;
其中$COMMIT_SHA1
可能就像branch_a
并且将是具有你想要的提交消息的提交对象。我不知道如何以编程方式确定最近更改为 dirname
的提交
这有一个非常奇怪的副作用。它复制了dirname
,但它也复制了master
分支的.gitignore
中的所有文件。知道这是为什么吗?
另一个副作用我认为如果当前分支有其他文件不在您要从中签出的分支中(在给定的目标文件夹中),它基本上会将它们合并在一起 - 也许这只是一个是祖先吗?我不确定条件,但是如果您在分支 A 中有 20 个文件,在分支 B 中有 20 个文件,并且其中只有 10 个具有相同的文件名,那么您最终会得到 30 个文件(至少在我的情况下,分支 A是分支B的祖先)
对于不熟悉 git 的人,您应该在运行上述答案时位于您的 target 分支中,该分支(在这种情况下)会将目录从 master
分支复制到你的目标。【参考方案2】:
如果路径中没有空格,并且您像我一样对特定扩展名的文件感兴趣,则可以使用
git checkout otherBranch -- $(git ls-tree --name-only -r otherBranch | egrep '*.java')
【讨论】:
很遗憾git不直接支持这个功能。就像 OP 一样,我原以为它会像git checkout master -- *.c
这个答案帮助我回答了“如何将给定模式的文件从另一个分支签出到我当前的工作分支?”【参考方案3】:
复制目录而不跟踪它:
git restore --source master dirname
【讨论】:
以上是关于git 创建分支会把复制所有代码吗的主要内容,如果未能解决你的问题,请参考以下文章
本地 GIT 分支和远程 GITHUB 分支是不是需要相同才能推送代码? [复制]