-
1、Window下安装git工具(mac或是linux大家直接yum安装就ok了)
Git-2.17.1.2-64-bit.exe
-
2、安装git日志查看工具
SourceTreeSetup-2.5.5.exe
-
3、建立本地git开发目录
D:\develop\code\0git\master
-
4、打开开发目录
右键点击“Git Bash Here”
-
5、配置git提交的用户名和邮件
配置用户名: git config --global user.name "luckdjhuang"
配置邮件: git config --global user.email "邮箱"
查询用户信息:git config --list
-
6、初始化git目录
初始化:git init
-
7、绑定远程目录
绑定远程目录: git remote add origin git地址
-
8、列出详细信息(查看当前目录git地址)
列出详细信息: git remote –v
-
9、拉取master分支
git pull origin master
-
10、查看分支
查看本地分支: git branch
查看远程分支: git branch –r
查看本地和远程的所有分支: git branch –a
-
11、同时获取多个远程分支
同时获取多个远程分支: git pull –all
-
12、切换分支
切换分支: git checkout bingyanhuo
-
13、查看提交日志
查看提交日志: git log
查看提交日志( 列出文名): git log --name-only
查看历史记录的简洁的版本: git log --oneline\
逆向显示所有日志: git log --reverse --oneline\
查找指定用户的提交日志: git log --author=Linus --oneline -5\
如果你要指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after: git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
-
14、切换到主线
切换到主线:git checkout master
-
15、创建本地分支
切换到luck分支: git checkout luck
-
16、切换到luck分支
切换到luck分支: git checkout luck
-
17、删除分支
删除分支: git branch -D luck
-
18、创建本地分支并提交到远程
以当前分支创建本地分支: git branch luck
推送到远程 : git push origin luck
-
19、绑定远端分支
基于远程分支创建本地分支,并将本地分支切换到当前拉取的分支:
git checkout -t origin/miao-cs
删除远程分支: git push origin :luck
删除本地分支: git branch -D luck
-
20、拉取远端分支
拉取远端分支:
拉取当前已经绑定过的远程代码: git pull
拉取指定分支的远程代码: git pull origin miao-cs
-
21、查看当前分支的状态
查看当前分支的状态:git status
-
22、代码提交
查看当前分支状态: git status
更新本地代码: git pull origin audit-luckdjhuang:audit-luckdjhuang
将需要提交的代码添加到队列里:git add App/Common/Config
Commint:git commit -m 'getQidianFuwuNumber'
Commint(不需要额外add):git commit -a -m 'int Audit server'
提交代码: git push origin audit-luckdjhuang:audit-luckdjhuang
-
23、合并分支(luck)到主干(master)
git checkout master
git pull origin/master
git merge origin/luck
git push origin master
为了合并时尽量不冲突可以
git fetch xxx
git rebase xxx
-
24、查看当前分支是从哪个版本创建的
git branch –a
-
25、主线合并到分支
举例:从master代码merge到luck分支
切换到master: git checkout master
拉取最新master代码: git pull origin master
查看当前状态: git status
将合并数据推进服务器: git push origin luck
-
26、分支luck中部分文件更新为master的版本(文件还原亦同法)
切换到luck分支:git checkout luck
更新指定文件为master最新版:git checkout master file1 files2
git checkout master App/Audit/Component/a.js App/Audit/Component/b.js
-
27、 主线master部分文件合并到分支并提交(从主线master merge单个文件到luck分支)
切换到luck分支:git checkout luck
git checkout -p master App/Audit/Component/a.js
-
28、git版本回退和未push的回退撤销
查看版本信息:git log
git版本回退:git revert 0ab631c2ba
查看日志确认回退操作生效:git log
提交仓库:
git commit -m 'reset'
git push origin luck
-
29、查看所有分支信息
git branch -a
-
30、更新本地所有分支
git fetch --all
git pull --all
// 拉取指定分支的变化 git fetch origin master
// 拉取所有分支的变化 git fetch
// 拉取所有分支的变化,并且将远端不存在的分支同步移除【推荐】 git fetch -p
31、查看所有分支
git branch –all
32、创建本地分支并切换到新创建的分支:
git checkout -b ent-robot
查看分支:git branch
将新创建的分支信息推送到远端:git push origin HEAD –u
-
33、Git 本地创建分支并提交远程分支
1.创建本地分支 git branch 分支名,例如:git branch branch_abc
2.切换本地分支 git checkout 分支名,例如从master切换到分支:git checkout branch_abc
3.提交分支数据到远程服务器 git push origin <local_branch_name>:<remote_branch_name>
例如: git push origin branch_abc: branch_abc 一般当前如果不在该分支时,使用这种方式提交。
如果当前在 branch_abc 分支下,也可以直接提交git push
接着使用如下命令 git branch --set-upstream-to=origin/branch_abc branch_abc
34、解决merge的冲突
merge后输入git status查看并合状态
35、Git cherry-pick(提取单独的commit合并)
git log git cherry-pick a2850a0f13823ba52f9fedbf82c45d3b1b60b745(提交id)
-
36、git操作及fatal: Authentication failed for错误解决
git config --system --unset credential.helper
-
37、将远程分支代码合并到本地再提交到远程分支
将远程分支合并到本地分支: git merge origin/fix-log
将本地分支代码提交到远程分支: git push origin sensitive-luck
-
38、删除远程分支
git push origin --delete sensitive-dev
-
39、将远程git仓库里的指定分支拉取到本地(本地不存在的分支)
当我想从远程仓库里拉取一条本地不存在的分支时:
git checkout -b 本地分支名 origin/远程分支名
git checkout -b sensitive-dev origin/sensitive-dev
-
40、 代码差异比较
git diff
diff里面a表示前面那个变量,b表示第二个变量
HEAD commit版本
Index staged版本
a、查看尚未暂存的文件更新了哪些部分,不加参数直接输入
git diff
此命令比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异
也就是修改之后还没有暂存起来的变化内容。
b、查看已经暂存起来的文件(staged)和上次提交时的快照之间(HEAD)的差异
git diff --cached
git diff --staged
显示的是下一次commit时会提交到HEAD的内容(不带-a情况下)
c、显示工作版本(Working tree)和HEAD的差别
git diff HEAD
d、直接将两个分支上最新的提交做diff
git diff topic master 或 git diff topic..master
e、输出自topic和master分别开发以来,master分支上的changed。
git diff topic...master
Changes that occurred on the master branch since when the topic
branch was started off it
f、查看简单的diff结果,可以加上--stat参数
git diff --stat
g、查看当前目录和另外一个分支的差别
git diff test
显示当前目录和另一个叫'test'分支的差别
git diff HEAD -- ./lib
显示当前目录下的lib目录和上次提交之间的差别(更准确的说是在当前分支下)
h、比较上次提交commit和上上次提交
git diff HEAD^ HEAD
i、比较两个历史版本之间的差异
git diff SHA1 SHA2
====
1.git diff filepath 工作区与暂存区比较
2.git diff HEAD filepath 工作区与HEAD ( 当前工作分支) 比较
3.git diff --staged 或 --cached filepath 暂存区与HEAD比较
4.git diff branchName filepath 当前分支的文件与branchName 分支的文件进行比较
5.git diff commitId filepath 与某一次提交进行比较
-
41、git cherry-pick合并某个commit
git cherry-pick f72a0f0f0d914706882a9fbab31bb48523a177dc
git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作(操作的对象是commit)。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了。
就是对已经存在的commit 进行 再次提交;
使用方法如下:
git cherry-pick
-
42、查看某行代码由谁写的
git blame file_name
git blame -L 10 composer.json
可以拿到commit ID
-
43、git show
git show 87a6cfb77219a75387a45573053145b269d9a268
查询commit id 的查询可以使用git log查询(查询版本的历史)
-
44、回到解决冲突之前的状态
git merge --abort
-
45、合并本地某一分支到当前本地分支
git merge agent-leadsseartch-mx
-
46、合并远端某一分支到当前本地分支
git merge origin/agent-leadsseartch-mx
-
47、cherry-pick 过程中也是可能会产生冲突
解决冲突后先 add,然后使用: git cherry-pick --continue
如果想放弃 cherry-pick,使用: git cherry-pick --abor
-
48、git add和git commit撤销
git add . //添加所有文件
git commit -m "本功能全部完成"
执行完commit后,想撤回commit,怎么办?
git reset --soft HEAD^
这样就成功的撤销了你的commit
注意,仅仅是撤回commit操作,您写的代码仍然保留。
说一下个人理解:
HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
至于这几个参数:
--mixed
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
--soft
不删除工作空间改动代码,撤销commit,不撤销git add .
--hard
删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。
顺便说一下,如果commit注释写错了,只是想改一下注释,只需要:
git commit --amend
此时会进入默认vim编辑器,修改注释完毕后保存就好了。
-
49、将本地分支与远程分支关联,关联后就可以看接用git push来推送 代码到远程
git push --set-upstream origin renewaudit-luck
8. 强制回滚到指定版本,版本号在上一步可以查到
git reset --hard 版本号
50、git pull -r origin branchName // fetch远端代码到本地,并且以rebase的方式合并代码
51、 git reflog,查看操作记录
52、merge和rebase的区别
### 1. 采用merge和rebase后,git log的区别,merge命令不会保留merge的分支的commit,rebase会保留所有的commit:
rebase会把你当前分支的 commit 放到公共分支的最后面,所以叫变基。就好像你从公共分支又重新拉出来这个分支一样。 举例:如果你从 master 拉了个feature分支出来,然后你提交了几个 commit,这个时候刚好有人把他开发的东西合并到 master 了,这个时候 master 就比你拉分支的时候多了几个 commit,如果这个时候你 rebase master 的话,就会把你当前的几个 commit,放到那个人 commit 的后面。
merge 会把公共分支和你当前的commit 合并在一起,形成一个新的 commit 提交
参考: