打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Git实战

学习Git有一段时间了,一路上也一直在写有关于Git方面的文章,但总觉得不是我想要的,就是感觉有点肉肉的,不够直接,不够马上出效果,所以才有了这篇文章,当然这文章可能会不断更新和修正,希望读者可以作为一个工具文章使用,我也会努力将其优化的更加的符合工作场景

说明

1、在[...]中的内容,需要根据实际情况进行修改

如何本地与远程建立信任联系?

要解决这个问题,需要使用SSH秘钥的方式,接下来我就讲一下怎么进行配置。

1.在本地生成私钥和公钥

git config --global user.name "username"//用户昵称git config --global user.email "emailAddress"//github或者gitlib的邮箱地址ssh-keygen -t rsa -C "emailAddress"//github或者gitlib邮箱账户地址

2.将电脑上的公钥与远程仓库进行绑定

本地会在上面的步骤中会生成一个id_rsa.pub(默认情况是这个名称),将该文件中的内容copy到远程仓库github或gitlib的settings的SSH配置选项中。

Tittle名称自由发挥

克隆工程

将远程的数据复制一份到本地

#【仓库copy地址】git clone [git@rep.xx.com:zoeminghong/hello.git]

本地新建Git工程

现在打算将本地的工程,放到Git仓库进行托管了,并且远程Git仓库已经创建了该项目的工程

#本地初始化工程,会生成一个.git文件git init  #将本地的工程与远程仓库中的项目进行关联(不用关心项目名不一致的问题)#此时本地工程与远程仓库已经建立了联系git remote add origin [git@rep.xx.com:zoeminghong/hello.git]  #将本地所有文件添加到Git中,进行监管git add .  #将内容提交 【提交注释】git commit -m "[...]"  #将本地的内容同步到远程仓库中git push -u origin master

显示某一个特定的提交的日志

git show [十六进制码]

查看提交图

git log --graph --pretty=oneline --abbrev-commit

查看冲突未处理的文件列表

git ls-files -u

本地代码与远程代码冲突问题

本地代码未commit的前提下,解决与远程代码冲突问题

git pull #失败#将当前修改进行暂存起来git stash#或git stash save "[注释]" #获取最新的远程仓库代码git pull #恢复暂存的内容git stash pop#stash其他操作#恢复最近一次save的原工作区内容,,并删除stash记录git stash pop#恢复最近一次save的原工作区内容,但不删除stash记录git stash apply#删除stash记录git stash drop#获取暂存列表git stash list

但,上面的也可能存在问题,由于本地存在未被追踪的文件,并且远程仓库pull的时候也存在同名的文件,就会存在pull失败,在这种情况下,在git stash后面追加 --include-untracked,会将远程的文件与本地的文件融合

stash只会保存当前索引和工作目录的状态,其保存的是add和commit的中间状态,如果还没有被git追踪的文件,是不会被记录的

如果我对某文件进行了修改,但我不想要push到远程仓库,同时我又想获取最新的修改记录

git stash savegit pull --rebase

如果暂存内容现在不想在当前分支恢复了,而是想单独起一个分支

git stash branch [newBranchName]

想要查看当前工作区与暂存状态内容区别

git stash show -p stash{0}

本地代码已经commit后,解决与远程代码冲突问题

# 获取远端库最新信息 【分支名称】git fetch origin [master] # 做比较git diff [本地分支名] origin/[远程分支名] # 拉取最新代码,同时会让你merge冲突git pull

方法2

# 获取最新代码到tmp分支上 [远程的分支:本地分支]git fetch origin [master:tmp]  # 当前分支与tmp进行比较git diff tmp  # 修改冲突部分,进行本地commit操作git add .  git commit -m "[...]"  # 将tmp中内容合并到当前分支中git merge tmp  # 删除分支git branch -d tmp

删除文件

保留副本操作

git rm --cache [文件名]

直接文件删除

git rm [文件名]

后悔药

还原到最近的版本,废弃本地做的修改(当前文件修改没有进行add操作的时候)

git checkout -- [文件名]

取消已经暂存的文件(撤销先前"git add"的操作)

#当前HEAD,返回到上一次commit点,不会有任何日志记录git reset HEAD --hard
git reset HEAD [文件名]

回退所有内容到上一个提交点

#最近内容已经commit的情况下git reset HEAD^ --hard

回退这个文件的版本到上一个版本

#最近内容已经commit的情况下git reset HEAD^ [文件名]

将本地的状态回退到和远程的一样

git reset –-hard origin/[分支名]

回退到某个版本

# 获取所有的HEAD更改信息的sha1值git refloggit reset [SHA1]

回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit.(代码回滚到上个版本,并提交git)

git revert HEAD

使用reset是不会有日志记录的,revert则会要提交一个记录点

