常见Git命令总结


最近在进行团队代码的编写,发现和别人之间的代码配合包括自己代码的版本迭代更新管理十分混乱,因此考虑到了git这个大杀器来进行代码和文本文件的管理,简单地学习了一下git和github,主要参考了 廖雪峰的git教程.不得不说,这确实是个很好的教程,至今已有上百亿的阅读量。在这里总结了常用的git命令,对git的运行机制和管理结构并没有详细的阐述,想要学习的话可以参考 廖雪峰的git教程

创建

  • 将目录变成Git可以管理的仓库:
git init
  • 把文件添加到版本库

所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。不能控制word,必须纯文本,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码

使用Windows的要特别注意:千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加0xefbbbf(十六进制)的字符。

git add <file> #可反复多次使用,添加多个文件
git commit -m <message> #-m 后面是说明信息

查看和管理版本信息

查看和提交文件修改

  • 掌握仓库当前的状态
git status
  • 查看具体信息内容
git diff <file>
  • 提交修改文件
git add <file> 
git commit -m <message> 

版本回退

储存的每一个版本成为commit,当你每一次commit时就存储一个快照。每一个commit有一个id、author、date等信息

  • 查看提交的历史记录
git log 

可以加上--pretty=oneline参数。

  • 版本回溯

先确定当前版本。HEAD表示当前版本,上一个版本是HEAD^,上上一个版本就是HEAD^^,往上100个版本写成HEAD~100

回退到上一个版本

git reset --hard HEAD^
git reset --hard <commit id>

可以往前或者往后,只要输入id,可以只输入前几位。

  • 查看命令的历史记录
git reflog

撤销修改

  • 丢弃工作区的修改

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令。

git chechout --<file>

分为两种情况:

一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

  • 撤销暂存区的修改

把暂存区的修改撤销掉(unstage),重新放回工作区:

git reset HEAD <file>

删除文件

  • 从版本库中删除文件
git rm <file>
git commit -m <message>
  • 从版本中恢复/还原文件
git checkout --<file>

远程仓库

这里远程仓库默认为github,首先需要先添加自己本地的SSH KEY公钥。

添加远程仓库

  • 关联远程仓库
git remote add origin git@github,com:path/repo-name.git

关联后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

  • 把本地库内容推送到远程库

第一次推送:

git push -u origin master

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程

由于远程库是空的,第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

而后推送:

git push origin master

从远程库克隆

git clone git@github.com:path/repo-name.git#ssh协议
git clone https://github.com/path/repo-name.git#https协议

分支管理

创建与提交分支

每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向mastermaster才是指向提交的,所以,HEAD指向的就是当前分支。

  • 创建分支
git branch <branch_name>
  • 切换分支
git checkout <branch_name>
git switch <branch_name>
  • 创建并切换分支
git checkout -b <branch_name>
git switch -c <branch_name>
  • 查看当前分支
git branch
  • 合并分支

dev分支的工作成果合并到master分支(当前分支)上:

git merge dev

git merge命令用于合并指定分支到当前分支

git merge --no-ff -m "merge with no-ff" dev

--no-ff参数,表示禁用Fast forward,用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并

  • 删除分支
git branch -d <branch_name>
  • 强行删除分支
git branch -D <branch_name>

解决冲突

当无法合并时,必须手动解决冲突。

  • 查看分支合并图:
git log --graph

工作现场

  • 保存工作现场
git stash
  • 查看工作现场
git stash list
  • 恢复/删除工作现场
git stash apply #恢复后不删除
git stash drop#删除
git stash pop#恢复并删除
  • 复制提交到当前分支
git cherry-pick <commit_id>

多人协作

  • 查看远程库信息
git remote 
git remote -v
  • 推送分支
git push origin <branch_name>
  • 抓取并新建分支
git checkout -b <branch_name> origin/<branch_name>
  • 设置链接
git branch --set-upstream-to=origin/<branch_name> <branch_name>
  • 抓取分支
git pull

标签管理

创建标签

  • 创建

首先切换到要创建标签的分支

git tag <tag_name>
git tag <tag_name> <commit_id>
  • 查看
git tag
git show <tag_name>
git tag -a <tag_name> -m <message> <commit_id>

操作标签

  • 删除
git tag -d <tag_name>#删除本地标签
git push origin :refs/tags/<tagname>#删除远程标签
  • 推送到远程
git push origin <tag_name>
git push origin --tags#一次性推送全部

忽略特殊文件

在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore

有些时候想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了,此时可以强制添加:

git add -f <file>

.gitignore的例子:

# 排除所有.开头的隐藏文件:
.*
# 排除所有.class文件:
*.class

# 不排除.gitignore和App.class:
!.gitignore
!App.class

配置文件

当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig

附录

最后附上常用的git命令指南。
Git Cheat Sheet
git的官方网站

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值