0.配置ignore-过滤

1
2
3
4
*.log
node_modules/
.idea/
my_notes.txt

1.配置用户

1
2
git config --global user.name "My Name"
git config --global user.email myEmail@example.com

2.创建本地仓库

1
2
//创建一个要同步文件夹,并且进入这个文件夹
git init //初始化git

3.检查状态–是否有更新

1
git status

4.暂存

1
git add . //将文件夹内的所有文件放到暂存区,注意点之前有空格

5.提交

1
2
git commit -m "这里写的是备注,注意:一定要用双引号" 
git commit -am "暂存所有更新文件并提交"

6.链接到远程仓库

1
2
//如果要想传到github上,先在github上创建一个仓库,然后执行下边指令
git remote add origin git@github.com:pengweb/BLOG.git //关联到github上,此时并没有在github上创建呢,只是关联上了

7.删除远程仓库

1
git remote rm origin

8.上传到远程服务器

1
2
3
4
5
6
7
8
9
//两个参数:远程仓库的名字+分支的名字
git push -u origin master //这样就推送上去了,这里的u为了让本地分支也关联到远程服务器上的分支

//上传到两个不同的服务器 origin只是一个远程服务器的名字
git remote add origin git@github.com:tentou/blog.git
git remote add coding git@git.coding.net:tentou/blog.git
//提交commit
git add .
git commit -m 'First commit'

下边这种方式好像不太行,推荐这之后的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
//push上去   这个master是分支的意思
git push -u origin master
git push -u coding master
//pull下来
git pull origin master
git pull coding master

运行几条命令,我们便可以把同一次提交提交到多个远程库,为了方便,我创建了一个push.sh的脚本,内容是:
#!/bin/bash
echo 'Push to origin master'
git push origin master
echo 'Push to osc master'
git push osc master

××可行的方法××-因为本地的分支名不可以重复,所以上边方法不可行

1
2
3
4
5
git branch coding-master    //先创建一个新分支
git checkout coding-master //切换到这个新分支
git pull coding master //pull 一下(我是觉得这一步已经包含了下一步了)
git merge master //把master合并到coding-master
git push -u coding master

9.克隆仓库

1
git clone https://github.com/pengweb/BLOG.git

10.拉取代码

1
git pull origin master

11.查看分支,包括远程,及当前分支

1
git branch -a

12.创建新分支

1
git branch new_branch

13.克隆分支

1
git clone -b <branch> <remote_repo> //没有b就是所有分支

14.切换分支

1
git checkout tentou_new_branch

15.和当前分支比较

1
git diff  分支名

16.合并分支

1
2
3
4
//要先回到主分支
git checkout master
//再合并进去
git merge tentou_new_branch

17.删除分支

1
git branch -d tentou_new_branch

18.重命名分支

1
git branch -m <old_branch_name> <new_branch_name>

19.查看commit记录

1
git log

20.查看某次提交改动

1
git show b10cc123   //后边编码可以通过git log查看

21.查看两次提交不同

1
git diff 09bd8cc..ba25c0ff  //中间用..隔开

22.回滚到之前版本(可单文件)

1
git checkout 09bd8cc1 hello.txt

23.回滚到最新提交-清除之前没有push的commit

1
2
3
git revert HEAD
//回滚到某次提交
git revert b10cc123

24.去除远程子模块

1
2
3
4
//清除缓存区-单独文件
git rem --cached theme/
//清除缓存区-全局
git reset HEAD

25.远程公共自模块submodule

1
2
3
4
5
6
//为当前工程添加submodule
git submodule add 仓库地址 路径
//删除 -- 执行下边命令后还要对.gitmodules文件和git中进行删除
git rm –cached
//下载的工程含有submodule,进行更新
git submodule update --init --recursive

26.为此分支创建跟踪信息

1
git branch --set-upstream-to=origin master

27.SSH

27.1 打开ssh目录

一般都是隐藏的

1
cd ~/.ssh

或者去直接找到这个文件夹在

1
2
3
C:\Users\计算机名\.ssh
//如果没有的话可以在cmd内生成
md .ssh

27.2 生成密钥文件,默认名字为id_rsa和id_rsa.pub

1
ssh-keygen -t rsa -C "YOUR_EMAIL@YOUREMAIL.COM"

说明:换成你自己的邮箱
不要改名字,就用id_rsa和id_rsa.pub,我改过几次,都以失败告终,但是按理说是可以的

27.3 打开公钥文件(id_rsa.pub),并把内容复制至代码托管平台上

settings→SSH keys

28.将静态页发布到github-page

Step 1
把 dist 目录从项目的 .gitignore 文件中移除(yeoman 中默认是忽略 dist 目录的)

Step 2
把 dist 目录添加到 subtree:

1
git add dist && git commit -m "Initial dist subtree commit"

Step 3
用 subtree 将 dist 目录推送到 gh-pages 分支:

1
git subtree push --prefix dist origin gh-pages

点击查看更详细介绍

29.fetch用法

fetch其实就是pull的第一步

1
2
3
4
5
6
7
8
9
10
11
12
13
git fetch  
//干了如下两件事
//创建并更新 所有 远程分支的本地远程分支.
//设定当前分支的FETCH_HEAD为远程服务器的master分支

git fetch origin //手动指定了remote.

git fetch origin branch1 //设定当前分支的 FETCH_HEAD' 为远程服务器的branch1分支`.

git fetch origin branch1:branch2
//干了如下两件事
//首先执行上面的fetch操作
//使用远程branch1分支在本地创建branch2(但不会切换到该分支), 如果本地不存在branch2分支, 则会自动创建一个新的branch2分支, 如果本地存在branch2分支, 并且是`fast forward', 则自动合并两个分支, 否则, 会阻止以上操作.

