社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
git 作为我们常用的版本管理工具,提供了丰富的命令操作,这里记录一下开发中我们常用的命令及使用技巧,以备不时之需。
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
pwd
:用于显示当前目录.BoBoMEedeMacBook-Pro:RxJavaLearn bobomee$ pwd
/Users/bobomee/Desktop/rx/RxJavaLearn
git reflog
:查看命令历史,commit id
是提交的id,可以回到相应的版本$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file
git checkout -- file
:撤销file的修改到最近一次add/commit
的状态,git status 说明很详细 ,同时,如果误删文件,用此命令可以恢复$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
git reset HEAD file
:撤销暂存区的修改(unstage),重新放回工作区.其中HEAD
,表示最新的版本$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: readme.txt
#
本地与远程库使用ssh加密,需要配置SSH Key
。
通过如下命令,查看是否存在id_rsa.pub
$ ls -al ~/.ssh
如果没有的话,通过如下命令来生成
$ ssh-keygen -t rsa -C "email@example.com"
如果有的话,则使用如下命令来查看
$ cd ~/.ssh
$ cat id_rsa.pub
将SSH添加到远程库后,使用如下命令来测试是否可用
$ ssh -T git@github.com
与远程仓库关联
$ git remote add origin git@github.com:BoBoMEe/bobomee.github.io.git
移除远程仓库
$ git remote rm origin
查看远程仓库
$ git remote -v
推送到远程库
$ git push origin master
第一次使用,使用参数u
与远程仓库联系起来
$ git push -u origin master
常用命令如下:
$ git branch -a// 查看分支
$ git branch <name> //创建分支
$ git checkout <name> //切换分支
$ git checkout -b <name> //创建+切换分支
$ git merge <name> //合并某分支到当前分支
$ git branch -d <name> //删除分支
$ git branch -D <name> //强行删除,适用尚未merge的分支
$ git log --graph //看到分支合并图
//远程分支操作
$ git push origin --delete <branchName>//删除远程分支
git push origin --delete tag <tagname>//删除远程tag
--no-ff
模式,会在merge时生成一个新的commit,而fast forward(Default)
j没有,
用--no-ff
模式方便以后查看历史
$ git merge --no-ff -m "merge with no-ff" dev
master
稳定分支,仅用来发布新版本,平时不在上面干活
dev
开发分支,团队成员每个人都在自己到分支上工作,并merge到dev,开发完成合并到master,如下图所示
bug(fixbug)分支,紧急修复bug用,最终合并到master和dev,并删除,不推送到远程
预发布(release)分支,合并到master之前的测试版本,最终合并到dev和master,并删除
功能(feature)分支,用于新功能开发,最终合并到dev,并删除
比如正在dev分支进行开发,需要新建bug分支来修复bug,开发尚未完成,不好提交
此时需要用到stash
功能
// 把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git stash
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge
// 查看stash 列表
$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
//恢复stash的,并删除stash内容
$ git stash pop
# On branch dev
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: hello.py
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: readme.txt
#
Dropped refs/stash@{0} (f624f8e5f082f2df2bed8a4e09c12fd2943bdd40)
使用git stash apply
,stash内容并不删除,使用git stash drop
来删除
//恢复指定的stash
$ git stash apply stash@{0}
github上众多的开源项目都是用git来进行管理的,我们可以通过fork/pull request
来贡献开源,标准的操作流程中,我们需要注意以下一些地方。
$ git checkout --b fixbug
比如源仓库有更新时,最好使用rebase,这样提交pullrequest的时候不会产生多余的commit
如果上游仓库更新,这时候我们想要新的特性的时候,可以使用如下命令
$ git branch --set-upstream-to=<repo_name>/master master
如果是团队开发的话,一般都会在dev分支上干活,从远程库上clone下来后,在本地默认只会看到master分支
ps:命令查看
$ git branch
* master
所以必须在本地创建和远程分支对应的分支dev,并和远程关联。
$ git checkout -b dev origin/dev
在推送到远程库之前,pull的时候,如果出现no tracking information
,
则可以使用如下命令,建立本地分支和远程分支的关联
$ git branch --set-upstream-to=<repo_name>/master master
git别名就是git简写格式,比如
git st == git status //少写了好几个字母,而且防止写错
配置都在根目录下的.gitconfig
文件中,常用别名
[alias]
pl=pull
ps=push
co=checkout
cob=checkout -b
fp=fetch -p
ci=commit
st=status -sb
dt=difftool
cp=cherry-pick
ca=commit-a
br=branch
ba=branch -a
bd = branch -d
bD = branch -D
unstage = reset HEAD
last = log -1
ls=log—stat
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
plog = log --graph --pretty='format:%C(red)%d%C(reset) %C(yellow)%h%C(reset) %ar %C(green)%aN%C(reset) %s'
tlog = log --stat --since='1 Day Ago' --graph --pretty=oneline --abbrev-commit --date=relative
参考:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!