Git常用命令
Git是一款分布式版本控制系统,由Linux之父Linus设计完成。Git的流行从github的火热程度可见一斑。
创建本地仓库
从Git进入某个恰当的目录下,执行git init
命令,将该目录初始化为一个空的仓库。
git add <file>
添加文件,可反复多次使用,添加多个文件;git rm <file>
删除文件;git commit
将添加的文件提交到仓库,通常加-m "message for commit"
,进行说明;git status
给出当前添加与提交的状态,经常会用到;git diff <file>
查看文件<file>
被做了哪些修改;
版本穿梭
Git可以很方便的帮助开发者回退或者前进项目版本。
git log
查看提交历史,加--pretty=oneline
将提交信息压缩为一行显示,加--graph
可以查看分支合并图,实际上,使用gitk
命令查看更为直观全面;git reflog
查看命令历史,可以查找到要回到的未来commit id
;git reset --hard commid_id
可控制版本来回穿梭,HEAD
指当前版本,HEAD^
和HEAD^^
分别为上一版本和上上一版本,而上10个版本为HEAD~10
;git checkout -- <file>
放弃对为添加的文件的修改;git reset HEAD <file>
放弃对已添加、但未提交的文件的修改;- 若文件修改已提交,欲撤销提交,可以
git reset --hard commid_id
;
远程仓库
通过ssh-keygen -t rsa -C "email@example.com"
生成主机的秘钥,并将公钥(id_rsa.pub
)拷贝到远端的KEY
里,这样就具备了pull
和push
远端代码的权限。
- 关联一个远程仓库
git remote add origin git@server_name:path/repo_name.git
,这里的git@server_name:path/repo_name.git
还可以为https://server_name/path/repo_name.git
,只不过采用不同的协议; - 首次推送
git push -u origin master
,后续均git push origin master
; - 克隆远程仓库
git clone git@server_name:path/repo_name.git
;
分支管理
Git可以快速而方便的在各分支间自由切换与合并。
git branch
查看分支;git branch <branch_name>
创建新分支<branch_name>
;git branch -d <branch_name>
删除<branch_name>
分支;git checkout <branch_name>
将当前工作切换到<branch_name>
分支上;git checkout -b <branch_name>
创建新分支、并切换到该分支上;git merge <branch_name>
将<branch_name>
分支合并到当前分支,该合并采用fast-forward
,加--no-ff
则会禁用fast-forward
合并,这时将会生成一个commit
:git merge --no-ff -m "message for merge" <branch_name>
;- 当手头工作还未完成,但必须终止当前工作转而进行其他工作时,可执行
git stash
保留当前工作现场,然后git stash pop
恢复现场; - 丢弃一个没有被合并过的分支,可以通过
git branch -D <branch_name>
强行删除; - 查看远程库信息,使用
git remote -v
; - 本地新建的分支如果不推送到远程,对其他人就是不可见的,从本地推送分支,使用
git push origin <branch-name>
,如果推送失败,先用git pull
抓取远程的最新提交; - 删除远程分支,首先删除本地分支
git branch -d <branch_name>
,然后执行git push origin :<branch_name>
将远程仓库对应的分支删除; - 在本地创建和远程分支对应的分支,使用
git checkout -b <branch_name> origin/<branch-name>
,本地和远程分支的名称最好一致; - 建立本地分支和远程分支的关联,使用
git branch --set-upstream <branch_name> origin/<branch_name>
; - 从远程抓取分支,使用
git pull
,如果有冲突,要先处理冲突,合并master
分支前,请先拉取最新的代码。
标签管理
在Git中,标签通常用来标识版本信息,它与某一时刻的commit id
相关联。
git tag <tagname>
用于创建一个新的标签,默认在HEAD上,也可以指定commit id
:git tag <tagname> commit_id
;git tag -a <tagname> -m "message for tag"
用于指定标签信息,git tag -s <tagname> -m "message for tag"
用于PGP签名标签;git tag
查看所有标签;git show <tagname>
查看该标签的详细信息;git push origin <tagname>
用于将本地<tagname>
标签推送到远程仓库,git push origin --tags
将本地所有标签推送到远程仓库;git tag -d <tagname>
在本地删除标签;- 若某一标签已
push
到远程仓库,则需要首先在本地删除该标签,然后,执行git push origin :refs/tags/<tagname>
删除远程标签;
反悔
撤回已push到远程仓库的提交
假设当前工作在dev分支上,刚刚push了一次更改到远程仓库,但发现提交不符合要求,需要撤回,怎么办?
说明:此方法仅适用于当前无其他人提交更新。
git reset --hard <版本号>
git push origin dev --force
修改已push到远程仓库的日志
假设当前工作在dev分支上,刚刚提交了一条带有 this is a wrong message
的日志,并且 push
到了远程仓库,但是 push
后却发现日志写错了,应当为 this is a right message
,怎么办呢?抓紧!
修改日志
git commit --amend
会弹出刚刚
push
上去的那条错误的日志,修改成正确的,保存。
如vim
一样执行插入和保存。强制提交
git push --force-with-lease origin dev
亲测搞定!
请确保没有其他人在你要修改的提交后做了提交。