git config --global core.email "xufeng.zhang@10.4.29.111" 指定全局邮箱(当前用户)
git config --global core.editor vim 指定全局的编辑器为vim
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --list
git diff README.md 列出当前文件的未跟踪版本与最近一次添加到版本库的版本的区别
git diff --staged README.md 列出已暂存版本与最近一次添加到版本库的版本的区别
git commit 会进入vim模式,用户可在里面输入此次提交的内容信息,并且注释部分列出了上次git status的信息,保存退出后注释部分不会被提交
git commit -m "信息" 输入此次提交的信息
git commit -a -m "信息" 不使用git add,直接一次性将上次跟踪的文件提交到版本库
git rm test.txt 将test.txt文件移除,该文件不能为被修改未暂存或已暂存的文件
git rm --cached test.txt 将test.txt从暂存中移除,并且将其从版本库中移除使其成为一个未跟踪的文件,但是本地文件未被删除
git rm -f test.txt 将test.txt强制从版本库和暂存中移除,并且将删除这个动作暂存起来(即git add之后),只有在commit之后才完全删除
对于处于删除的处于暂存状态的文件,首先使用git reset HEAD test.txt,然后使用git checkout -- test.txt则可以恢复最近一次跟踪的状态
git mv test.txt readme.txt 修改test.txt文件的名称为readme.txt
git log -p 显示每次修改提交文件的差异
git log -1 显示最新一次修改提交的文件的差异
git log --pretty=oneline 简化日志,只显示一行
git log --pretty=short 以简短的形式显示日志
git log --pretty=full 以正常版显示日志
git log --pretty=fuller 显示完整版的日志,其中包括文件的修改变化部分
git log --author=张旭峰 显示作者为张旭峰的提交
git log --grep=测试 显示说明中包含测试的提交
git log --since=2.weeks 显示指定时间之后的提交(2周以前)
git log --after=2.weeks 同since
git log --until="2016-11-04" 截止到2016-11-04之前的日志
git log --before="2016-11-04" 同until
git log --committer=张旭峰 提交者为张旭峰的日志
git commit --amend 将当前暂存区域的文件提交并与上一次提交合并,并且将此次提交的说明替换上次提交的说明
需要注意,如果上次提交之后修改了文件,并将其添加到了暂存区,那么其也会被一起合并到上次提交
git reset HEAD test.txt 将test.txt取消暂存,并且如果未暂存区域的该文件有修改,就以未暂存区域的该文件为准
git checkout -- test.txt 对于已修改未暂存的文件,将其回滚到最近一次提交时的状态
git remote 查看当前配置了哪些远程仓库,默认的远程仓库为origin
git remote -v 查看当前配置了哪些远程仓库,并且带上仓库地址
git remote add xufeng git://oschina.net/xufeng.git 在添加一个名为xufeng的远程仓库
git fetch 从远程拉取代码到本地,但是不会自动合并当前分支
git pull 从远程拉取代码到本地,但是会将当前分支代码自动合并
git push [remote-name] [branch-name] 将当前代码推送到指定仓库的指定分支
git remote show [remote-name] 显示远程某个分支的详细信息,主要包含远程的分支和本地的分支,以及本地与远程分支的对应信息
git remote rename orgName newName 重命名远程的仓库名
git tag 显示所有的标签
git tag -l v1.0.* 显示标签名前缀为v1.0.的标签
git tag -a v1.0.0 -m "初始版本" 创建一个名为v1.0.0的tag
git show v1.0.0 显示v1.0.0的标签内容,其中包含各个提交的详细信息
git tag -s v1.0.0 -m "签署标签" 当拥有自己的私钥时签署GPG标签的命令
git tav -v v1.0.0 验证签署标签
git tag v1.0.0 创建一个轻量级标签v1.0.0
git tag v1.0.0 b260b7f1f83437f6a07ac177908f36734484d5b5 -m "初次提交" 在指定的提交处创建tag,并添加描述信息
git push origin [tagname] 将指定标签名的标签推送到服务器上去,默认情况下标签是不会推送到服务器上的
git push origin --tag 将本地所有的标签都推送到服务器上
git branch testing 创建一个testing分支
git checkout testing 切换到testing分支
git checkout -b testing 创建testing分支并切换到该分支
git merge testing 将testing分支的代码合并到当前分支,如果合并过程产生冲突,那么冲突标记的上半部分(HEAD部分)表示你当前所处的分支的代码
下半部分表示你合并过来的分支的代码
git branch -d testing 删除testing分支,注意这里需要当前分支已经完全merge了testing分支
git branch -D testing 删除testing分支,无论testing分支是否有内容未合并到当前分支
git branch -v 显示当前所有的分支,并且显示相应的最新的提交信息
git branch --merge 查看哪些分支并入到了当前分支,即哪些分支是当前分支的直接上游
git branch --no-merge 查看哪些分支还未并入到当前分支
git checkout -b [分支名] [远程名]/[分支名] 创建一个分支并切换到该分支,将该分支与指定的远程分支对应起来
git checkout --track [远程名]/[分支名] 创建一个与指定远程分支同名的分支,切换到该分支,并将该分支与远程分支对应起来
git push [远程名] :[分支名] 删除指定的远程分支,这里注意在冒号前面有一个空格
git fetch origin 将远程的当前分支拉下来,但是并未合到本地的当前分支中,该命令一般和下面一条命令合用
git merge origin/serverfix 将(拉下来的)本地的serverfix分支合到当前分支
git checkout --track origin/serverfix 在本地创建serverfix分支,并将其与远程的serverfix分支关联起来
git push --set-upstream origin test 将当前分支指定与远程的origin/test分支关联起来
git merge test 将test分支与当前分支合并,其合并原理是找到当前分支和test的共同祖先,并且将当前分支,test分支以及共同祖先进行简单的三方合并
git rebase master 将当前分支合并到master分支,其合并原理是将当前分支打一个补丁,并且在当前分支和master分支的共同祖先去往master的线路的第一个节点(共同祖先的下一个节点)处将打的当前分支的补丁补进去,并且去>往master分支的后续节点都会应用该补丁,直到补到master所在的节点,其结果就是在master的下游直接产生了一个节点,最后再回到master分支将rebase的分支合并过来。这样做的目的主要是为rebase的分支产生更加清晰的提交记录
git rebase --onto master server client 取出client分支,找出client分支和server分支的共同祖先之后的变化,然后把它们在master上重演一遍(重演之后需要执行git checkout master和git merge client才能将重演之后的代码
合并到master分支)
git rebase [主分支] [特性分支] 如git rebase master server,将server分支在master分支上进行重演
说明:衍合操作只能在你本地所独有的分支上进行,因为如果分支一旦发布出去,比如远程有两个分支,另外有人在其中一个分支上工作,而此时你又把该分支给衍合到了主干分支,那么在该分支上工作的人最后提交代码时也不得不进行
一次衍合操作
ssh-keygen 生成ssh key