最近在整理项目,需要用到git,于是问题就出来了:究竟是用GUI版还是命令行?不过经过实践,命令行真好用,哈哈!
所以,这篇文章激流勇进,其实吧主要是记录一下,在项目中用到的命令行以及git命令行。
命令 | 说明 |
---|---|
创建版本库 | 命令行相关 |
ls |
查看文件夹下文件 |
ls -ah |
查看文件夹下文件(包含隐藏文件) |
mkdir 文件名 |
创建文件夹 |
pwd |
命令用于显示当前目录 |
cd 文件名 |
进入某文件夹 |
cd .. |
退出到上一级目录 |
cd\ |
退出到根目录 |
cat 文件名 |
查看文件 |
vim 文件名 |
打开文件编辑 |
按住 esc + shift + : 之后输入 wq
|
保存并推出 |
git init |
把这个目录变成 Git 可以管理的仓库 |
git add 文件名 |
把文件添加到仓库,可以多次add不同的文件,例如:git add file2.txt file3.txt
|
git commit -m "提交的说明" |
把文件提交到仓库,-m 后面输入的是本次提交的说明 |
版本回退 | git相关 |
git status |
查看仓库当前的状态 |
git diff |
查看 difference ,显示的格式正是 Unix 通用的diff格式 |
git diff HEAD -- 文件名 |
查看工作区和版本库里面最新版本的区别 |
git diff '提交地址1' '提交地址2' >> 文件名.txt |
检出 diff 文件(再用 open . 可打开文件所在位置) |
git log |
查看 git 提交的历史记录 |
git log --pretty=oneline |
按时间顺序,查看 git 提交日志 |
git reset --hard HEAD^ |
回退到上一个版本 |
git reset --hard "版本号" |
指定回到未来的某个版本,版本号没必要写全,前几位就可以了 |
git reflog |
查看命令历史 |
撤销修改 | git相关 |
git checkout -- 文件名 |
让这个文件回到最近一次 git commit 或 git add 时的状态 |
git reset HEAD <文件名> |
暂存区的修改撤销掉(unstage),重新放回工作区 |
删除文件 | git相关 |
rm 文件名 |
删除指定文件 |
git rm 文件名 |
从版本库中删除指定文件 |
添加远程库 | git相关 |
git remote add origin git@server-name:path/repo-name.git |
关联远程库 |
git push |
把当前分支推送到远程 |
git push -u origin master |
-u 参数,Git 不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令 |
git push origin master |
把本地 master 分支的最新修改推送至 GitHub
|
从远程库克隆 | git相关 |
git clone "远程库地址" |
克隆仓库 |
创建与合并分支 | git相关 |
git branch |
查看当前分支,会列出所有分支,当前分支前面会标一个 * 号 |
git branch 分支名 |
创建分支 |
git checkout 分支名 |
切到指定分支 |
git checkout -b 分支名 |
创建加切换分支 |
git push origin 本地分支名 |
提交本地分支到远程仓库 |
git branch --set-upstream-to=origin/分支名 本地分支名 |
本地分支设置为从'origin'跟踪远程分支 |
git merge 分支名 |
合并某分支到当前分支 |
git log --graph |
查看到分支合并图 |
git branch -d 分支名 |
删除指定分支 |
git branch -D 分支名 |
强行 删除指定分支 |
分支管理策略 | git相关 |
git merge --no-ff -m "提交说明" 分支名 |
加上 --no-ff 参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并 |
Bug分支 | git相关 |
git stash |
把当前工作现场“储藏(stash )”起来,等以后恢复现场后继续工作 |
git stash list |
查看被“储藏”的工作现场 |
git stash apply |
恢复被“储藏”的工作现场 |
git stash drop |
删除曾被“储藏”的工作现场记录 |
git stash pop |
恢复的同时把 stash 内容也删了 |
git stash apply "版本号" |
多次 stash ,恢复时,先用 git stash list 查看,然后恢复指定的 stash
|
多人协作 | git相关 |
git remote |
查看远程库信息 |
git remote -v |
显示更详细的远程库信息 |
git push "远程仓库名称" "本地分支名称" 例如: git push origin master
|
远程仓库的默认名称是 origin ,把指定分支推送到远程库对应的远程分支上 |
git checkout -b "分支名" "远程仓库名称"/"本地分支名称" 例如: git checkout -b dev origin/dev
|
远程库 clone 时,默认情况下,小伙伴只能看到本地的 master 分支,若要在 dev 分支上开发,就必须创建远程 origin 的 dev 分支到本地 |
git pull |
把最新的提交从 origin/dev 抓下来 |
git branch --set-upstream-to=origin/dev dev |
如果 git pull 提示 no tracking information ,需指定本地 dev 分支与远程 origin/dev 分支的链接 |
git rebase |
把本地未push的分叉提交历史整理成直线 目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比 |
标签管理 | git相关 |
git tag 标签名 |
为当前分支打标签(默认标签是打在最新提交的 commit 上的) |
git tag |
查看所有标签 |
git tag "标签名" "版本号" |
为历史提交的 commit 打标签 |
git show 标签名 |
查看标签信息 |
git tag -a "标签名" -m "说明文字" "版本号" |
创建带有说明的标签,用 -a 指定标签名,-m 指定说明文字 |
注意 |
标签总是和某个 commit 挂钩。如果这个 commit 既出现在 master 分支,又出现在 dev 分支,那么在这两个分支上都可以看到这个标签 |
git tag -d 标签名 |
删除指定标签 |
git push "远程仓库名称" "标签名" 例如: git push origin v1.0
|
推送某个标签到远程 |
git push 远程仓库名称 --tags |
一次性推送全部尚未推送到远程的本地标签 |
git push "远程仓库名称" :refs/tags/"标签名" |
从远程删除标签(如果标签已经推送到远程,要删除远程标签需要,先从本地删除,然后从远程删除) |
远程库变更 | git相关 |
git remote set-url origin "远程库新地址“ |
更改远程库 url
|
git remote -v |
查看远程 url 是否已更新 |
vim ~/.ssh/known_hosts |
查看 ssh
|
情景实战:
1. git 利用命令行提交代码
git pull:拉取服务器代码,避免覆盖他人代码
git status:查看当前项目中有哪些文件被修改过
具体状态如下:
Untracked: 未跟踪,一般为新增文件,此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过 git add 状态变为 Staged。
Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作。
deleted: 文件已删除,本地删除,服务器上还没有删除。
renamed:
将状态改变的代码提交至缓存
git add + 文件
git add -u + 路径:将修改过的被跟踪代码提交缓存
git add -A + 路径: 将修改过的未被跟踪的代码提交至缓存
或者
git add .
使用上面的命令将所有的修改的文件提交到缓存区
git commit -m “修改项目代码” :将代码提交到本地仓库中
git push:将缓存区代码推送到 Git 服务器
常见问题
1:误将代码提交到缓存中(利用 git add 命令误将代码提交的缓存中)
解决办法:利用 git reset 命令将撤回缓存中的代码。
2:误将代码提交到本地仓库(利用 git commit 命令误将代码提交到本地仓库)
解决办法:
git reset —hard + 版本号
彻底回退到某个版本,本地的代码也会改变上一个版本内容。