git pull 分解:

1
2
经命令中的pull换成fetch, 执行之...
git merge FETCH_HEAD

30.远程分支和本地分支重新关联

1
git branch --set-upstream-to origin/master master

31.切换远程分支到本地

1
2
3
4
5
//现在源码基础上创建分支
git checkout -b 2.0.0

//直接创建分支
git checkout -t origin/2.0.0

32. reset回滚本地代码三种选择

1
2
reset
git reset [--soft | --mixed | --hard

注意因为回滚后版本落后线上版本,所以push会失败,所以一定一定一定需要强行push

1
git push -f

–mixed

会保留源码,只是将git commit和index 信息回退到了某个版本.(回滚记录)

–soft

保留源码,只回退到commit 信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.

–hard

源码也会回退到某个版本,commit和index 都回回退到某个版本.(注意,这种方式是改变本地代码仓库源码)

当然有人在push代码以后,也使用 reset –hard <commit…> 回退代码到某个版本之前,但是这样会有一个问题,你线上的代码没有变,线上commit,index都没有变,当你把本地代码修改完提交的时候你会发现权是冲突…..

33. revert 同时回滚仓库

git revert用于反转提交,执行evert命令时要求工作树必须是干净的.
git revert用一个新提交来消除一个历史提交所做的任何修改.
revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新.(这里不会像reset造成冲突的问题)

持续集成gitlab+jenkins

可以通过gitlab-ci来实现集成,这样就不需要jenkins了


gitlab 默认

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Git global setup
git config --global user.name "zhangpeng"
git config --global user.email "zhangpeng@zhuanzhuan.com"

Create a new repository
git clone git@gitlab.zhuanspirit.com:zz-fe-platform/quanzi-detail.git
cd quanzi-detail
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

Existing folder
cd existing_folder
git init
git remote add origin git@gitlab.zhuanspirit.com:zz-fe-platform/quanzi-detail.git
git add .
git commit -m "Initial commit"
git push -u origin master

Existing Git repository
cd existing_repo
git remote rename origin old-origin
git remote add origin git@gitlab.zhuanspirit.com:zz-fe-platform/quanzi-detail.git
git pull origin master // 把本地仓库的变化连接到远程仓库主分支
git push -u origin --all
git push -u origin --tags

如果远程有文件了
1、git pull origin master –allow-unrelated-histories //把远程仓库和本地同步,消除差异
2、重新add和commit相应文件
3、git push origin master //推送到远程
4、完活!
如果只是因为本地没有ReadMe文件,那么就在本地生成一个(远程仓库有某个文件,而本地没有,-把远程仓库的文件拉去到本地)

git pull –rebase origin master  //本地生成ReadMe文件
git push origin master

合并没有关系的两个分支

1
2
git merge master --allow-unrelated-histories
git pull origin master --allow-unrelated-histories

移出缓存区

1
git reset HEAD <file>

移出跟踪文件

1
2
git rm --cached "文件路径"  // 不删除物理文件,仅将该文件从缓存中删除;
git rm --f "文件路径" // 不仅将该文件从缓存中删除,还会将物理文件删除(不会回收到垃圾桶

Fork且保持同步原仓库

github上fork了别人的项目后,再同步更新别人的提交
GitLab Fork项目工作流程
GitLab同步到本地分支,在原仓库上,点击merge request就可以申请了

Git Submodule管理子模块

使用Git Submodule管理子模块
如何在WebStorm中使用Git Submodule
1、项目添加submodules目录

1
git submodule add http://gitlab.zhuanspirit.com/zz-fe-g/submodules.git src/submodules

此时可以看到两个文件.gitmodulessubmodules

修改完之后正常commitpush

2、如何更新子模块

1
2
cd src/submodules
git pull

或者

1
git submodule update --remote submodules(默认是拉取master,也可以设置分支名 git config -f .gitmodules submodule.submodules.branch 【分支名】)

或者更新所有

1
2
git submodule foreach git checkout master
git submodule foreach git pull

3、修改子模块

1
cd submodules

然后可以切换分支,提交,以及push等,任何操作。但合并master必须要找管理员。

4、注意事项

git clone的时候包含submodules

git clone –recurse-submodules

合并Fork的分支(zz-ui合并到g-ui)

1
2
3
4
5
6
git fetch git@gitlab.zhuanspirit.com:zz-fe-common/zz-ui.git master
git checkout -b zz-fe-common/zz-ui-master FETCH_HEAD
git checkout master
git merge --no-ff zz-fe-common/zz-ui-master
git pull --rebase origin master (最好使用idea的pull,否则很多冲突)
git push origin master

克隆包含子模块的项目

需要增加--recursive参数

1
git clone --recursive git@gitlab.zhuanspirit.com:zz-fe-g/GAppActivity.git

如果下载的文件夹为空可以使用下边命令来更新

1
2
git submodule init
git submodule update

如何在大型项目中使用Git子模块开发

每次输入密码

1
git config --global credential.helper store

会自动生成文件
地址:~/.gitconfig
实际地址: /etc/gitconfig
如何处理git每次提交都输入密码

修改子模块链接方式

直接修改.git下的config就可以了
git-修改远程的URL

回滚revert和reset区别

回滚revert和reset区别

修改地址

Git remote set url

merge的几种方法

git merge的三种操作merge, squash merge, 和rebase merge
git merge squash 和 rebase 区别

多源合并-github merge gitlab

gitlab和github下fork后如何同步源的新更新

← Prev Next →