下面是我整理的git常用命令,适合 学习过并使用过 git 后有段时间没用的朋友查阅回忆。没学过git乱用很可能会把自己的代码搞砸.
Git常用命令
基本
git config [--global] user.name=yourname 配置用户名
git config [--global] user.email=youremail 配置用户邮箱
git config -l 查看配置信息
git clone <url> [directory name] 克隆远程仓库到directory name文件夹,没指定就以项目名创建文件夹并clone进去;
git status 查看当前的work directory和stage area情况,以及当前分支和远程关联分支的提交情况对比信息;
git add <.|file name1 file name2 ......> 添加modified文件到stage area以备commit;
git commit -m “commit message” 提交stage area里的修改到当前分支;
git remote -v查看远程库名及url;
git remote add <remote name> <url> 添加远程库;
git remote set-url <remote name> <url> 更改远程仓库;
git push origin local_branch:remote_branch 将本地某分支推送到origin远端某分支 ;
git pull origin remote_branch:loacl_branch 将远端某分支拉取到本地某分支 ;
git push 推送本地当前分支到远端关联分支(远端分支得到更新)
git pull 拉取远端关联分支到本地当前分支(当前分支得到更新)
查看分支关联用 git branch -vv
版本回退
git log [-graph] [--pretty=oneline] 查看commit日志;
git reset --hard <HEAD^ | HEAD~n> 版本向前回退n个commit;
git reset --hard <commit_id> 直接定位到commit_id的版本;
git reflog 查看HEAD移动日志,可用于获得回到将来版本的commit_id;
git diff 查看版本库与工作区的差别;
git diff HEAD -- file_name 查看某文件在版本库中与工作区的差别;
查看 staging area 和 working directory 中文件的差异。
¡ git diff: 查看 working directory 与 staging area 之间的差异
¡ git diff --cached: 查看 repository 与 staging area 之间的差异
¡ git diff HEAD: 查看 working directory 与 repository 之间的差异
撤销修改
git checkout -- file 把file文件在工作区的修改全部撤销;
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
*撤销不小心提交的错误的最新commit:
git reset [--选项] <HEAD~n | commit_hash>
example:
git reset HEAD~1 文件保留修改,版本库回退到上个commit
git reset --soft HEAD~1文件保留修改,版本库最新commit送回staged area并同时回退到上个commit
--soft 参数将上一次的修改放入staging area
--mixed 参数将上一次的修改放入working directory
--hard 参数直接将上一次的修改抛弃
标签管理
git tag <tag_name> 在当前分支最新提交上建立标签;
git tag <tag_name> <commit_id> 为给定id 的commit打上标签;
git tag 查看本地标签;
git tag -d tag_name 删除tag_name标签;
git show <tag> 查看tag信息;
git push origin tag_name 将tag_name标签送到远仓;
git push origin --tags 一次性推送全部尚未推送到远程的本地标签;
git push origin :refs/tags/v0.9 或 git push origin --delete tag v9.0 删除origin远仓的v0.9标签;
分支管理
git branch [-avv] 查看分支信息;
git checkout branch_name 切换到branch_name分支;
git checkout -b branch_name 创建并切换到branch_name分支;
git branch -d branch_name 删除branch_name分支;
git push origin branch_name 将当前分支推送到origin远程仓库的branch_name分支;
慎用:git merge <branch>合并某分支到当前分支,加--no-ff取消快速合并,即git merge --no-ff -m <massage> 。这个分支合并操作可能会产生冲突(如果你在某个版本点建了new分支之后两个分支都提交了新的commit),需要手动解决这些冲突以继续合并,所以建了new分支后尽量在new分支工作,原分支(你打算要把new分支工作完成后合并回去的)不要提交新的commit ,new分支上工作完成确定无误了就可以顺利合并;
关于本地分支与远仓分支的关联,在下面
——————————————————————————
git stash 将现在的修改暂存起来,去紧急修改之前的bug;
git stash list 查看应急暂存的修改;
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了;
git branch -avv 查看本地和远程仓库的分支信息及最新提交信息,以及本地和远程分支的关联;
git checkout -b dev -- track origin/dev 拉取远仓的dev分支到本地新建的dev分支,并切换到dev分支,同时建立本地dev分支和远仓dev分支的关联;
git branch --set-upstream dev origin/dev 建立本地dev分支和远仓dev分支的关联;
git branch --set-upstream-to origin/branch_name建立本地当前分支和远仓branch_name分支的关联;
git push origin :branch 或 git push origin --delete <branch>删除origin远仓的branch分支;
;
git show <commit-hashId> 便可以显示某次提交的修改内容
同样 git show <commit-hashId> filename 可以显示某次提交的某个内容的修改信息。
git commit --amend提交为上一个commit的修复
git blame <file> 查看file文件每行的修改人
撤销最新commit
git reset HEAD~1 文件保留修改,版本库回退到上个commit
git reset --soft文件保留修改,版本库最新commit送回staged area并同时回退到上个commit
;
比较两个分支的差异
1.查看 dev 有,而 master 中没有的:
git log dev ^master
¡ 1
2.同理查看 master 中有,而 dev 中没有的内容:
git log master ^dev
查看 dev 中比 master 中多提交了哪些内容:
git log master..dev
n 1
注意,列出来的是两个点后边(此处即dev)多提交的内容。同理,想知道 master 比 dev 多提交了什么:
git log dev..master
3.不知道谁提交的多谁提交的少,单纯想知道有什么不一样:
git log dev...master
4.在上述情况下,再显示出每个提交是在哪个分支上:
git log --left-right dev...master