Git 常见使用场景对应的命令

有些场景是很常见的,但网上未必有相关答案。本文是针对新手的。不管网上有的没的,我都会写在这里。写这个不是说我厉害,相反我是一个摸索得很辛苦的新手。希望别的新手不会像我一样辛苦,所以才写这个。欢迎高手指正和补充。

首次提交

要先在服务端创建仓库(此仓库称为远程仓库)。建好后。一般会显示要你在本地文件夹里执行的那些命令。

git init # 创建本地仓库
git add . # 所有文件(有改动的)添加到待提交
git commit -m "first commit" # 提交到本地仓库
git remote add origin http://a.b.com/my/Test01.git # 设置远程仓库地址
git push -u origin master # 推送到远程仓库。首次才需要-u参数。以后直接git push就可以了

首次拉取

首次拉取(指没有本地仓库的情况下)其实不叫拉取,叫克隆哈。

git clone http://a.b.com/my/Test01.git # 克隆远程项目

提交更改

git add . # 所有文件(有改动的)添加到待提交
git add a.txt # 指定文件添加到待提交
git commit -m "第二次提交" # 提交到本地仓库
git push # 推送到远程仓库。
git push origin master --force # 强行推送到远程仓库。以你的代码为准。忽略别人的修改。

拉取最新代码

git pull # 拉取远程代码到本地仓库

为了减少冲突。建议改别人的文件之前,先pull一下。

有时会push不上去,提示要pull,pull后有时会自动进入vi编辑器。这时可以按:wq退出来。再次push就可以了。

出现这种情况是因为远程端的代码变了。当pull远程新代码下来,如果能幸运地跟本地代码自动合并成功,就会自动进入vi编辑器,要求写些提交注释。 如果没那么幸运的话,那么就是你不想面对的“冲突”了。

如果在改代码前忘了pull,为了减少自动合并,并且确信不会冲突时,可以在提交代码前先pull一下。

查看状态

git status # 查看当前分支、未添加、未提交
git log master ^origin/master # 查看未推送
git log # 查看历次提交 q退出 f下一页 b上一页
# 后文中举例的7a1099d2d8fd67ab76572fb415e128f8ba48a2fd指的是从git log中查到的某个commit id

还原

git checkout . # 放弃所有修改 (相对于上次提交到本地仓库的)
git checkout a.txt # 放弃对指定文件的修改
git clean -f # 删除所有新添加的文件
git reset HEAD # 撤消 add .
git reset --hard HEAD^1 # 恢复到本地仓库的上一个版本(撤消commit)
git reset --hard test # 让当前分支变得更test分支完全一样
git reset --hard 7a1099d2d8fd67ab76572fb415e128f8ba48a2fd # 还原到指定版本
git checkout 7a1099d2d8fd67ab76572fb415e128f8ba48a2fd # 临时跳到指定版本。跳回来用git checkout master
git checkout origin/master a.txt # 指定文件恢复成远程仓库的内容
git checkout master a.txt # 指定文件恢复成本地仓库的内容

让master分支变得跟local分支一样

git checkout master # 切换到master分支
git reset --hard local # 将本地的master分支变得跟local分支一样
git push origin master --force # 强行(覆盖)推送到远程仓库

分支

git branch # 查看分支
git branch local # 创建local分支
git checkout local # 切换到local分支
git push origin local # 将local分支推送到远程仓库
git branch --delete local # 删除local分支
git push origin --delete local # 删除远程local分支

 将local分支合并到master分支

git checkout master
git merge local

 基本概念

 工作目录 --- 本地仓库 --- 远程仓库

 工作目录就是你正在编辑或使用的一些文件。如果你改动了一些文件,在没有commit 之前,那么工作目录就是处于不干净的状态 。在这种状态下, 此后,工作目录改了就改了,毁了就毁了,是没法恢复的。而且无论怎么切换分支,工作目录的内容都不会变。

add 再 commit 就是把代码放入本地仓库的意思。一个仓库可以储存许多分支、许多提交历史。随时可以把工作目录切换到某个分支的某次提交历史的状态。也可以只把历史中的某几个文件拿出来替换当前工作目录中的文件。

通过push可以把本地仓库的新内容推送到远程仓库。然后其他同事就可以用pull从远程仓库拉取新内容到他们的本地仓库。

下面的命令都是比较好用的。而且不会切换掉当前分支,也不会改变当前分支的历史。

git checkout master . # 将master分支的所有文件取出来替换当前工作目录的所有文件
git checkout master a.txt b.txt # 将master分支的a.txt b.txt取出来替换当前工作目录中的文件
git checkout origin/master a.txt # 将远程仓库master分支的a.txt取出来替换当前工作目录中的文件
git checkout 7a1099d2d8fd67ab76572fb415e128f8ba48a2fd a.txt # 将指定版本的a.txt取出来替换当前工作目录中的文件

一些配置

git config --global user.name "my_name" # 默认帐号
git config --global user.email "me@b.com" # 默认帐号
git config --global credential.helper store # 记住密码
git config --global log.date iso # 改变日期格式为2019-04-01 17:01:09 +0800

对于windows用户。在Windows用户目录下,修改.gitconfig文件,增加如下内容:

[credential]
	helper = store # 记住密码
[mergetool]
	prompt = true
	keepBackup = false # 冲突时不保留备份文件

冲突

git reset --hard origin/master # 放弃本地修改,使用远程代码
git reset --hard 7a1099d2d8fd67ab76572fb415e128f8ba48a2fd # 还原到未pull(冲突)前的本地代码
git checkout origin/master a.txt # 指定文件使用成远程仓库的内容
git checkout master a.txt # 指定文件使用本地仓库的内容
git push origin master --force # 强行推送到远程仓库。以你的代码为准。忽略别人的修改。(在未冲突前,或还原到某版本后使用)
git mergetool # 启用冲突合并工具vimdiff。 建议启动前先最大化命令窗口。
rm -f *.orig # 删除备份文件
git config --global mergetool.keepBackup false # 不生成备份文件
git add .; git commit -m "合并好了"; git push # 合并好后,像正常提交代码那样。

自带的冲突解决工具VimDiff

Ctrl+w(两个键释放后再按)方向键 # 切换当前窗口
2do # 用2号窗口的内容块替换当前窗口内容块
:diffupdate # 重新比较
:w # 保存文件
:qa # 退出所有窗口
:!qa # 不保存退出所有窗口
dd # 删除行
u # 撤消
:i # 进入插入模式
Esc # 进入命令模式
gg # 到文档起点
G # 到文档末尾
d1G #删除当前到文档起点
dG # 删除当前到文档末尾
:/abcd # 查找abcd
n # 查找下一个
N # 查找上一个

标签

git tag # 查看所有标签
git tag v1.0 # 打标签
git tag -a v1.2 9fceb02 # 为特定版本打标签
git show v1.4 # 查看标签详情
git tag -d v0.1.2 # 删除标签
git push origin -–tags # 提交标签
git checkout v0.1.0 # 临时跳到版本v0.1.0。跳回用git checkout master

其他

There is no tracking information for the current branch.

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

Your branch is ahead of 'origin/master' by 1 commit

ezmo

每次都采用 git pull origin master会让本地节点一直指向远端 origin/master (指向不更新),所以当从远端获取到新的commit后,这个commit相对于本地节点的指向(远端的旧commit)就会提示“超前”。
解决方法:

  1. 直接使用git fetch命令修复现在的问题,让本地指向远端最新节点
  2. 后续更新使用 git pull, 不要带 origin master

 

 

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值