由于git的使用通常伴随着linux的常用指令,因此下面记得也有linux常用的操作,如果学习git确实应该也学习下linux
- mkdir 文件名 创建目录
- cd 目录 用来定位目录,这一点觉得比win要好很多,有时候一行代码就能到达。注意目录之间的分割用/既是和问号在一起的那个键。我自己常常分不清/和\特来声明一下。
- ls 显示当前目录下的文件夹。
- ls -ah 显示包括隐藏目录
- pwd 显示当前目录
- git init 把这个目录变成git可以管理的仓库。
- git add 文件名 把文件添加到仓库
- git commit 把文件提交到仓库
- git commit 相当于快照。
- git commit -m "提交声明"
注意,git commit 可以一次多次提交很多文件,故可以进行以下的操作
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."**
- git status 用来查看当前仓库的状态
- git diff 查看difference
- git log 进行查看历史记录(已经commit)
- 显示的是从最近到最远
- 如果嫌乱可以 git log --pretty=oneline
- git reset 回退版本
-git reset --hard HEAD HEAD表示当前版本,而HEAD表示上一个版本,同理HEAD^表示上上个版本,HEAD~100,是往上一百个版本的意思,也可以git reset --hard 版本号的前几位。git reflog 用来记录每一次的命令。同样可以查询版本号,以进行恢复。
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
- 使用git diff HEAD -- 文件名 查看工作区和版本库里面最新的区别
- git checkout -- 文件名 在提交之前可以使文件恢复到上一个阶段,如果是还没有添加到版本库的暂存区,即是修改后还没有放进暂存区,现在撤销就可以和版本库一样,如果是已经添加到版本库,又做了修改现在撤销修改就可以回到添加到暂存区后的状态注意只能恢复一次
- 如果是修改后还git add 到暂存区了,可以这样做,git reset HEAD 文件名 把暂存区的修改回退到工作区,然后再用git checkout -- 文件名 丢弃工作区的修改。
- 删除功能已经add的文件如果被删除了,如果你也想删除,使用git rm 文件名 然后commit, 如果是误删想要恢复,可以git checkout -- 文件名
- github常用命令
- ssh-krygen -t rsa -C "邮箱地址" 在用户主目录下看有没有.ssh目录,如果没有,执行上面命令
- git push origin master 推送到github
第一次推送用git push -u origin master
以后用git push origin master - 从远端复制 git clone git@github.com:账号名字/仓库名字.git
- git branch branchname 创建分支
- git checkout branchname 切换分支
- git checkout -b file name 创建name分支并且切换到name分支
- git branch 列出所有分支,并且在当前分支做标记。
- git checkout branchname 切换分支
- git merge branchname 快速合并分支内容到当前分支。需是已经commit过的
- git branch -d branchname 删除所需要删除的分支
- 如果遇到了分支和主分支都修改会遇到合并冲突的提示,这时打开冲突文件,进行修改再add commit即可
- git log --graph --pretty=oneline --abbrev-commit 以图象显示分支及其运行情况。
-
git merge --no-ff -m "comit" brachname 使用递归战略进行合并,会在log里面看到分支情况,而在fast forward 中是看不出合并的commit是在这种模式下合并会生成一个commit,而-m就是描述这种commit的
- git stash 用来储藏当前的工作现场,等以后恢复现场后继续工作
- 工作区的恢复可以用git stash apply 进行恢复,但是并不删除stash,需要用git stash drop来删除stash内容
- 同时恢复也有另一种方式,git stash pop,既是恢复的时候把stash的内容删除。
- 强行删除未合并的分支 git branch -D branch-name
- 查看远程仓库的信息 git remote
详细信息 git remote -v - git push origin branchname 推送其他分支
- dev分支是开发分支,团队所有成员都要在上面工作,当你的另一个小伙伴从远程库clone时,默认情况下只能看到本地的master分支,如果这位小伙伴要在dev上开发,就必须创建远程origin的dev分支到本地,git checkout -b dev origin/dev
- 从本地创建和远程分支对应的分支 git checkout -b branchname origin/branchname
- 从远程抓取分支 git pull
- 使用git tag 标签名 在需要打分支的分支进行打标签,默认标签是打在最新提交的commit上的。
- 如果是忘了打标签,可以找到历史提交的commit id然后打上就可以了,git log --pretty=oneline --abbrev-commit 然后git tag 标签 commit id
- 注意标签不是按时间顺序列出,而是按字母进行排序,git show tagname
- git tag 查看所有标签
- 创建带有说明的标签 用-a指定标签名,-m指定说明文字 git tag -a tagname -m "message" commit id
- 密钥暂时空出
- 删除标签 git tag -d tagname
- 推送某个标签到远程 git push origin tagname
- git push origin --tags 一次性推送全部尚未推送到远程的本地标签
- 如果想删除已经推送到远程的标签 先从本地删除,然后从远程删除,命令也是push git push origin :refs/tags/tagname
- 如何参加开源项目,可以在GitHub上fork就在克隆一个仓库,然从自己的clone git clone git@github.com:usersname/repositoriesname.git **一定要从自己的账号下克隆,这样你才能修改。平时的修改你可以往自己的仓库里面修改,如果你想官方接受你的修改,可以在github上发起一个pull request。
- git 的日常配置,使用git config --global color.ui true
- 配置别名 git config --global alias.st status 既是st以后表示成status
先列举几种“偷懒”好方法
ststatuscheckout
co
cicommitbranch
br
git reset HEAD file 可以把暂存区的修改撤销掉(unstage)重新放回工作区这样可以配置一个别名git config --global alias.unstage 'reset HEAD'
把lg配置成了:
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"
- --global参数是全局参数,这些命令可以在所有的git仓库下使用
注意,这些配置文件都在.git/config 中的[alias]后面,要删除别名,把对应行删除就好了
'''
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@github.com:michaelliao/learngit.git
fetch = +refs/heads/:refs/remotes/origin/
[branch "master"]
remote = origin
merge = refs/heads/master
[alias]
last = log -1
'''
而当前用户的git配置文件放在用户主目录下的一个隐藏文件.gitconfig中
'''
$ cat .gitconfig
[alias]
co = checkout
ci = commit
br = branch
st = status
[user]
name = Your Name
email = your@email.com
'''
配置别名也可以直接修改这个文件,如果改错了,可以删除文件重新进行命令配置 - git服务器暂时不展开
第一次结束线