github相关概念
这里要区分git和github
git操作是属于左半部分,github属于上面部分
git是自己本地仓库和自己远程仓库的操作
github是自己仓库和别人仓库(fork和被fork仓库)之间操作
https://github.com/812865052/learngit.git
是仓库的https地址
[email protected]:812865052/learngit.git
是仓库的ssh地址
Joe和其它贡献者已经对这个项目做了一些修改,而你将在他们的修改的基础上,还要再做一些修改。在你开始之前,你最好"同步你的fork",以确保在最新的复制版本里工作。下面是你要做的:
https git clone是长这样的:
git clone https://github.com/project/repo.git
ssh git clone是长这样的:
git clone [email protected]:project/repo.git
在用ssh之前,你需要
先生成公钥私钥,然后将公钥加入到github的setting中,按照教程配置~/yefei/.ssh/config
也可以参考中文教程
可以直接clone特定分支的代码
git clone 分支名 地址
git安装
sudo apt-get install git
其他系统安装
本地新仓库配置
首先要在某个文件夹(空的或者已经有文件)内执行:
git init
就创建了一个git仓库
然后设置git属性
git config --global user.name "yefeimac" #可以不加--global
git config --global user.email "your email address" #可以不加--global
本地代码是新的,远程仓库也是新建立的
如何建立两者联系
1、首先执行类似与git remote add gitname https://github.com/812865052/newstock.git
2、执行git pull --rebase origin master (解决failed to push some refs to git的办法)
3、git push origin master
Linux如何拉取github上代码
1、新建ssh-keygen -t rsa -b 4096 -C "[email protected]",注意查看生成到文件是否在~/.ssh文件中
2、把pub文件上传到github到ssh里,然后执行eval "$(ssh-agent -s)"
3、ssh-add ~/.ssh/git_tencent_cloud 文件依据你创建到文件名而定
4、ssh-add -l -E md5 查看是否添加成功
这里可以查看最全攻略
这里的就是git remote -v显示的
git remote add gitname https://github.com/812865052/newstock.git
已有github仓库
- 已有github仓库,从远程仓库下载代码
执行前面的本地新仓库配置步骤 - 常规的本地下载、提交和push
从远程仓库下载新的仓库,可以使用
git clone 仓库地址
本地仓库修改后,如何同步:
1、如果本地修改需要上传:
git add 文件名
git commit -m "comment"
或者删除文件
git rm 文件名/文件夹(前提是该文件或者文件夹在git所在目录里面)
然后提交 git commit -m "comment"
git push origin(reposity name) master
2、如果本地需要同步远程仓库:
git pull origin(reposity name) master
3、如果本地需要同步远程仓库:
git pull origin master(好像还可以用fetch,更安全,可以后面研究下)
- 本地仓库改名
如果不想使用origin这个名字,可以用 git remote rename origin newname改名。
提交的时候,就变成了git push newname master
若大批量 增、删、改文件,显然一个个添加或删除是不可取的,以下命令可快捷操作暂存区(建议练习使用,加深对以下几个命令的理解):
git add -A 暂存区与工作区保持一致(stages All)
git add . 暂存区新建文件及更改文件(stages new and modified, without deleted)
git add -u 暂存区删除文件及更改文件(stages modified and deleted, without new)
新建远程仓库流程
-
配置GitHub仓库
在github上新建一个仓库具体见下图
diff查看
diff各个版本区别
工作目录 vs 暂存区
git diff branch
filename
暂存区 vs Git仓库
git diff --cached filename
意义:表示查看已经 add 进暂存区但是尚未 commit 的内容同最新一次 commit 时的内容的差异。
也可以指定仓库版本:git diff --cached commit
filename
工作目录 vs Git仓库
git diff commit
filename
意义:查看工作目录同Git仓库指定 commit 的内容的差异。
commit
=HEAD 时:查看工作目录同最近一次 commit 的内容的差异。
Git仓库 vs Git仓库
git diff commit
commit
意义:Git仓库任意两次 commit 之间的差别。
本地分支版本回退的方法
如果你在本地做了错误提交,那么回退版本的方法很简单
先用下面命令找到要回退的版本的commit id:
git reflog
接着回退版本:
git reset --hard Obfafd
0bfafd就是你要回退的版本的commit id的前面几位
自己的远程分支版本回退的方法
如果你的错误提交已经推送到自己的远程分支了,那么就需要回滚远程分支了。
首先要回退本地分支:
查看提交记录
git log-很详细的提交记录
git reflog-列表式的提交记录,很清晰,一目了然
如果需要恢复到某个提交记录那,可以用 git reset --head+git reflog查到的版本号
查询某个作者的提交记录
git log --author='rich.ye [email protected]'
查看某次提交的修改记录
git show 20817a72da5b74b9ada10a2caccd69c3e4a59ad5
紧接着强制推送到远程分支:
git push -f
注意:本地分支回滚后,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支
如何拉分支修改代码
1、先更新你的本地代码
2、然后git checkout -b 本地分支名x origin/远程分支名x
git clone -b 远程分支名 ssh地址
远程操作
拉取远程分支并创建本地分支
方法一
使用如下命令:
git checkout -b 本地分支名x origin/远程分支名x
或者直接使用git checkout -b 远程分支名 git地址 直接在本地创建同名分支名并同步远程代码
使用该方式会在本地新建分支x,并自动切换到该本地分支x。
采用此种方法建立的本地分支会和远程分支建立映射关系。
方式二
使用如下命令:
git fetch origin 远程分支名x:本地分支名x
使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。
采用此种方法建立的本地分支不会和远程分支建立映射关系。
查看远程仓库
git remote -v
查看本地和远程分支
git branch -a
查看本地分支
git branch
查看所有远程分支
git branch -r
创建分支
git branch test
切换分支
git checkout test
创建并且切换分支
git checkout -b test
git checkout -b 本地分支名x origin/远程分支名x
使用该方式会在本地新建分支x,并自动切换到该本地分支x。
采用此种方法建立的本地分支会和远程分支建立映射关系。
git fetch origin 远程分支名x:本地分支名x
使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。
采用此种方法建立的本地分支不会和远程分支建立映射关系。
删除本地分支
git branch -d xxxxx
查看本地分支与远程分支的映射关系
git branch -vv (注意是两个v)
第一行,本地的jacoco分支,没有和远程分支关联
第二行,本地的master分支,和远程的origin/master分支关联
第三行,本地的v4.7.0分支,和远程的gerrit/jacoco分支关联
其中,远程名字和ahead和behind的意思:
Ahead is the number of commits on this branch that do not exist on the base branch. Behind is the number of commits on the base branch that do not exist on this branch.
当前分支与取消和远程分支关联
git branch --unset-upstream
当前分支与和远程分支关联
git branch -u origin/addFile
或者使用命令:
git branch --set-upstream-to origin/addFile
想保留本地修改,同时把远程代码更新到本地的话,最好的命令是git pull --rebase,只用git pull会多出很多无用的commit信息。
git pull --rebase
如何同步不同名字的分支
The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use
git push gerrit HEAD:jacoco
To push to the branch of the same name on the remote, use
git push gerrit v4.7.0
fork别人项目后,再同步更新别人的提交,然后把自己的代码merge到原项目
git remote -v
git remote add upstream [email protected]:xxx/xxx.git(这里还可以天https的地址) 把原项目加入到upstream
如果填错地址,想删除upstream,用git remote rm upstream
git fetch upstream 从原项目拉取最新代码
git merge upstream/master 将源代码最新代码合到fork分支
或者直接拉推特定分支代码到当前分支
git pull upstream Financial-User
git pull origin Financial-User
git push origin Financial-User
如果上一步出错,提示:
error: Your local changes to the following files would be overwritten by merge:
Please, commit your changes or stash them before you can merge.
有两种解决方法,第一, 先commit本地修改,然后合并在push到远程自己的项目。
第二,先执行git stash,然后在执行git merge upstream/master,最后执行git stash pop,把自己的修改又展示出来。
git push 把代码上传到fork项目
最后就是在网页发起pull request请求
另外一种方法就是github网页操作,具体步骤,参考这篇文章
同步master代码到feature分支
merge法
#1 创建功能分支
(master) git checkout -b feature
#2 功能迭代
(feature) git commit ...
#3 合并最新主干代码
(feature) git checkout master
(master) git pull
(master) git checkout feature
(feature) git merge master
解冲突
(feature) git commit #
4 review,修改代码
(feature) git commit
5 提交测试通过后,合并到主分支,先执行一遍第3步 #
把提交合并成一个
(feature) git checkout master
(master) git merge feature --squash
(master) git commit #
gitlab常见操作
git pull upstream master 本地分支拉取最新master代码
git branch -a
git checkout xxx
git remote -v
git pull upstream Financial-User
忽略文件设置
.gitignore
文件位置就在项目根目录
exclude
git 还提供了另一种 exclude 的方式来完成同样的忽略
不同的是 .gitignore 这个文件本身会push到库中去。保存的是公共的需要排除的文件。
而exclude 是自己本地忽略的设置,不会影响到其他人,也不会提交到库中去。
exclude 文件所在位置
项目根目录/.git/info/exclude