git看不到远程分支,怎么办?

问题描述

git上已经有人建立分支branch170628_foo,希望在本地切换到该分支。但使用git命令切换分支时报错。

查看远程分支,发现看不到目标分支。

解决方案

先用fetch命令更新remote索引。

再查看remote分支,发现已经可以看到目标分支branch170628_foo。

再切换分支:

 

0

Git远程协作的工作流程

Git远程协作的工作流程

流程细节

1. Fork

在github上你要贡献的repo(eg.http://github/remote/test.git)之后称上游仓库。点击fork,将上游仓库fork到你的github,之后称为远程库(eg.http://github/chercher/test.git)

2. Clone

选择本地文件夹,之后称为本地库

3. 创建dev分支

进入文件夹中,创建dev分支作为你的开发分支,当你完成了这个开发分支的时候直接将这个分支的内容push到你的远程库。一般一个分支对应一个issue,开发完毕后即可销毁 git checkout -b dev 创建并切换至dev分支,是git branch dev + git checkout dev

4. 创建upstream分支

upstream分支是用于同步上游仓库的,可以同步其他人对上游仓库的更改 git remote add upstream http://github/remote/test.git 这时候用git remote 可以查看远程分支,git remote -v 可以查看具体路径 这时候应该有origin、upstream两种分支且分别有fetch和push的路径,origin是你的远程库,upstream是你的上游仓库 tips: 如果远程分支路径出错了,git remote set-url branch_name new_url 替换为具体的你的出错的分支名和新的路径即可

5. 同步上游仓库

在提交自己的修改之前,先同步上游仓库到master

6. 修改文件push到远程库

对本地库进行修改后,git add changed_file & git commit -m"message" 添加文件到暂存区然后提交,写入相应信息。 git push origin dev:dev 这时你的远程库将会多出一个dev分支

7. 提出pull request

这时候在你的远程库中点击create pull request,就可以等待别人review你的代码后merge入上游仓库了

8. 合并commit

一个issue有时候并不是一次commit就可以完成的,这时候就涉及到洁癖患者们用rebase合并commit的过程了 第一次commit的时候并不需要做rebase的操作,rebase是将之后的多次commit合并到之前的一个commit当中 以第二次修改为例,在commit之后进行 git rebase -i HEAD~2

补充

git 不留记录回滚到指定版本,并推送到远程分支

 

0

git的stash(贮藏)功能的命令使用

sourcetree里的贮藏功能非常好用,可以把自己一些修改过的,但是暂时还不需要提交的代码,存放起来,给它起个名字,然后下次要用它,可以直接恢复它,非常方便,我最喜欢用它来贮藏我的一些本地开发环境,非常方便。

其实git里直接用命令来实现这一系列功能也很方便,就是 git stash 。

stash命令可用于临时保存和回复修改,可跨分支。

注:在未add之前才能执行stash!!!!

git stash save message
git stash save message

保存,save为可选项,message为本次保存的注释

git stash list
git stash list

所有保存的记录列表

恢复,num是可选项,通过git stash list可查看具体值。只能恢复一次。

git stash apply stash@{num}
git stash apply stash@{num}

恢复,num是可选项,通过git stash list可查看具体值。可恢复多次。

删除某个保存,num是可选项,通过git stash list可查看具体值

删除所有保存

 

0

svn无痛迁移git实战

1.需求

适用于希望把版本控制迁移到git上,但由于各种不可抗力无法完全舍弃svn的用户. 在不变动原有svn部署,集成,相关脚本的情况下,无痛迁移git.

2.所需依赖

在与git的交互上使用了expect,同时也需要git&svn客户端

3.实现思路

1.使用命令导出svn项目到git.

2.使用gitlab钩子实现根据push事件钩子自动发送http请求,同步代码到svn.
所以我们需要使git的master分支与svn的主分支保持一致,所以使用项目的.svn无痛迁移git实战gitlab 10.6 版本以后为了安全,不允许向本地网络发送webhook请求,如果想向本地网络发送webhook请求,则需要使用管理员帐号登录. 在settings标签中找到OutBound Request,勾选上Allow requests to the local network from hooks and services,保存更改即可解决问题.

3.搭建http服务器接收钩子请求.
由于笔者的技术栈中java为第一语言,推荐通过SpringBoot快速构建一个稳定的web服务.

4.同步git修改到svn

4.总结

1.主要使用的特性为,git svn命令,该命令可以操作svn并将项目同时并入git&svn控制.
2.使用了gitlabURL钩子来实现实时同步推送.如果不使用gitlab,可能需要自己实现一个触发器才行.

0

git如何修改历史提交commit记录

git如何修改历史提交commit记录?可以分为以下几种情况。

1、修改最后一次提交记录

$ git commit –amend

进入命令模式,按 i 进入编辑模式,修改好commit信息后按Esc健退出编辑模式,然后:wq保存编辑的信息。最后git push到远程仓库。

2、修改最近第N次记录

rebase到需要修改的注释,这边以2为例

$ git rebase -i HEAD~2

两次提交
两次提交

注意这里显示的顺序实是倒序。最新的提交在最下面。

历史记录
历史记录

这里把我们要修改的commit,这里是倒数第二次的commit init那个。对应的pick改成e或者edit。退出保存。

修改
修改

这里会提示你使用git commit –amend去修改,改好之后用git rebase –continue完成。

用git rebase --continue完成
用git rebase –continue完成

我们把init 改成init modify再保存退出,之后用git rebase –continue完成rebase。

这时我们已经改好了倒数第二次提交信息。

已经改好
已经改好

再提交push我们的修改

git log检查或者在码云上检查我们的修改。

git log
git log

git如何修改历史提交commit记录的讲解到这边就结束了。

0

IntelliJ IDEA git 项目检出、更新、提交、解决冲突、取消提交、还原代码

检出项目

前提:在开发环境中安装好IntelliJ IDEA和gitlab,并且在gitlab完成了SSH Key注册。

打开idea,选择VCS→Checkout from Version Control→Git或者点击VCS→Git→Clone

或者

出现填写项目详情窗口

从gitlab官网复制远程地址

可以选Test按钮测试远程服务是否可用,出现success为服务正常,之后选择相应项目类型,检出即可

更新项目

更新项目有两种方式第一种为更新当前窗口下的整个项目

第二种为更新相应文件,文件右键Git→Repository→Pull

出现更新详情窗口

选择Pull

窗口左下方出现本次更新的内容

提交文件

新建TestController测试类

文件右键选择add,表示文件交给git托管

选择文件右键Git→Commit file ,提交文件

左上角会默认比对出本地仓库和远程仓库的区别,勾选文件前的单选框提交相应文件,左侧中部为备注框,选择Commit and push (提交)

选择文件右键Git→Repository→Push 上传文件

解决冲突

当在本地修改的文件,别人也修改了且已提交到了远程服务器,这时需要解决冲突。为了模拟这个场景,对TestController这个方法同时修改服务器代码和本地代码。修改完成后提交文件

填写备注后提交

系统会检查出文件有冲突,提示需要合并,出现冲突窗口

点击文件,即可进入详情页面

详情页面分为三栏,左边为本地版本,中间为修改前版本,右边为服务器最新版本,左右两边代码不可以修改

当前冲突页面1所指按钮可以切换冲突位置,2处按钮可以让冲突部分高亮显示,3处可以选择文件是否整体滑动。

基于两个版本对中间版本修改后点击apply,即生成最终版本的文件,选择提交

这时会提示上传失败,最好将文件重新编译一下,确认无误后重新push即可

上传成功!

取消提交

有的时候我们不想push已经commit,可以在idea中进行如下操作取消

首先我们模拟一个测试提交

项目右键选择GIT->Repository->Resrt HEAD

弹出回退页面

在To Commit中填入回退的版本信息, HEAD^ 代表回退到上次提交前,HEAD~n 数字代表往回退的版本数,回退的代码不会丢失,想要提交的话再次commit即可。

还原代码

假如我们还原开发了一半的代码或者自己做的实验性的功能,有什么快速的办法呢

第一种就是手动还原,把自己新增的文件挨个删除,右键Git—->Compare with Branch ,把修改项目还原即可。优点是风险小,缺点是操作复杂,无法复原代码

第二种是删除本地分支,从远程重新拉一个分支,拉下来的代码是最新版本的。优点是操作简单,缺点是无法复原代码。

第三种是最推荐的,操作简单、风险小、代码可复原。idea git有一个仓库可以存储代码,选择项目右键—–>Git–>Repository—>Stash Changes ,就会创建一个存储备份,以后需要的时候在Unstash Changes找到相应记录还原即可。也可以选择drop删除存储的代码。

0

解决idea git提交失败(Checking for line separator issue git)问题

问题

idea 在git提交时, 会报:Checking for line separator issue git ,然后就一直卡这儿不动了

解决方法

1、选择File->Ohter Settings->Default Settings

2、选择Version Control->Git, 将 “Warn if CRLF line separators are about to be committed”前面的勾去掉

3、点击ok。

4、刚刚设置的是全局的, 可能还需要对当前项目设置下:选择 File->Settings, 其他的和2中的设置完全一样

5、点击ok再次提交就不会校验了

另外, 若是在window下面开发的话, 最好将git的core.autocrlf设为true

0

jenkins配置git

在之前的文章linux里使用rpm方式安装jenkins,已经介绍了如何安装jenkins,如果觉得不喜欢rpm的安装方式,也可以直接在官网下载jenkins的war包,然后运行以下命令即可。

jenkins的war包自带Jetty服务器。

这篇介绍jenkins配合gitlab使用。

继续阅读“jenkins配置git”
0

linux安装git

安装之前需要先安装好git需要的依赖包

#yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

下载并编译git

# 下载
# wget https://www.kernel.org/pub/software/scm/git/git-1.8.3.1.tar.gz
# tar xzf git-1.8.3.1.tar.gz
# 编译和验证
# cd git-1.8.3.1
# make prefix=/usr/local/git all
# make prefix=/usr/local/git install
# echo “export PATH=$PATH:/usr/local/git/bin” >>/etc/bashrc
# source /etc/bashrc
# git –version

0