网站配色方案橙色,网站最常用字体,网站点击按钮回到页面顶部怎么做,网站强制使用极速模式目录git branchgit branch creategit 查看分支git cherry-pickgit blamegit patchgit rebasegit submodulegithubgithub 创建远程代码仓库github clone 远程仓库到本地github 修改文件提交到本地仓库github push 到远程分支git branch
git 分支可以理解为代码的平行世界#…目录git branchgit branch creategit 查看分支git cherry-pickgit blamegit patchgit rebasegit submodulegithubgithub 创建远程代码仓库github clone 远程仓库到本地github 修改文件提交到本地仓库github push 到远程分支git branchgit分支可以理解为代码的平行世界你可以在任意一个平行世界里开发代码其他的平行世界不受影响Git的分支模型称为必杀技特性而正是因为它将Git从版本控制系统家族里区分出来真正改变你的开发模式举两个分支管理的应用场景场景一假设你准备开发一个新功能但是需要两周才能完成第一周你写了50%的代码如果立刻提交由于代码还没写完不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交又存在丢失每天进度的巨大风险。现在有了分支就不用怕了。你创建了一个属于你自己的分支别人看不到还继续在原来的分支上正常工作而你在自己的分支上干活想提交就提交直到开发完毕后再一次性合并到原来的分支上这样既安全又不影响别人工作场景二假设一个公司有一套代码面向不同的客户每个客户都有自己的客制化功能如果全部提交到git 上非常冗余。有了git 的分支技术就很方便。给每个客户都创建一个单独的分支如果代码要release 给客户也可以做到不同客户之间的代码相互保密。git branch creategitcheckout BranchName# switch to an exist branchgitcheckout -b BranchName# create and switch to a new local branchgitbranch -d BranchName# delete a local branchgit 查看分支gitbranch -av# show all branchesgitbranch -r# show remote branchesgitbranch# show local branchesgitbranch BranchName# create a new local branch从远程分支checkout出来的本地分支称为_跟踪分支(tracking branch)_。跟踪分支是一种和远程分支有直接联系的本地分支。在跟踪分支里输入git pushGit会自行推断应该向哪个服务器的哪个分支推送数据。反过来在这些分支里运行git pull会获取所有远程索引并把它们的数据都合并到本地分支中来。就是将本地分支和远程的分支相互关联在克隆仓库时Git 通常会自动创建一个名为master的分支来跟踪origin/master。这正是git push和git pull一开始就能正常工作的原因。当然你可以随心所欲地设定为其它跟踪分支比如origin上除了master之外的其它分支。gitcheckout branchname --track Remote name/BranchName# create and switch to a new branch to track remote branch比如gitcheckout -b c_cn_9380_yst_cn_an_cus-cus --track aosp/c_cn_9380_yst_cn_an_cus-cusgitcheckout -t 远程的分支 直接切到追踪远程的分支分支合并一旦某分支有了独立内容你终究会希望将它合并回到你的主分支你可以使用以下命令将任何分支合并到当前分支中去gitcheckout master // 切换到Master分支gitmerge --no-ff develop // 对Develop分支进行合并 --no-ff 参数的含义默认情况下Git执行快进式合并fast-farward merge会直接将Master分支指向Develop分支。使用--no-ff参数后会执行正常合并在Master分支上生成一个新节点。git cherry-pickgit cherry-pickcommit hashcherry-pick命令应用于需要将其他分支的commit合并到当前分支的情形cherry-pick之后会生成一笔新的提交。git blamegit blame文件名通过git blame命令我们可以查出某个文件的每一行内容到底是由哪位大神所写可以非常方便的定位问题git patch本身Linux命令里有diff和patch两个命令可以生成patch和打patch但是有两个缺点值得注意对单个文件或者多个文件diff和patch这两个文件比较方便。对于git这种以project为单位的修改尤其是涉及到多个文件夹下的多个文件的改动时就很不方便无法保存commit的信息。git 本身带有patch 的命令git 生成patch 的命令如下gitformat-patch HEAD^生成最近的1次commit的patchgitformat-patch HEAD^^生成最近的2次commit的patch$gitformat-patchr1..r2生成两个commit间的修改的patch包含两个commit. 和都是具体的commit号)gitformat-patch -1r1生成单个commit的patch$gitformat-patchr1生成某commit以来的修改patch不包含该commit$ git format-patch--rootr1生成从根到r1提交的所有patch合入patch 的命令git am 和 git applygitapply --stat 0001-limit-log-function.patch查看patch的情况gitapply --check 0001-limit-log-function.patch检查patch是否能够打上如果没有任何输出则说明无冲突可以打上(注git apply是另外一种打patch的命令其与git am的区别是git apply并不会将commit message等打上去打完patch后需要重新git add和git commit而git am会直接将patch的所有信息打上去而且不用重新git add和git commit,author也是patch的author而不是打patch的人)$ git am0001-limit-log-function.patch将名字为0001-limit-log-function.patch的patch打上$ git am --signoff 0001-limit-log-function.patch添加-s或者–signoff还可以把自己的名字添加为signed off by信息作用是注明打patch的人是谁因为有时打patch的人并不是patch的作者gitam ~/patch-set/*.patch 将路径~/patch-set/*.patch 按照先后顺序打上$gitam --abort当git am失败时用以将已经在am过程中打上的patch废弃掉(比如有三个patch打到第三个patch时有冲突那么这条命令会把打上的前两个patch丢弃掉返回没有打patch的状态)gitam --resolved当git am失败解决完冲突后这条命令会接着打patchgit rebase把一个分支的修改合并到当前分支。假设现在我基于远程的分支(master)建立一个名为A的本地分支我们在这个分支做一些修改然后生成两个提交(commit)有些人也在master分支上做了一些修改并且做了提交了. 这就意味着master和A这两个分支各自前进了它们之间分叉了。在这里你可以用pull命令把master分支上的修改拉下来并且和你的修改合并 结果看起来就像一个新的合并的提交(merge commit):但是如果你想让A分支历史看起来像没有经过任何合并一样你也许可以用 git rebase:git checkout A git rebase master这些命令会把你的A分支里的每个提交(commit)取消掉并且把它们临时保存为补丁(patch)(这些补丁放到.git/rebase目录中),然后把A分支更新 为最新的origin分支最后把保存的这些补丁应用到A分支上。在rebase的过程中也许会出现冲突(conflict). 在这种情况Git会停止rebase并会让你去解决 冲突在解决完冲突后用git-add命令去更新这些内容的索引(index), 然后你无需执行 git-commit,只要执行:gitrebase --continue这样git会继续应用(apply)余下的补丁。在任何时候你可以用–abort参数来终止rebase的行动并且mywork 分支会回到rebase开始前的状态。gitrebase --abort另外我们在使用git pull命令的时候可以使用–rebase参数即git pull --rebase,这里表示把你的本地当前分支里的每个提交(commit)取消掉并且把它们临时 保存为补丁(patch)(这些补丁放到.git/rebase目录中),然后把本地当前分支更新 为最新的origin分支最后把保存的这些补丁应用到本地当前分支上。将多笔提交合并为一个提交git rebase -i 命令可以压缩合并多次提交格式git rebase -i [startpoint] [endpoint]其中-i的意思是–interactive即弹出交互式的界面让用户编辑完成合并操作[startpoint] [endpoint]则指定了一个编辑区间如果不指定[endpoint]则该区间的终点默认是当前分支HEAD所指向的commit(注该区间指定的是一个前开后闭的区间)。// 合并从当前head到15abd5678 (commit id)gitrebase -i 15abd5678或:// 合并最近的两次提交gitrebase -i HEAD~2执行这个命令后会跳到一个vi编辑器里面的提示有pick保留该commit缩写:preword保留该commit但我需要修改该commit的注释缩写:redit保留该commit, 但我要停下来修改该提交(不仅仅修改注释)缩写:esquash将该commit和前一个commit合并缩写:sfixup将该commit和前一个commit合并但我不要保留该提交的注释信息缩写:fexec执行shell命令缩写:xdrop我要丢弃该commit缩写:d保存之后会弹出对话框让你修改你的 commit message,修改完成之后保存就可以了。如果 rebase 的内容需要丢弃要使用 git rebase --abortgit submodulegitsubmodulesyncgitsubmodule --init --rescursivegithubGitHub是一个面向[开源]及私有[软件]项目的托管平台因为只支持Git作为唯一的版本库格式进行托管故名GitHub在这里我们将github作为一个远程git仓库使用在github你可以新建自己的代码仓库提交下载管理代码Github需要提前注册网上有很多教程这里不再赘述了tips: 实际在操作中发现因为国内的某些原因github 的连接不稳定git clone 的时候出现失败的问题gitclone https://github.com/tony-chenwang/source_code.git Cloning intosource_code... fatal: unable to accesshttps://github.com/tony-chenwang/source_code.git/:Failed to connect to github.com port443: Connection refused这个时候打开github 的网页地址试试看https://github.com/tony-chenwang/source_code能正常打开之后再clone 版本仓库试试看github 创建远程代码仓库登录到自己的github主页网页左上角的RepositoriesNew进入下面的网页代码仓库的名称可以自己定义代码仓库的描述相当于对代码仓库的注释信息会出现在下面的readme 文件中该代码仓库是公开还是私有的公开所有人都可以下载私人只有自己可以下载新建代码仓库的时候自带一个readme文件作为初始化信息点击创建自己的代码仓库创建完成的代码仓库如下图github clone 远程仓库到本地点击code复制远程的代码仓库地址在ubuntu上clone远程仓库tony-chenDESKTOP-54IDJCR:/mnt/d/Ubuntu$gitclone https://github.com/tony-chenwang/demo_repo.git Cloning intodemo_repo... remote: Enumerating objects:3, done. remote: Counting objects:100%(3/3), done. remote: Total3(delta0), reused0(delta0), pack-reused0Unpacking objects:100%(3/3), done. tony-chenDESKTOP-54IDJCR:/mnt/d/Ubuntu$github 修改文件提交到本地仓库tony-chenDESKTOP-54IDJCR:/mnt/d/Ubuntu/demo_repo$gitstatus On branch main Your branch is up todatewithorigin/main.Untracked files:(usegit add file...to includeinwhat will be committed)NdkImage.h nothing added to commit but untracked files present(usegit addto track)git add .git commit 添加自己的注释github push 到远程分支tony-chenDESKTOP-54IDJCR:/mnt/d/Ubuntu/demo_repo$gitpush origin HEAD:origin/HEAD Usernameforhttps://github.com:604848340qq.com Passwordforhttps://604848340qq.comgithub.com:Counting objects:3, done. Delta compression using up to8threads. Compressing objects:100%(3/3), done. Writing objects:100%(3/3),6.39KiB|1.60MiB/s, done. Total3(delta0), reused0(delta0)remote: remote: Create a pull requestforremotes/origin/HEADon GitHub by visiting: remote: https://github.com/tony-chenwang/demo_repo/pull/new/remotes/origin/HEAD remote: To https://github.com/tony-chenwang/demo_repo.git *[new branch]HEAD -remotes/origin/HEAD