注:本文不适合新手,只是方便查阅。新手可以参考廖雪峰的教程:[www.liaoxuefeng.com/wiki/896043…]
git log
参数太多了,又很好用,这里放上参数大全:[www.cnblogs.com/bellkosmos/…]
方便起见,本文举例文件名为text.txt。若实际中文件名中有空格,请用引号包围。
首先了解下git维护的三块内容:工作区-->缓存区stage-->当前版本HEAD。
git config --global user.name "cm"
git config --global user.email "@example.com"
git init
git add text.txt
,强制添加(ignore的也行):git add -f text.txt
git add .
git commit -m "一些些说明"
,每次提交都有commit.idgit rm text.txt
-->提交到HEADgit commit -m "一些些说明"
git status
git log
(版本回退之后,这里的提交日志也会减少哦),精简版内容:git log --pretty=online
,带分支合并图内容--graph
git log -1
git rebase
git reflog
(要是遇到什么奇奇怪怪的东西,按Q就退出了)git checkout -- text.txt
(本质是从HEAD拷贝了一份新的text.txt替换。不影响缓存区内容)git add text.txt
命令前):git reset HEAD text.txt
git reset --hard HEAD^
(HEAD^
表示上个版本,HEAD^^
表示上上个版本,以此类推。也可可以简写:HEAD~100
表示100个^
)git reset --hard <commit.id>
根据commit.id
选择想到达的版本git log
查看版本。回退完后悔了想前进,可以用git reflog
查看commit.id再前进;操作完,因为工作区和HEAD同步了嘛,所以缓存区很“干净git diff HEAD -- text.txt
git branch dev
git switch dev
或者git checkout dev
git switch -c dev
或者git checkout -b dev
git checkout -b dev origin/dev
git branch
(列出了所有分支,标记*为当前分支),添加-vv
参数能看到关联的远程分支git merge dev
。git merge --no-off dev
,因为要进行一次commit,所以一般加上-m
参数。git status
中看到冲突了。手动修改后提交至HEAD。提交后可以用git log --graph
看到分支合并图。结合上条例子,dev不变。git branch -d dev
,强行删除没被合并的分支,把小d换成大Dgit stash
git stash list
git stash apply
:恢复工作现场,但不删除stash内容不删除,需要通过git stash drop
删除stash。可以查看git stash list
后逐条恢复,如git stash apply stash@{0}
git stash pop
:恢复并删除stashgit cherry-pick <commit.id>
git remote add <远程仓库名> <远程仓库地址>
(一般远程仓库名取为origin)git push origin master
, master是本地分支名,push时git会把远程同名分支关联起来,所以远程分支名也是master。 第一次带上-u
参数,以后操作就方便了,只需要在当前分支下git push
就行了,可用git branch -vv
查看默认推送情况。(可能会出现SSH警告,输入yes就好了)git clone <远程仓库地址>
(不需要本地额外建仓库,直接推就行了)git remote
,带上-v
参数显示更详细的信息git pull origin master
,相当于git fetch origin/master
+git merge origin/master
;git pull
是拉取所有分支。 (如果出现no track information提示,可以先用git branch --set-upstream-to <branch-name> origin/<branch-name>
建议本地与远程分支的链接)。git remote rm origin
git tag <标签名>
,默认标签是打在最新一次的提交上的git tag <标签名> <commit.id>
git tag
,标签是按字母排序的git show <标签名>
git tag -a <标签名> -m "一些些说明" <commit.id>
git tag -d <标签名>
git push origin <标签名>
git push origin --tags
git tag -d <标签名>
-->再删远程git push origin :refs/tags/<标签名>
git check-ignore -v <文件名>
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
HEAD改变后会直接导致其它两块内容的改变。 工作区改变后需要一步步保存到HEAD。
master是主分支;HEAD指向的是当前分支。注意这两者的关系。所有的操作默认在当前分支下进行。
push时本地和远程分支默认需要同名,git也会自动追踪远程同名分支。特地改成不同名会很麻烦,不建议。