一、git的基础安装配置
1. 安装:sudo apt-get install git
2. 配置:
git config --global user.email "email@example.com" //email@example.com最后是自己的github账号绑定的email
git config --global user. name "account" //account为github账户名称 |
3.如果要用SSH协议访问github,需要配置SSH-Key. 1)生成SSH Key
ssh-keygen -t rsa -b 4096 -C "email@example.com" //email@example.com github账户所用邮箱 |
2)接下来按提示输入
...
成功了的话,会在~/.ssh生成明文和密文等文件,如:id_rsa、id_rsa.pub等
3) SSH Key 加入到ssh agent中:
eval "$(ssh-agent -s)" |
ssh-add ~/.ssh/id_rsa |
4)配置github账户中的SSH Key:
把id_rsa.pub中的内容复制到到gihub的SSH Key设置处创建的SSH Key 中。
二、完成fork分支与主分支的同步
背景:自己已经拥有了一个github账号,然后通过fork从主分支拉出了一个自己项目分支。由于主分支上也会在不断的有更新,因此我们自己的分支及时与主分支保持同步,同时我自己的修改 也需要提交到主分支中。以我们使用Apollo 开源项目为基础进行自己的工作为例子:
apollo主分支:https://github.com/ApolloAuto/apollo.git 或 git@github.com:ApolloAuto/apollo.git
fork出来的自己分支:https://github.com/mfyanga/apollo.git或git@github.com:mfyanga/apollo.git
1.在我的工作目录clone一份我的分支
git clone https://github.com/mfyanga/apollo.git |
2.与主分支保持同步
1)在工作目录配置一个upstream绑定apollo主分支
git remote add upstream git@github.com:ApolloAuto/apollo.git |
2) 获取apollo主分支的修改到本地
git fetch upstream |
3)把upstram分支修改merge到本地个人分支
git merge upstream/master //可以分解成两部:a)切到本地master分支git checkout master b)合并upstream的更改git merge upstream |
4) 把merge的结果push到自己分支
git push |
三、本地有些项目需要放到github上进行管理
1.在本地项目目录先创建本地仓库 ,进入项目目录执行下面命令:
git init 2. |
2.在github上new respority 比如:git@github.com:mfyanga/Demo.git。如果创建的时候,勾选的创建一个readme选项,那么在首次push本地仓库到github之前要执行一下:
git pull --rebase origin master //把readme更新下来,否则后面提交会出错被拒绝 |
3.本地仓库绑定远程的github
git remote add origin git@github.com:mfyanga/Demo.git |
4.提交本地所有文
git add
git commit -m "init my repository to github " |
5.push 到github
git push -u origin master //首次要加-u,后面就不需要了 |
四、拉github上的一个分支
背景:你本地并没有dev这个分支(你可以用git branch -a 命令来查看本地是否具有dev分支)
#1)把远程分支拉到本地 $ git fetch origin dev #2)创建工作空间分支dev(该名字可以与远程不一样)并与远程dev分支关联 $ git checkout -b dev origin/dev //如果远程没有dev分之,就不要 1)和本处的origin/dev #3)把远程分支上的内容都拉取到本地 $ git pull origin dev //这里的dev指的是本地分之名 #4)本地修改提交到远程分支 $ git push -f -u origin dev
如果需要随时合并其他分支到当前开发的分之(比如原来被我们fork的主分支 RemoteMain) #5)设置一个远程上游分)支 $ git remote add upstream git@github.com:RemoteMain/RemoteMain.git #6)合并RemoteMain的更改到自己的dev(首先要保证自己的dev修改要暂存) 进入自己分之后 $ git pull --rebase upstream master #7)如果有冲突更改冲突再 $ git rebase --continue #8)更改完了,push $ git push -f -u origin dev |
五、git log的处理
1.删除日志(比如已经push到了github Server上的)
# 1).通过找到想要退回到的commit_id $ git log # 2)本地回到上一个commit_id $ git reset --hard <commit_id> # 3)推送到服务器,一定要加 --force 参数 $ git push origin HEAD:master --force //注意:master 为实际你要推送的分之名称 |
六、删除github上的分支
$ git push origin --delete multi_navigation //multi_navigation,远程的分支名 或者 $ git push origin :local_multi_navigation //local_multi_navigation 远程的分支名,推送一个空分支到远程分支相当于删除分支 |
git diff branch --module
七、合代码技巧
1.从不同的仓库或分支合入代码
1) 新增源的仓库 git remote add github_david git@github.com:davidhopper2003/apollo.git 2)获取新增源仓库需要合入本地代码的分支 git fetch github_david david_dev 3)合入特定的commit //新增源仓库的某一次提交的commit git cherry-pick ff1b359f3a9dbef96a4060985d3d569fb868fc81 |
八、git reset --hard 误操作找回回退的部分
1)从回退的历史记录 中找到你要恢复的commit id git fsck --lost-found 2)执行回退 git reset --hard 9f1039cfcda5d637cb4ed51c55778324e8af0724 Test:rollback. |