1. 创建bare库
git init -bare xxx.git
1) bare库不会存储working tree(即仅有配置文件),容易共享,否则容易提交时发生冲突
2) 库用.git结束只是一种惯例
2. clone it
git clone repo/xxx.git ./working
1)从版本库中clone出xxx.git,到本地目录working
3. add/commit/push
push就是把本地的修改提交到版本库
默认版本库的简写是origin
4. 回退到某一个版本
git reset --soft HEAD^1 //向前回退一个版本(本地文件还没修改,只是修改 git中的head指针,可以用来缩短版本路径)
git reset --hard HEAD^1 //向前回退一个版本(文件修改将被丢弃,修改 git中的head指针)
如果仅仅是取回老版本,不影响仓库,可以用checkout
git checkout commitid ./ //导出当前的commitid,注意checkout会清空working path中的修改,不可恢复
5. git要在不同机器上share,需要有ssh sever,git依赖ssh共享
===========================================================================================================
1. a.txt 没有 add 想撤销修改
git checkout -- a.txt
2. 和远程库同步
git fetch origin
git merge origin/master
A. 上述两个命令都是缺省了当前分支,比如当前分支是master,则第一个命令的完全形式是
git fetch origin master
B. 如果有其他人修改远程库,上述命令可能出发一次merge,如果没有冲突直接merge即可
3. 查看本地分支
git branch
以*号开头的是当前分支
4. 查看远端分支
git branch -r
5. 查看工作目录的修改
git diff
6. 查看被缓存的修改(用了add命令的)
git diff --cached
============================================================================================================
git branch -a 查看分支,远程分支用红色表示(如果支持颜色)git ls - remote -- tags origin查看远程tags git show [tagname] 显示tags信息
1.创建本地分支
3. 推送branch 转自
在分支上执行: git push origin bfa.x.y
注意:最后必须是分支名称,master可以看作是一个特殊分支
master其实是一个“refspec”,正常的“refspec”的形式为”+<src>:<dst>”,冒号前表示local branch的名字,冒号后表示remote repository下 branch的名字。
注意,如果你省略了<dst>,git就认为你想push到remote repository下和local branch相同名字的branch。听起来有点拗口,再解释下,push是怎么个push法,
就是把本地branch指向的commit push到remote repository下的branch,比如
$git push origin master:master (在local repository中找到名字为master的branch,使用它去更新remote repository下名字为master的branch,
如果remote repository下不存在名字是master的branch,那么新建一个)
$git push origin master (省略了<dst>,等价于“git push origin master:master”)
$git push origin master:refs/for/mybranch (在local repository中找到名字为master的branch,用他去更新remote repository下面名字为mybranch的branch)
$git push origin HEAD:refs/for/mybranch (HEAD指向当前工作的branch,master不一定指向当前工作的branch,所以我觉得用HEAD还比master好些)
$git push origin :mybranch (再origin repository里面查找mybranch,删除它。用一个空的去更新它,就相当于删除了)
=========================================================================================================
转载源
git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相仿。
$ git push <远程主机名> <本地分支名>:<远程分支名>
注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。
如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
$ git push origin master
上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
$ git push origin :master
# 等同于
$ git push origin --delete master
上面命令表示删除origin主机的master分支。
$git log --stat
显示每次提交时修改文件的列表
$git log --graph --pretty=format:'%Cred%h%Creset @%C(yellow)%d%Creset %n Author: %cn %ce %n Date: %cd %Cblue(%cr)%Creset %n %n Commit subject: %Cgreen%s%Creset %n'
修改输出格式,很花哨...
$git config --global alias.lg "log --graph --pretty=format:'%Cred%H%Creset @%C(yellow)%d%Creset %n Author: %cn %ce %n Date: %cd %Cblue(%cr)%Creset %n %n Commit subject: %Cgreen%s%Creset %n'"
增加别名lg,以后直接输出git lg 就相当于输出上面一长串
同步远程库到本地,但不修改本地工作目录
git fetch
然后单个文件
git checkout origin/master -- filepath
放弃本地修改,强制同步远程分支
git fetch --all
git reset --hard origin/[分支名]
这种方式不会有merge的过程
===================================================================
远程已经删除了分支,但是branch -a 依然显示有该分支
git remote show origin
可以看到有些分支已经不存在,按照提示用
git remote prune origin
删除这些分支