基本命令

git clone git仓库地址
git fetch

把远程信息同步到本地库,但不merge

git pull

把远程信息同步到本地库,merge

git pull origin master
git branch 

查看本地分支

git branch -a

查看本地和远程分支

git add .

将所有修改文件加入本地库

git commit 

将add的文件提交到本地库

git push 

将本地库推送到远程库

git checkout branchname

切换到本地分支,若没有则新建

git remote -v

git查看远程仓库地址

git help # 显示command的help
git show # 显示某次提交的内容 git show $id
git co – # 抛弃工作区修改
git co . # 抛弃工作区修改
git add # 将工作文件修改提交到本地暂存区
git add . # 将所有修改过的工作文件提交暂存区
git rm # 从版本库中删除文件
git rm –cached # 从版本库中删除文件,但不删除文件
git reset # 从暂存区恢复到工作文件
git reset – . # 从暂存区恢复到工作文件
git reset –hard # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改
git ci git ci . git ci -a # 将git add, git rm和git ci等操作都合并在一起做                                    git ci -am “some comments”

git ci –amend # 修改最后一次提交记录
git revert

本地初始化git

需要在https://github.com/用户名上面新建repository,再把代码上传。

git init  
git add .
git commit -a -m "add README"
git remote add origin "https://github.com/mitsuhide1992/gitdemo.git"
注意,之前需要加入ssh-key到github上
git push -u origin master

在本地新建repository的方法暂时没找到

Git 获取远程分支

命令行:
运行 git fetch,可以将远程分支信息获取到本地,
再运行

git checkout -b local-branchname origin/remote_branchname  

举例:

 git checkout -b ly-devel origin/reload

就可以将远程分支映射到本地命名为local-branchname 的一分支。

修改git用户名密码

git config –global user.name “Your Name”
git config –global user.email you@example.com

查看git配置

git config –list

http://www.cnblogs.com/cspku/articles/Git_cmds.html

windows下的git命令行建立远程仓库需要openssh,略不方便:
http://blog.csdn.net/haomcu/article/details/8174805

删除远端文件

场景:不小心把.gitignore中不想提交被忽略的文件提交了,但是本地还不能删除。

删除文件夹:

git rm -r --cached .virtualenvs/djangodev/include/

删除文件:

git rm -r --cached .virtualenvs/djangodev/.Python

之后再

git push origin master

git忽略某些路径和文件

.git/info/exclude中修改:

output/
log/
smart-api-gateway-accessor/target/
*.iml
.idea

.gitignore中修改:

*.cab
*.msi
*.msm
*.msp
.idea/
node_modules/
app/bower_components

注意:已经track的文件不会被忽略,需要删除git缓存,然后提交才能忽略:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

见:
http://www.ifeegoo.com/git-code-management-dot-gitignore-file-has-no-effect-solution.html

git中忽略某文件夹,但不忽略文件夹下的子文件夹

场景:只想上传.virtualenvs/djangodev/lib/python3.5/site-packages/文件夹,但是.virtualenvs路径下其他文件夹全忽略,怎么做到?

网上写的是:

/node_modules/*
!/node_modules/layer/layer.js

注意写法 要忽略的文件夹一定要结尾 /* ,否则不忽略规则将无法生效

但是这个只对一层嵌套的文件夹管用,多层嵌套需要这么写:

/.virtualenvs/djangodev/.Python
/.virtualenvs/djangodev/*.json
/.virtualenvs/djangodev/*/*/*
/.virtualenvs/djangodev/bin/
/.virtualenvs/djangodev/include/
!/.virtualenvs/djangodev/lib/python3.5/site-packages/

git change-id

git log 查看下更新的是否生成了 change-id, 否则需要拷贝commit-msg 到当前.git/hook目录下, git log (仅针对持续集成服务器需要根据change-id来分辨提交id的情况)

在icode上废弃了评审之后,再想push,是不是要把changeid去掉
今天 15:03

是的,重新commit –amend -m “new message” 可以达到更换changeid的效果

Git报错Could not execute editor

error: There was a problem with the editor 'vi'.

是因为git中没有绑定vim

git config --global core.editor "/usr/bin/vim"

git将本地更改提交到远端某个分支

远端分支在git页面上创建,本地分支在修改后,需要提交到远端分支。

命令格式:

git push origin 本地分支:远端分支

如何查看远端分支:

git branch -r

结果会是下面这种:

origin/bugfix/dqc_bugfix_lc
origin/bugfix/falconWarn

去掉origin/,后面的就是远程分支名,所以提交时:

git push origin master:bugfix/falconWarn

然后需要在git页面上提交合并请求

git远端分支应用

首先clone

git clone git@github.com:mitsuhide1992/polo.git

在远端创建分支,如果本地有experiment分支,等价于把本地的experiment分支提交到远端作为experiment分支。如果本地没有experiment分支,则报错,提交失败。

git push origin experiment

上面这条命令等价于

git push origin experiment:experiment

把本地experiment分支提交到远端作为extra分支

git push origin experiment:extra

把本地head提交到远端作为kknd分支

git push origin head:kknd

HEAD(大写)是”current branch”(当下的分支)。当用git checkout切换分支的时候,HEAD 修订版本重新指向新的分支。有的时候HEAD会指向一个没有分支名字的修订版本,这种情况叫”detached HEAD“

head(小写)是commit对象的引用,每个head都有一个名字(分支名字或者标签名字等等),但是默认情况下,每个叫master的repository都会有一个head, 一个repository可以包含任意数量的head。在任何时候,只要这个head被选择成为”current head”,那么这个head就成了HEAD,总是大写

这里应该是指当前活跃分支。

远端分支可以有多级

git push origin head:tib/klo

删除远端分支

git push origin :refs/heads/tib/klo
git push origin :refs/heads/kknd

把远端origin/extra分支下载下来作为extra分支

git checkout -b extra origin/extra

把本地的master分支merge到当前分支

git merge master

注意,合并远端分支,只能在github页面上pull request后合并,合并之前需要在本地检测冲突,没有冲突才能合并。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