Git的使用方法集锦

179 阅读10分钟

215828tpmddz2d2bfcz5pk.jpg

  • 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”

image.png

  • 5、配置git提交的用户名和邮件

配置用户名: git config --global user.name "luckdjhuang"
配置邮件: git config --global user.email "邮箱"
查询用户信息:git config --list

image.png

  • 6、初始化git目录

初始化:git init

image.png

  • 7、绑定远程目录

绑定远程目录: git remote add origin git地址

image.png

  • 8、列出详细信息(查看当前目录git地址)

列出详细信息: git remote –v

image.png

  • 9、拉取master分支

git pull origin master

image.png

image.png

  • 10、查看分支

查看本地分支: git branch

查看远程分支: git branch –r

查看本地和远程的所有分支: git branch –a

  • 11、同时获取多个远程分支

同时获取多个远程分支: git pull –all

  • 12、切换分支

切换分支: git checkout bingyanhuo

  • 13、查看提交日志

查看提交日志: git log

image.png 查看提交日志( 列出文名): git log --name-only
image.png 查看历史记录的简洁的版本: 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

image.png

  • 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

image.png

  • 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

image.png

  • 28、git版本回退和未push的回退撤销

查看版本信息:git log

image.png git版本回退:git revert 0ab631c2ba

查看日志确认回退操作生效:git log

image.png

提交仓库:
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查看并合状态

image.png

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

image.png

  • 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,查看操作记录

image.png

52、merge和rebase的区别

### 1. 采用merge和rebase后,git log的区别,merge命令不会保留merge的分支的commit,rebase会保留所有的commit

image.png rebase会把你当前分支的 commit 放到公共分支的最后面,所以叫变基。就好像你从公共分支又重新拉出来这个分支一样。 举例:如果你从 master 拉了个feature分支出来,然后你提交了几个 commit,这个时候刚好有人把他开发的东西合并到 master 了,这个时候 master 就比你拉分支的时候多了几个 commit,如果这个时候你 rebase master 的话,就会把你当前的几个 commit,放到那个人 commit 的后面。

image.png

merge 会把公共分支和你当前的commit 合并在一起,形成一个新的 commit 提交

image.png

参考:

  1. git IDEA的分支合并时的冲突问题总结,merge和rebase的区别_YHJ的博客-CSDN博客_merge和rebase的区别
  2. merge和rebase的区别 - 削微寒 - 博客园