又到回味git的时候了

经过一年,终于熟练使用最基本最基本的几个命令了。当初看了三四遍文档,不知道为什么就是想不太明白==工作中又不用。

如果你是一个超级初学者,也像我一样怎么也想不明白,可以在日常工作中遵循以下步骤:

  1. 打开github创建一个repository
  2. 复制git地址
  3. git clone 地址到本地文件夹
  4. 把你写的代码扔进去
  5. git add *
  6. git commit -m "写点心情文字"
  7. git pull(很重要,有事没事多pull)
  8. git push origin master (或者其他分支)

就靠这几个步骤度过不会git的艰难日子。另外有些命令是让我毫无痛苦就记住的:

git status:查看下还有没有未提交的文件==
git reset --hard ...: 万一写错了,就把本地的文件重置为服务器上的文件
git checkout newbranch: 切换分支

除此之外,回退什么的我不敢轻易使用==就这么撑过了一年。

进阶

git reset

最近发现有个命令我常用。本地commit之后,还没push,后悔了,想要回到当初没有commit(xiangai)的时刻

git reset --hard commit_id

git reset HEAD~1
//`HEAD`表示当前版本
//~1 是之前的一步,~2是之前的两步……

然后可以重新git add, commit, pull push……

使用reset可以在不同的版本之间穿梭,如果回退到过去的某个版本,又想回到现在的某个版本,都是通过commit_id来进行的。可以使用git reflog来查看所有的commit_id。其实就是把HEAD指针指向到不同的commit_id, HEAD始终指向的是当前的commit

git diff

git status 可以轻松知道有哪些文件修改了
git diff 某个文件, 可以让我们知道某个文件具体修改了什么内容

git diff HEAD – 文件名 可以查看文件工作区和版本库里最新版本的区别

git log

查看最近的3条提交commit日志

想要显示简洁的commit id信息,加上参数 --pretty=oneline

git reflog

记录每一次命令的

git的两个区

工作区(Working Directory):在电脑里看到的文件

版本库(Repository): .git里面的文件,版本库。包含两个区:
—— 暂存区 Stage
—— HEAD 指向的是不同分支的内容

假想你是一个外太空医生,在地球生活,偶尔去外太空出诊。

每天你在地球上工作(地球是你的工作区),准备的差不多了,乘坐git add巴士,带着准备好的药品先去中转站(暂存区Stage),commit spaceship 带着暂存区的所有人前往月球,月球就是我们一个分支。

总之,通过git add,文件从工作区移动到了暂存区,通过git commit 文件从暂存区移动到了分支。git status查看的便是工作区的内容,

git checkout

git checkout – file 丢弃工作区的修改, 回到最近一次git commit或git add时的状态。

按照顺序,如果暂存区有状态,那就是暂存区的状态,如果没有,那就是版本库的状态。

如果没有–file, 那就是切换分支

git checkout -b feature1 创建并切换分支

git merge

git merge newbranch 合并分支

git branch -d newbranch 删除分支

git merge –no-ff -m “merge with no-ff” dev
不是用fastforward模式进行合并,合并后可以看出合并迹象,如果使用了fast-forward模式,看不出来曾经做过合并

git reset revert checkout 区别?

Reference stackoverflow Link

  1. revert 会创建一个新的commit来撤销上次的commit,已有的记录并不会被改变;如果你commit,然后觉得这个commit很失败,想要撤销
  2. checkout是把区域2仓库的内容移到区域1 working directory中,也不会改变已有记录;如果你没有commit,想要撤销
  3. reset 会修改暂存区stage,head的指向也会变,已有的记录改变;如果你在本地commit了

git rm

git rm file 删除版本库的文件,相对于命令git add
git commit -m "remove test.txt" 提交删除操作

git checkout -- test.txt 误删恢复

git stash

切换分支前,暂存当前的工作,做完别的回来之后,可以恢复

git branch

创建了一个新分支,还没合并到主分支,结果想要删掉这个分值。
git branch -d feature-vulcan 不生效

git branch -D feature-vulcan 强制删除

git remote

git remote -v 查看远程更详细的信息

关联远程库

如果先有本地库,后有远程库,就不能用clone那一套了

git remote add origin git@server-name:path/repo-name.git;

关联后,使用命令git push -u origin master 第一次推送master分支的所有内容

创建SSH Key

ssh-keygen -t rsa -C "[email protected]"

本地Git仓库和GitHub仓库之间的传输是通过SSH加密。
运行成功后,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

标签

标签是版本库的一个id,你可能会有多个commit,标签指向某个commit,因为commit_id很难记住,而tag可以像v1.2之类的被记住

  1. git checkout master 切换分支
  2. git tag v1.0 打标签

git tag 可以查看所有的标签。标签不是按时间顺序列出,而是按字母排序的

默认标签是打在最新提交的commit上的,通过 git log --pretty=oneline --abbrev-commit 找到历史的commit id, git tag v0.9 6224937 可以打在某个具体的commit操作上

另:

git tag -a v0.1 -m "version 0.1 released" 3628164
创建带有说明的标签,用-a指定标签名,-m指定说明文字

git show <tagname>可以看到说明文字:

git tag -d v0.1 删除标签

git push origin <tagname> 推送标签到远程

git push origin --tags 一次性推送全部尚未推送到远程的本地标签

已经推送到远程?先从本地删除:git tag -d v0.9
然后,从远程删除。git push origin :refs/tags/v0.9

Fork

fork就是在自己的仓库下复制别人的仓库。这样你才有权限推送。如果想在别人的仓库提交自己的推送,使用pull request

color

git config --global color.ui true 命令行颜色

gitignore

在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

git配置文件

举例

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa

git add -f App.class 如果文件被忽略,仍旧想要提交

git check-ignore 可以检查哪个规则写错了

猜你喜欢

转载自blog.csdn.net/jplyue/article/details/78981689