修改最新的提交信息(修改提交的注释信息)

git commit --amend

本地分支与远程分支相连

本地创建了一个分支,远程也有一个分支,进行两者关联

git checkout -b [本地分支名] origin/[远程分支名]

Tag使用

我们在开发的时候,可能存在线上发布了一个版本,需要给这个版本代码打上一个标签,到时候可以方便回退到这个版本

# 创建tag 【tag名】git tag v1.0  # 查看存在的taggit tag  # 将tag更新到远程git push origin --tags

接下来就讲解回退到具体的tag

# 保存当前编程环境git stash  # 切换回某个tag(v1.0)git show v1.0  #【sha1】git reset --hard [2da7ef1]  # 创建分支来保存tag的数据,tag只是一个节点的标记,无法承载数据的修改记录,【分支名】git checkout -b [bill]  # 接着你就可以在这里改啊改了

切换回主干或其他分支

# 切换分支git checkout master  # 日志记录git reflog  # 显示stash列表git stash list  # 恢复之前的工作环境代码git stash apply  # 删除stashgit stash drop

分支与主干合并

git add .  git commit -m "v1.1"  # bill分支合并到当前分支【分支名】git merge [bill]

关于代码的比较

# 显示暂存区和工作区的差异git diffgit diff [filename] # 显示暂存区和上一个commit的差异【文件名】git diff --cached [hello.txt]git diff --cached [HEAD或者SHA1] [filename] # 显示工作区与当前分支最新commit之间的差异git diff HEADgit diff [HEAD或分支名] [filename] # 显示两次提交之间的差异【分支名】git diff [first-branch]...[second-branch]git diff [SHA1] [SHA1] [filename]#分支之间的差异#分支之间的差异git diff [分支1] [分支2]git diff [分支1]..[分支2]#指定文件git diff [分支1]:[file1] [分支2]:[file2]#查看指定提交范围内的所有变更文件情况git diff --stat master~[范围值] [分支名]git diff --stat master~5 tmp//还可以值查看具体某一个文件git diff --stat master~5 tmp test.txt

定位哪个提交点导致文件出现问题

#先确定范围git bisect bad  #一般都是当前HEAD是坏提交【sha1】git bisect good a794f9bd96f06b57b4c10433e4d6abb3f0855749 #上面的步骤就是确定范围的,接下来就是回答git的问题,他指定的提交点是好的还是坏的git bisect good//如果是坏的,就bad,直到你找到哪个提交点导致出现问题#查看维护日志git bisect log#完成操作后,要回切到工作分支上git branchgit bisect resetgit branch

检查文件中每一行代码是谁提交的记录

git blame -L [起始行数],[文件名]

创建分支

#以当前节点作为分支的开始起点git branch [分支名]#以SHA1作为分支开始起点git branch [分支名] [SHA1]#创建并切换分支,sha1以哪个节点作为分支的起点git checkout -b [分支名] [SHA1]

重命名分支

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

//显示现在分支git branch -av//删除远程要删除的分支develgit push --delete origin devel//重命名本地分支devel为developgit branch -m devel develop//推送到远程git push origin develop

这是由于在 github 中,devel 是项目的默认分支。要解决此问题,这样操作:

  1. 进入 github 中该项目的 Settings 页面;

  2. 设置 Default Branch 为其他的分支(例如 master);

  3. 重新执行删除远程分支命令。

查看远程仓库分支

git branch -a

获取远程仓库分支代码

git fetch origin [远程仓库分支名] [本地仓库分支名]

删除本地分支

git branch -d [分支名]

查看分支

git show-branch#或git branch

分支前面都存在*或者!

*表示当前分支

在–之后的是记录分支的提交信息

*+ [tmp] 远程2就表示该提交存在于两个分支中

显示某分支中某文件内容

git show [分支名]:[文件名]

显示某个节点某文件的内容

git show [SHA1] [文件名]

关于切换分支的逻辑

如果存在未被git追踪的文件,git是会将其忽略的

如果存在已追踪且被修改或删除,必须commit之后,才能切换

如果要不计后果的情况,强切,加-f

将当前的分支修改的内容同步到其他的分支上

假如你希望变更作用于另一个分支上,但由于当前分支如果不提交,是无法切换到另一个分支上的

git checkout -m [另一个分支名]

将一个区间的提交,移植到另一个分支

#当前分支,得到dev分支中dev~2之前的所有提交内容git cherry-pick dev~2

cherry-pick会生成一条新的提交记录


系列文章:

git rebse的变基提交
Git如何帮你查原因
从使用场景学Git

更多内容可以关注微信公众号,或者访问AppZone网站

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Git常用命令
程序员必备基础:Git 命令全方位学习
git命令大全
Git 常用命令总结
Git 使用的简单汇总
25个Git用法技巧
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服