git常用命令
创建分支
查看分支,包括远程的
git branch -a
如果远程已经有了某个分支,使用git branch -a却查看不到,使用下命令刷新远程分支
git fetch -p
如果没有分支,需要新建分支 比如:从已有的分支创建新的分支(如从master分支),创建一个dev分支
git checkout -b dev
然后提交该分支到远程仓库
git push origin dev
切换分支,切换到dev上
git checkout dev
提交代码
在dev上正常提交
1. 添加修改的代码
git add .
或者逐个添加
git add xx.txt
2.提交到本地版本
git commit -m "描述"
3.推送远端前更新本地dev代码
git pull origin dev
4.推送到远端
git push origin dev
合并代码
dev工作完成,可以切换到master分支
git checkout master
把dev分支的内容合并到master上
git merge dev
(合并指定分支到当前分支)
删除dev分支
git branch -d dev
如果一个分支还没有被合并就要作废,需要使用
git branch -D dev
删除远程分支
git push origin --delete dev
删除文件
情况一:一是确实要从版本库中删除该文件,那就用命令git rm
删掉,并且git commit
git rm src/main/java/com/yunlu/app/web/UserAppController.java
情况二:删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本,参考撤销修改
$ git checkout -- src/main/java/com/yunlu/app/web/UserAppController.java
如果有删除的文件需要执行命令来删除被管理的目录
$ git rm -r --cached target(文件目录)
修改提交版本到另一个分支
把另一个本地分支的commit修改应用到当前分支。
git cherry-pick <commit id>
查看文件修改信息
git blame src/main/java/com/yunlu/app/web/CourseWebController.java
版本回退
$ git log --pretty=oneline
在Git中,用HEAD
表示当前版本,也就是最新的提交744.....
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
$ git reset --hard HEAD^
或者使用版本号
$ git reset --hard 744aaf0
版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
如果不记得版本号了使用git reflog
查看
撤销修改
情况一:如果是提交到暂缓去前发现了错误,只保留在工作区
$ git checkout -- src/main/java/com/yunlu/app/web/UserAppController.java
注意--左右有空格
或者使用git checkout . 撤销所有修改
命令git checkout -- XX
意思就是,把XX
文件在工作区的修改全部撤销,这里有两种情况:
一种是XX
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是XX
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
情况2:已经提交到暂缓区,但是还没有commit
$ git reset HEAD src/main/java/com/yunlu/app/web/UserAppController.java
使文件重新恢复工作区
再使用
$ git checkout -- src/main/java/com/yunlu/app/web/UserAppController.java
撤销工作区修改
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本
情况三:commit过了,从暂缓区提交到了版本库怎么办,参考版本回退
bug分支
情况:当前正在dev
上进行的工作还没有提交,但是需要在另一个分支修改bug,而且dev分支还不能提交,因为还没做完
Git提供了一个stash(stæʃ)
功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
1. $ git stash 储存现场
现在,用git status
查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。
首先确定要在哪个分支上修复bug,假定需要在master
分支上修复,就从master
创建临时分支
2. $ git checkout master 切换分支
3. $ git checkout -b issue-101 创建issue-101
分支
4. $ git add readme.txt 修改添加到暂缓区
5. $ git commit -m "fix bug 101" 提交
6. $ git checkout master 切换分支
7. $ git merge --no-ff -m "merged bug fix 101" issue-101 合并代码
8. $ git branch -d issue-101 删除bug分支
9. $ git checkout dev 回到之前分支
此时使用git status发现工作区是干净的
刚才的工作现场存到哪去了?
10. 用git stash list
命令看看:
![](data:image/png;base64,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)
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;
另一种方式是用git stash pop
,恢复的同时把stash内容也删了:
再用git stash list
查看,就看不到任何stash内容了:
你可以多次stash,恢复的时候,先用git stash list
查看,然后恢复指定的stash,用命令:
$ git stash apply stash@{0}
忽略特殊文件
在Git工作区的根目录下创建一个特殊的.gitignore
文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
![](data:image/png;base64,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)
![](data:image/png;base64,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)
但是有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,
原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是
无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
配置别名
有没有经常敲错命令?比如git status
?status
这个单词真心不好记。
如果敲git st
就表示git status
那就简单多了
$ git config --global alias.st status
当然还有别的命令可以简写,很多人都用co
表示checkout
,ci
表示commit
,br
表示branch
:
$ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch
甚至还有人丧心病狂地把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"
配置Git的时候,加上--global
是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
配置文件放哪了?每个仓库的Git配置文件都放在.git/config
文件中:
![](data:image/png;base64,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)
要删除别名,直接把对应的行删掉即可
而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig
中:
搭建git服务器
在Ubuntu上搭建git
第一步,安装git
:
$ sudo apt-get install git
第二步,创建一个
git
用户,用来运行git
服务:
$ sudo adduser git
第三步,创建证书登录:
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub
文件,把所有公钥导入到/home/git/.ssh/authorized_keys
文件里,一行一个。
第四步,初始化Git仓库:
先选定一个目录作为Git仓库,假定是/srv/sample.git(sample.git 是一个文件夹)
,在/srv
目录下输入命令
$ sudo git init --bare sample.git
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git
结尾。然后,把owner改为git
:
$ sudo chown -R git:git sample.git
第五步,禁用shell登录:
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd
文件完成。找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git
用户可以正常通过ssh使用git,但无法登录shell,因为我们为git
用户指定的git-shell
每次一登录就自动退出。
第六步,克隆远程仓库:
现在,可以通过git clone
命令克隆远程仓库了,在各自的电脑上运行:
$ git clone git@server:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.
剩下的推送就简单了。
管理公钥
如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys
文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。
这里我们不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。
管理权限
有很多不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。
这里我们也不介绍Gitolite了,不要把有限的生命浪费到权限斗争中