Git 基础使用详解

写在最前:

Git❓一小时学会 Git

一、基本命令

1、git status #查看修改状态

# 查看指定文件状态
git status [filename]

# 查看所有文件状态
git status

2、git pull origin master #拉取远程仓库 master 分支合并到本地,master 根据场景换成其它分支名

3、git add file #添加文件到暂存区,可用 * or . 添加所有

# 添加指定文件到暂存区
$ git add [file1] [file2] ...

# 添加指定目录到暂存区,包括子目录
$ git add [dir]

# 添加当前目录的所有文件到暂存区
$ git add .

4、git commit -m "commit message" #提交暂存区到仓库区(提交到本地版本库,并添加注释,注释表明此次修改内容,要清晰准确)

# 提交暂存区到仓库区
$ git commit -m [message]

# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]

# 提交工作区自上次commit之后的变化,直接到仓库区,跳过了add,对新文件无效
$ git commit -a

# 提交时显示所有diff信息
$ git commit -v

# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]

# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...

5、git push origin master #将本地版本提交到远程仓库 master 分支,master 根据场景换成其它分支名(将本地的 master 分支推送到 origin 主机的 master 分支,如果后者不存在,则会被新建)

对大部分日常工作来说, 上面几个命令基本就够用了。

二、新建项目

1、设置用户名与邮箱(用户标识,必要)

当你安装 Git 后首先要做的事情是设置你的用户名称和 e-mail 地址。这是非常重要的,因为每次 Git 提交都会使用该信息。它被永远的嵌入到了你的提交中

$ git config --global user.name "wufei"  # 名称
$ git config --global user.email wufei@foxmail.com   # 邮箱

只需要做一次这个设置,如果你传递了 --global 选项,因为 Git 将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或 e-mail 地址,你可以在该项目中运行该命令而不要 --global 选项。 总之--global为全局配置,不加为某个项目的特定配置

2. 从本地到远程

项目开发的时候,有时候是先在本地建一个项目,再提交到远程仓库的。

  1.  创建项目目录(或通过 IDE 创建),命令行 cd 到项目目录
  2.  执行 git init , 将在项目目录创建 .git 目录
  3.  执行 git add * ,将所有文件添加到暂存区,这里要先创建一个 .gitignore 文件,将不需要版本维护的文件添加进去忽略,不然各种 IDE 编译文件夹,环境相关文件都加到版本库去了。删除文件用 git rm file_name
  4.  执行 git commit -m "upload project" ,提交到本地仓库
  5.  在 gitlab 或 github 上创建一个仓库,并将仓库地址复制下来
  6.  执行 git remote add origin git@server-name:path/repo-name.git ,关联远程仓库,仓库地址如果是 http 开头则要用户名密码,如果是 git 开头,则是走的 ssh 协议,需要将你本机的 ssh 公钥添加到远程仓库服务上。
  7.  执行 git push -u origin master ,推送本地仓库内容到远程仓库

这样在远程仓库目录,就能看到你提交上去的文件内容了。

3. 从远程到本地

更多的时候,是远程仓库已有项目了,需要下载到本地开发

  1.  git clone git@server-name:path/repo-name.git , 将远程仓库的内容下载到本地,这里仓库地址的处理同上
  2. 修改内容
  3.  git add * ,将修改的内容添加到暂存区
  4.  git commit -m "fix xxx issue" ,提交到本地仓库
  5.  git push -u origin master , 推送本地仓库内容至远程仓库

版本回退

有时候改了文件,想反悔怎么办,git 给你“后悔药”。

单个文件的还原:

  •  git checkout file_name ,丢弃工作区的修改,还原到上次提交(commit)的版本,
  •  git reset HEAD file_name ,把暂存区的修改撤销掉(unstage),重新放回工作区。即还原到上次添加到暂存区(add)的版本

这里涉及几个场景

  •  场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令 git checkout file_name
  •  场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时(执行了 add,但没执行 commit),想丢弃修改,分两步,第一步用命令 git reset HEAD file_name,就回到了场景1,第二步按场景1操作。
  •  场景3:已经提交了不合适的修改到版本库时,想要撤销本次的全部提交,参考下面的整个版本的还原,不过前提是没有推送到远程库。

整个版本的还原:

  •  git reset --hard HEAD^^, 回退到上上个版本
  •  git reset --hard 3628164, 回退到具体某个版本 3628164 是具体某个 commit_id 缩写

找不到 commit_id? git reflog 可查看每一个命令的历史记录,获取对应操作的 commit_id。git log [--pretty=oneline], 可查看 commit 记录

上一个版本就是 HEAD^,上上一个版本就是 HEAD^^,往上 100 个版本写成 HEAD~100。3628164 是具体某个 commit_id,不需要写全,只需要唯一确定就行,可往前进也可往后退。(git windows2.20.1 版貌似不支持对 HEAD^ 的操作)

多人协作

  1.  首先,可以试图用 git push origin branch_name 推送自己的修改;
  2.  如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;
  3.  如果合并有冲突,则手动解决冲突,并在本地提交;
  4.  没有冲突或者解决掉冲突后,再用 git push origin branch-name 推送就能成功!

如果 git pull 提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令 git branch –set-upstream branch-name origin/branch-name

在本地创建和远程分支对应的分支,使用 git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致

分支管理

平时开发时需要创建子分支来实现你的功能模块,然后再合并到主分支中。

  •  git checkout -b your_branch_name , 创建并切换分支
  •  git branch , 查看分支,标有*号表示当前所在分支
  •  git merge dev , 合并指定 dev 分支到当前分支
  •  git merge --no-ff -m "merge with no-ff" dev , 合并分支并生成commit记录
  •  git branch -d dev , 删除分支

git checkout -b dev = git branch dev + git checkout dev

Fast-forward 合并,“快进模式”,也就是直接把 master 指向 dev 的当前提交,所以合并速度非常快。存在冲突的不能 fast forward。git merge --no-ff -m "merge with no-ff" dev Fast forward 模式下,删除分支后,会丢掉分支信息。如果强制禁用 Fast forward 模式,Git 就会在 merge 时生成一个新的 commit,这样,从分支历史上就可以看出分支信息

标签管理

当发布版本时,一般需要对当前版本进行标签记录,以便后续进行版本查看或回退。

  •  git tag tag_name , 对当前分支打标签
  •  git tag , 查看所有标签
  •  git tag v0.9 6224937 ,针对某个具体 commit id 打标签
  •  git show tag_name , 查看标签信息
  •  git tag -a v0.1 -m "version 0.1 released" 3628164 , 带有说明的标签
  •  git tag -d v0.1 , 删除标签
  •  git push origin tag_name , 推送标签到远程
  •  git push origin --tags , 一次性推送所有标签

删除已经推送到远程的标签:

  •  git tag -d v0.9 , 先本地删除
  •  git push origin :refs/tags/v0.9 , 然后从远程删除

提高效率的 Tips

配置命令别名

# 查看系统config
git config --system --list
  
# 查看当前用户(global)配置
git config --global --list

# 查看当前仓库配置信息
git config --local --list

 

git config --global alias.st status # 后面可以用 git st 来代替 git status 了

git config --global alias.ck checkout  # 后面可以用 git ck 来代替 git checkout 了

git config --global alias.cm 'commit -m' # 后面可以用 git cm 来代替 git commit -m 了

git pull origin master 或 git push origin master, 可直接 git pull 或 git push, 如果出现“no tracking information”的提示,则说明本地分支和远程分支的链接关系没有创建,用命令 git branch --set-upstream-to=origin/master master 建立关联即可。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值