工具使用--git基本操作

git基本操作


1、Git基本设置

  • git config --global user.name “ken” // 设置用户名

  • git config --global user.email “ken@gmail.com” // 设置邮箱

  • git config --global --list // 显示用户名邮箱

  • git add helloworld.c // 添加单个文件

  • git add . // 添加所有

  • git commit -a // 提交

  • git commit -am “first commit” // 提交并填写commit的内容

  • i // 输入commit的内容

  • git fetch:相当于是从远程获取最新版本到本地,不会自动merge
    git fetch <远程主机名> <分支名> ------> git fetch origin master

  • git push origin master // 同步至服务器,相当于git fetch 和 git merge

  • git push origin master --no-verify // 跳过iLint扫描,强推

  • git pull origin master // 同步服务器代码到本地

  • git clone git@bigkoogit:testing // url:project 获取代码

  • git diff file // 查看不同内容

  • git log // 查看提交日志

  • git status // 查看状态

  • 先按 Esc ,再 shirt + : // 允许输入wq,准备退出

  • wq // 保存退出

  • git reflog // 找回消失的commit。可以查看所有分支的所有操作记录(包括commit、reset的操作和删除的commit记录,git log则不能察看已经删除了的commit记录)
    (1) 打印如下:

$ git reflog 
d185b35 HEAD@{0}: rebase finished: returning to refs/heads/passport
d185b35 HEAD@{1}: rebase: checkout origin/passport
4ab8e52 HEAD@{2}: checkout: moving from passport_email to passport
d185b35 HEAD@{3}: checkout: moving from passport to passport_email
4ab8e52 HEAD@{4}: checkout: moving from passprot_bak to passport
d185b35 HEAD@{5}: checkout: moving from passport to passprot_bak
4ab8e52 HEAD@{6}: checkout: moving from passprot_bak to passport
d185b35 HEAD@{7}: commit: 添加邮件发送处理操作

(2)将删除的记录恢复,然后可以使用这个‘消失的’commit重新建立一个branch

git reset --hard d185b35
  • git log // 格式化输出
