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 addgit 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 A4.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 stash7.1 bug被fix后要恢复到现场
git stash apply7.2 恢复到现场并删除stash
git stash pop7.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:10809git config --global https.proxy https://127.0.0.1:10809git 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.proxygit config --global --unset https.proxygit config --global -l
Git in other machine
1 | # 配置用户名和邮箱 |