Git教程 git-pull-correct-workflow 使用原理视角看 Git
初次设置
- git config –global user.name “free”
- git config –global user.email “free@example.com”
- git config –global color.ui true
- git config –global alias.co checkout
- git config –global alias.ci commit
- git config –global alias.st status
- git config –global alias.br branch
- git config –global core.editor “mate -w” (设置Editor使用textmate)
- git config -l (列举所有配置)
版本库操作
- git init (初始化)
-
git help
(显示command的help) - git show (显示某次提交的内容)
-
git show $id
- git add
(将工作文件修改提交到本地暂存区) -
git add . (将所有修改过的工作文件提交暂存区)
- git checkout –
(抛弃工作区修改) -
git checkout . (抛弃工作区修改)
- git rm
(从版本库中删除文件) - git add -A (它会把我们未通过 git rm 删除的文件全部stage)
-
git rm
--cached (从版本库中删除文件,但不删除文件) - git reset
(从暂存区恢复到工作文件) - git reset – . (从暂存区恢复到工作文件)
- git reset –hard (恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改)
- git reset HEAD~1 (撤销最后一次提交)
- git reset –hard HEAD^ (撤销最后一次提交并清除本地修改)
-
git reset SHA1 (回到SHA1对应的提交状态)
- git commit
- git commit .
- git commit -a -m “命令名” (将git add, git rm和git ci等操作都合并在一起做)
- git commit -am “some comments”
-
git commit –amend (修改最后一次提交记录)
- git revert <$id> (恢复某次提交的状态,恢复动作本身也创建了一次提交对象)
- git revert HEAD (恢复最后一次提交的状态)
查看文件不同
- git diff
(比较当前文件和暂存区文件差异) - git diff
- git diff <$id1> <$id2> (比较两次提交之间的差异)
- git diff
.. (在两个分支之间比较) - git diff –staged (比较暂存区和版本库差异)
- git diff –cached (比较暂存区和版本库差异)
- git diff –stat (仅仅比较统计信息)
查看提交记录
- git log
- git log
(查看该文件每次提交记录) - git log -p
(查看每次详细修改内容的diff) - git log -p -2 (查看最近两次详细修改内容的diff)
- git log –stat (查看提交统计信息)
- tig (Mac上可以使用tig代替diff和log,brew install tig)
查看,切换,创建和删除分支:
- git branch -r (查看远程分支)
- git branch -v (查看各个分支最后提交信息)
- git branch 分支名称 (创建新的分支)
- git branch –merged (查看已经被合并到当前分支的分支)
-
git branch –no-merged (查看尚未被合并到当前分支的分支)
- git checkout 分支名 (切换到某个分支)
- git checkout -b 分支名称 (创建新的分支,并且切换过去)
-
git checkout -b
(基于branch创建新的new_branch) - git checkout $id (把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除)
-
git checkout $id -b
(把某次历史提交记录checkout出来,创建成一个分支) - git branch -d 分支名称 (删除某个分支)
- git branch -D 分支名称 (强制删除某个分支–未被合并的分支被删除的时候需要强制)
-
git push orign :branch (删除远程分支)
- git branch -m old new (修改分支名)
分支合并和rebase:
- git merge 分支名称 (将branch分支合并到当前分支)
-
git merge origin/master –no-ff (不要Fast-Foward合并,这样可以生成merge提交)
- git rebase master
(将master rebase到branch,相当于: - git checkout
&& git rebase master && git checkout master && git merge )
Git远程分支管理
- git pull (抓取远程仓库所有分支更新并合并到本地)
- git pull –no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并
- git pull upstream master
- git fetch origin # 抓取远程仓库更新
- git merge origin/master # 将远程主分支合并到本地当前分支
- git co –track origin/branch # 跟踪某个远程分支创建相应的本地分支
-
git co -b
origin/ # 基于远程分支创建本地分支,功能同上 - git push # push所有分支
- git push origin master # 将本地主分支推到远程主分支
- git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
- git push origin
# 创建远程分支, origin是远程仓库名 - git push origin
: # 创建远程分支 - git push origin :
#先删除本地分支(git br -d ),然后再push删除远程分支
Git远程仓库管理:
- git remote -v # 查看远程服务器地址和仓库名称
- git remote show origin # 查看远程服务器仓库状态
- git remote add origin git@github:robbin/robbin_site.git # 添加远程仓库地址
- git remote set-url origin git@github.com:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址)
- git remote rm
# 删除远程仓库 - git push origin –delete master
创建远程仓库
- git clone –bare robbin_site robbin_site.git # 用带版本的项目创建纯版本仓库
-
scp -r my_project.git git@git.csdn.net:~ # 将纯仓库上传到服务器上
- mkdir robbin_site.git && cd robbin_site.git && git –bare init # 在服务器创建纯仓库
- git remote add origin git@github.com:robbin/robbin_site.git # 设置远程仓库地址
- git push -u origin master # 客户端首次提交
-
git push -u origin develop # 首次将本地develop分支提交到远程develop分支,并且track
- git remote set-head origin master # 设置远程仓库的HEAD指向master分支
Git暂存管理
- git stash # 暂存
- git stash list # 列所有stash
- git stash apply # 恢复暂存的内容
- git stash drop # 删除暂存区
命令设置跟踪远程库和本地库:
- git branch –set-upstream master origin/master
- git branch –set-upstream develop origin/develop
标签tag
- git tag (显示所有tag)
- git checkout v0.0.1 (切换tag)
- git tag -a v0.0.3 -m “version 0.0.3” (创建新tag)
- git push –tags (push新tag)
更新fork出来的项目
git fetch upstream
git checkout master
git merge upstream/master
小技巧
git fetch
会从远程获取最新版本到本地,不会自动merge,git pull
会自动merge- 删除所有新建文件
git checkout . && git clean -xdf
force
强制消除远程提交分支
- 回到历史版本:
git reset --hard HEAD~1
- 强制推到远端:
git push origin HEAD --force
远程拉取分支到本地
- git checkout –track origin/debug
- git pull
更新.gitignore
git rm -r --cached .
git add -A
git commit -m "update .gitignore"
log查看
git log --oneline --decorate --graph --all -20
替换新master分支
- git branch -D master //删除本地master分支
- git push origin :master //删除远程master分支
- git checkout saas_1.0.0
- git checkout -b master
- git push origin master:master