git config --global alias.gl "log --graph --pretty=format:'%Cred%h%Creset %Cgreen(%ad)%Creset :%C(yellow)%d%Creset %s [%cn,%an]' --abbrev-commit --date=short"
 git gl
  • 版本回滚到某一版本(或取消merge)
    git reset --hard 版本号 // 不填版本号即放弃所有修改到当前版本
    git reset --hard fb95cc86

  • 版本回滚到某一版本,并且保留所有修改的文件
    git reset fb95cc86

  • 版本回滚到上一版本
    git reset --hard HEAD~1

  • 要把dev-3.0分支上的某些更改移到2.x的版本
    git cherry-pick fb95cc86

  • 从一个分支cherry-pick多个commit到其他分支
    // 两个点表示把两个 commit 区间的所有 commit 都复制过去
    git cherry-pick 1aa6cf2d…c8f5e18f
    // 注意,不包含第一个 commitid 的写法
    git cherry-pick (commitid1…commitid100]

  • 版本回滚后,删除远程仓库的某次错误提交
    git push -f origin master

  • 提交到远程仓库
    git push [仓库名 本地分支:远程分支]
    git push origin ver3-dev:ver3-dev

  • 打tag
    git tag -a 3.0 -m “my version 3.0” [commit 号]
    把tag提交到远程服务器
    git push --tags

  • 开始创建标签,创建标签的两种方式:
    git tag -a 4.1.0 -m “20170328” //创建标签, -a 加标签,-m 加标签注释。
    git tag 4.1.0 //创建轻量级标签,不用-a,-m等参数

  • 查看创建的标签
    git tag //列出git中现有的所有标签
    git show lilerong //git show 命令查看相应标签的版本信息,并连同显示打标签时的提交对象

  • 加上-f 覆盖原有的tag:git tag -f 4.1.0a

  • 推送指定的标签:git push origin 4.1.0

  • 要一次推送所有本地新增的标签上去,可以使用 --tags 选项:git push origin --tags,

  • 删除标签: git tag -d 4.1.0
    删除服务器标签:git push origin :refs/tags/4.1.0

  • 创建分支
    git branch local
    切换分支
    git checkout local
    创建并切换分支
    git checkout -b local

  • 切换分支时,即使索引或工作树与HEAD不同,也要继续,这用于丢弃本地更改;
    检查索引中的路径时,不要在未合并的条目上失败; 相反,未合并的条目将被忽略。
    git checkout -f master

  • 删除本地分支
    git branch -d local

  • 删除远程分支和tag
    git push origin --delete local
    git push origin :branchname // 推送一个空分支到远程分支

  • 删除tag这么用
    git push origin --delete tag local
    git push origin :refs/tags/tagname

  • fetch之后需要和别人提交的代码合并,git rebase [仓库/分支],如:
    git rebase origin/develop
    如果有冲突,在解决冲突之后:
    git rebase --continue

  • 草稿箱
    对于本地修改后不提交,想切换分支最好stash一下,切回来再stash pop,这样可以接着修改东西继续搞,步骤:
    git stash // 存草稿
    git checkout 分支 // 切换分支
    git stash pop // 切回到stash时的分支,使用git stash pop

    git stash apply
    git stash list // 查看草稿箱
    git stash show [stash序号] // 显示某次草稿的具体文件

  • 重命名远程分支
    在git中重命名远程分支,其实就是先删除远程分支,然后重命名本地分支,再重新提交一个远程分支。

  • 查看远程仓库信息
    git remote show origin

  • 切换远程仓库地址
    (1)修改命令
    git remote set-url origin url
    (2)先删后加
    git remote rm origin
    git remote add origin git@github.com:sheng/demo.git

  • 修改写错的commit message
    (1)没有push到服务器,只是本地进行了commit
    git commit --amend
    (2)如果进行了新的commit
    git reset --soft fb95cc86
    git commit --amend

  • 项目被转移到另一个地址,要更新本地仓库的远程地址请运行 (ssh)
    git remote set-url origin git@gitlab.xxx.cn:android/demo.git
    或 http(s):
    git remote set-url origin https://gitlab.xxx.cn/android/demo.git

  • 计算代码行数
    git log --pretty=tformat: --since=2020-4-2 --until=2020-5-7 --numstat | gawk ‘{ add += $1 ; subs += $2 ; loc += $1 + $2 } END { printf “added lines: %s removed lines : %s total lines: %s\n”,add,subs,loc }’

2、操作步骤

  • cd 文件名 // 进入仓库目录下
  • git add . // 添加所有
  • git commit -am // 提交
  • git pull origin master // 同步服务器代码到本地
  • i —> 写入提交日志 // 进入编辑模式
  • ESC —>shirt + : —>wq // 退出编辑
  • git push origin master // 同步至服务器

3、需要关注的操作

3.1 git merge 后如何撤销
 // merge 后发现冲突太多,或者合并的分支代码并不是最新,那就直接撤销再合并好了
git reset --hard HEAD 
3.2 git 配置 .gitignore 删除已提交的文件

(1)方式一

  1. 配置.gitignore,把不想提交的内容写进去
  2. 本地删除对应的内容,git push
  3. 本地再恢复此内容

(2)方式二

  1. 配置.gitignore,把不想提交的内容写进去
  2. 清空缓存后提交
git rm --cached -r .
git add .
git commit -am '注释'
  1. 确认无误后提交
git push
  1. 参考链接
    git 配置.gitignore 删除已提交的文件

4、从git仓库提交代码到另一个git仓库

1, 首先添加仓库分支:git remote add

git remote add origin_repo_b git@server_ip:/path/repo_b.git

(origin_repo_b:自己起的名字,只要不与现有的 remote 名重复即可)
(git@server_ip:/path/repo_b.git:repo_b 的远程路径)

2, 将代码推送到repo_b.

git push origin_repo_b branch_a

origin_repo_b:远程 仓库 repo_b 的名字
branch_a:仓库 repo_a 的 branch_a 分支

3, 克隆仓库 repo_b,检查是否 push 成功

