git常用命令记录

自廖雪峰的GIT教学

命令 作用
rm 删除工作区的文件
ls 查看当前路径下的文件
pwd 显示当前所在路径
git init 创建仓库
git add 把文件的修改添加到暂存区(只有暂存区的内容才能被commit)
git add -A 添加所有更改文件到暂存区
git commit -m “<提交说明>” 暂存区的改动提交到当前分支。
git commit --amend --no-edit 将暂存区改动提交到上一次commit
  • 工作区:包含.git的文件夹,本地文件夹

  • .git文件夹:版本库

  • .git内的stage(index):暂存区

git常用命令记录_第1张图片

1、版本回退

  • 查看历史提交记录 :git log or git log --pretty=oneline
  • 回退版本到最新提交:git reset --hard HEAD, HEAD^上个版本 HEAD~100 上100个提交
  • 回退到具体版本: git reset --hard <具体版本号>如最新版本记为3,已经reset到版本2,想再回到版本3,只要知道具体版本号
  • 查看提交历史:git reflog 这里能看到HEAD的调整历史,可以找到reset之后的,丢失的那几个git log 看不到的版本
  • 打印文件中的内容:cat
  • 克隆仓库:git clone

2、管理修改

  • git status 查看状态,看工作区的状态
  • git diff 查看具体修改内容
  • git diff HEAD -- 查看工作区与版本库最新版本的区别
  • git diff 当前版本提交的修改内容
  • git diff --stat 对比两个版本差异

3、撤销修改

git checkout -- 撤销工作区的修改,回到暂存区里的状态(如果有),否则回到版本库内最新状态
git reset HEAD 暂存区的修改撤销掉(unstage),重新放回工作区

  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令b

  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD and git checkout --

  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

文件删除

rm 删除文件之后,两种选择

  • 确实要从版本库中删除该文件,那就用命令git rm 删掉,并且git commit -m
  • 删错了,因为版本库里还有,所以可以很轻松地把误删的文件恢复到最新版本 git checkout -- 。只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

4、分支操作

版本库内 HEAD指向的是分支指针,分支指针指向的分支。此处dev分支已经修改并提交了一次,
git常用命令记录_第2张图片
查看所有分支:git branch ,列出所有分支,当前分支标*
创建分支:git branch
跳转分支:git checkout (由于与撤销命令雷同,所以推荐用git switch <分支名>
创建并跳转:git checkout -b or git switch -c
合并目标分支到的当前分支:git merge --no-ff -m "" (关闭fast forward)
删除分支:git branch -d ,如果分支尚未合并 需要用-D


冲突解决

查看冲突文件:git status
此时点开该冲突文件,冲突内容会被标记出来,删除<<<===>>>等内容,留下自己最终想要留下的代码即可
用带参数的git log 查看合并情况:git log --graph --pretty=oneline --abbrev-commit


bug修复(stash储藏表)

暂存区stage和储藏表stash,都是用于存放工作区的修改内容,不同的是

  • stage存放的内容已经编辑完成,即将commit
  • stash存放的内容还没编辑完,不准备commit,只是暂时要切换到其他分支做事,事后还会切回来继续工作

git stash:把当前分支工作区的修改内容隐藏到储藏室中,工作区clean,因为修改被隐藏了

git stash list:查看stash中的存储记录

新建bug-101分支修改完master的bug并且合并到master后,切换回dev分支,想要从储藏室恢复之前工作区内容有两种方式

  • 分步:git stash apply恢复,git stash drop手动删除stash中的记录
  • 一步:git stash

修改master的bug后,因为dev也是从master签出的,因此可能也存在该bug
如何将master上 合并bug-101 的那次提交复制到dev?(注意不是直接merge master到dev)

  • 复制一个特定的提交到当前分支:git cherry-pick

5、远程库创建

方法1:先有本地代码,后从本地推送到远程库

创建SSH key(已有则忽略)

  • 创建SSH Key:ssh-keygen -t rsa -C "<邮箱>"
  • 点hub网页上的“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容(在user文件夹中)

新建远程仓库

  • 在github 创建仓库后,复制SSH地址
  • 关联远程库git remote add origin
  • 首次推送要加-u,后续不必 git push -u origin master

方法2:先创建仓库,克隆后,再写代码(推荐)

克隆 git clone


远程库操作

查看远程库信息:git remote -v 显示可以抓取和推送的地址。如果没有推送权限,就看不到push地址
删除远程库:git remote rm <远程库名字>,仅仅是切断了两者的联系
关联远程库:git remote add origin
推送本地分支到远程库:$ git push <远程库名> <具体分支名>

不一定要把本地分支全部往远程推送,哪些分支需要推送,哪些不需要呢?

  • master分支是主分支,因此要时刻与远程同步;
  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
  • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

多人协作开发

  • 首先,可以试图用git push origin 推送自己的修改
  • 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并
    • 如果合并有冲突,则解决冲突,并在本地提交;
    • 没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
  • 如果git pull提示no tracking information,则说明本地创建的分支和远程分支的链接关系没有创建
  • git branch --set-upstream-to <远程库-name>/,建立本地分支和远程分支的关联
    • 不行就用这个:git branch --set-upstream-to=origin/ master

Rebase(变基)

命令:git rebase

  • rebase操作可以把本地未push的分叉提交历史整理成直线;
  • rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

6、标签管理

“请把上周一的那个版本打包发布,commit号是6a5819e…”
“一串乱七八糟的数字不好找!”
如果换一个办法:
“请把上周一的那个版本打包发布,版本号是v1.2”
“好的,按照tag v1.2查找commit就行!”

创建标签

  • 首先,切换到需要创建标签的分支上:git checkout
  • 创建标签:git tag ,默认在最新commit上,否则需提供id:git tag
  • 创建带说明的标签:git tag -a -m "..."
  • 查看所有标签:git tag (注意是按照首字母排序,并非时间)
  • 查看具体标签详细信息:git show

标签操作

删除本地标签: git tag -d
推送单个标签到远程:git push <远程库名>
推送所有标签到远程:git push <远程库名> --tags

如果要删除远程标签

  • 先删除本地标签:git tag -d
  • 再删除远程标签:git push <远程库名>:refs/tags/v0.9 依然是push操作,但命令不同

最后

在GitHub上,可以任意Fork开源仓库;

自己拥有Fork后的仓库的读写权限;

可以推送pull request给官方仓库来贡献代码。

你可能感兴趣的:(工具,git,github)