An article about general purpose git commands in order to working conveniently.
Mechanism
- workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
Xuefeng Liao
Establish
- 创建版本库:
mkdir folder_name → cd folder_name → git init
Time Machine
- workspace到index:
git add .
git add <filename>
- 在workspace中改动后恢复:
git restore <filename>
- index到Repo:
git commit -m "message"
- 查看状态:
git status
- 修改文件后查看不同:
git diff <filename>
- 查看日志:
git log --pretty=oneline
- commit之后回到上一版本:
git reset --hard HEAD^
- commit之后回到任一版本:
git reset --hard <commitID>
- 显示记录的每一个命令:
git reflog
- 显示Repo和workspace的不同:
git diff HEAD -- <filename>
- 撤销workspace的所有修改:
git checkout -- <filename>
10.1 在workspace修改后还没有被放到index 则checkout后回到与原workspace一样的内容
10.2 已经添加到index则先git reset HEAD <filename>
把index的修改撤销掉 回到10.1
10.3 总之回到最近一次git add
git commit
时的状态 - 从Repo中删除文件
git rm filename
然后再git commit -m "<delete_message>"
- 若是workspace中误删 从Repo中恢复
git checkout -- <filename>
Remote Repository
- 本地创建密钥
ssh-keygen -t rsa -C "youremail@example.com"
再到github的Add SSH Key - github新建后本地
git remote add origin git@github.com:michaelliao/learngit.git
- 第一次推送到remote:
git push -u origin <branch_name>
以后可以直接git push origin <branch_name>
- 从远程克隆:
git clone git@github.com:michaelliao/gitskills.git
- 查看远程库属于哪个分支
git remote
- 查看对应的远程仓库:
git remote -v
Branch Management
创建分支并切换:
git checkout -b <branchname>
查看当前分支:
git branch
切换分支:
git checkout <branchname>
把A分支合并到master上:
git merge A
4.1 强行
git merge
会有冲突 冲突会显示在txt内容中 在txt中修改4.2 此时可用
git log --graph --pretty=oneline --abbrev-commit
查看详细日志删除分支:
git branch -d <branchname>
禁用fast forward模式合并 删除分支后不会丢掉分支信息:
git merge --no-ff -m "merge with no-ff" <branchname>
要新增分支fix bug 将现在工作储存起来
git stash
7.1 bug被fix后要恢复到现场
git stash apply
7.2 恢复到现场并删除stash
git stash pop
7.3 在master分支上修复的bug,想要合并到当前dev分支,可以用
git cherry-pick <commitID>
,把bug提交的修改“复制”到当前分支,避免重复劳动。开发新分支之后中途不要了 强行删除
git branch -D <feature_name>
从远程克隆下来后要在远程新增分支
git checkout -b <branch_name> origin/<branch_name>
修改之后再两台电脑对同一个远程分支进行push有冲突就
git pull
拉下来解决冲突后再add/commit/push让多分支的日志变成一条直线
git rebase
Tag Management
创建标签
git tag <tag_name>
查看标签
git tag
查看历史commitID
git log --pretty=oneline --abbrev-commit
再给相应的commitID打标签git tag <tag_name> <commitID>
查询某个标签的commitID和commit_message
git show <tag_name>
为标签添加说明信息
git tag -a <tagname> -m "<info_message>"
删除标签
git tag -d <tag_name>
推送标签到远程
git push origin <tag_name>
推送全部标签git push origin --tags
删除远程标签
8.1 先从本地删除
git tag -d <tag_name>
8.2 再从远程删除
git push origin :refs/tags/<tag_name>
Ignore Management
- 先在.gitignore中写好规则 规则中出现的文件不会在github的源码中出现
- 被忽略的文件想要强行添加
git add -f <file_name>
或者想要检查是违反了.gitignore中哪条规则git check-ignore -v <file_name>
Key Point
- 一改
git add <filename1>
→二改git add <filename2>
→git commit -m "<message>"
- 一改
git add <filename1>
一提交git commit -m "<message1>"
二改git add <filename2>
二提交git commit -m "<message2>"
三传git push origin master
- 回到本地区
git checkout -- <filename> index
- 从Repo删除
git rm <filename>/git rm -r <folder_name>
再git commit -m "<message>"
- 从Remote删除
git remote remove <repo_name>
- 从index删除
git rm (-f) <filename>
Yifeng Ruan
Commit Operations
1 | # 提交暂存区到仓库区 |
Branch Operations
1 | # 列出所有本地分支 |
Tags Operations
1 | # 列出所有tag |
Push Operations
1 | # 下载远程仓库的所有变动 |
Revoke Operations
1 | # 恢复暂存区的指定文件到工作区 |
Git Proxy
git config --global http.proxy http://127.0.0.1:10809
git config --global https.proxy https://127.0.0.1:10809
git config --global http.proxy 'socks5://127.0.0.1:10808'
git config --global https.proxy 'socks5://127.0.0.1:10808'
git config --global --unset http.proxy
git config --global --unset https.proxy
git config --global -l
Git in other machine
1 | # 配置用户名和邮箱 |