git clone git@server_ip:/path/repo_b.git

4, 参考
从git仓库提交代码到另一个git仓库

5、git merge 与 git rebase 的区别

(1)区别

  • merge
    在这里插入图片描述
    在master分支上git merge deve,Git 会自动根据两个分支的共同祖先即e381a81这个commit和两个分支的最新提交即8ab7cff和696398a进行一个三方合并,然后将合并中修改的内容生成一个新的commit,即下图的78941cb
    在这里插入图片描述
  • rebase
    在这里插入图片描述
    master分支上git rebase deve,Git会从两个分支的共同祖先master step1开始提取master分支(当前所在分支)上的修改,即master step2、master step3与master step4,再将master分支指向deve的最新提交(目标分支)即deve step2处,然后将master提取的修改依次应用到这个最新提交后面不会像merge一样生成一个合并修改内容的commit,相当于把master分支(当前所在分支)上的修改在deve分支(目标分支)上原样复制了一遍,操作完成后的版本历史就像这样:
    在这里插入图片描述
    可以看见 master 分支从 deve 分支最新提交deve step2开始依次提交了自己的三个 commit(由于是提取修改后重新依次提交,故 commit 的 hash 码与上面的85841be、a016f64、e53ec51 不同)。

(2)冲突处理策略的不同

  • merge遇见冲突后会直接停止,等待手动解决冲突并重新提交commit后,才能再次merge
  • rebase遇见冲突后会暂停当前操作,开发者可以选择手动解决冲突,然后git rebase --continue 继续,或者–skip跳过(注意此操作中当前分支的修改会直接覆盖目标分支的冲突部分),亦或 --abort直接停止该次rebase操作。

(3)学习链接
闲谈 git merge 与 git rebase 的区别

6、git commit 模板设置

(1)首先在任意路径下新建一个txt文件,文件内容如下:
在这里插入图片描述

[需求/BUG/其他]:
[描述]:
[备注]:

(2)进行设置模板

// 设置全局的模板,不管分支还是master都会有模板提示
git config --global commit.template  C:\Users\Administrator\commit_template.txt

(3)设置编辑器

git config --global core.editor vim //  core.editor后面跟的是要设置的编辑器 ,我这里设置的为vim

(4)如何查看是否设置成功呢?
在这里插入图片描述
在这里插入图片描述
(5)git commit 然后回车就会弹出我们设置的模板
在这里插入图片描述
(6)注意:上一次配置错了,一直提示错误,需要找到项目下的config文件,删了commit
在这里插入图片描述
在这里插入图片描述
(7)参考链接
Android开发之Git提交Template模板配置
git commit 模板设置

7、注意事项

  • 经常提交,而且合并代码;
  • 本地ver3-dev和远程的ver3-dev保持一致,不要rebase本地的local的代码到ver3-dev;
  • 使用本地的ver3-dev rebase 远程的ver3-dev, 再在local rebase 本地的ver3-dev。

7、git日常操作

Git官方文档

Git日常

一篇文章,教你学会Git

Git checkout -b 的详细讲解

介绍Android Studio使用Git最详细的文章

Git-checkout

8、设置

8.1 Git Bash设置

如何修改Git Bash默认打开之后的路径

8.2 conemu设置

告别CMD.windows终端神器conemu设置

9、SVN

TortoiseSVN新人使用指南

Android Studio中svn的使用(全部在这里)

怎么安装使用TortoiseSVN中文版

SVN建立分支和合并代码

10、问题分析

10.1 Git合并的时候,冲突问题:Merging is not possible because you have unmerged files

(1)问题描述

用git diff或者git status 查看哪些文件冲突,有冲突的会提示:
++<<<<<<< HEAD

++<<<<<<< new_branch

(2)解决方法

①修改你的冲突的文件,修改完之后,保存。
②用git add xxx,把你修改的文件全部都添加进去。
③最后,用git commit -a -m "备注信息" 提交,完成。

(3)学习链接
Git合并的时候,冲突问题Merging is not possible because you have unmerged files

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值