Git 常用操作命令
1.查看状态
git status — 查看工作区和缓存区的状态如果没有要提交的内容会出现以下:
on branch master 在master主分支上
nothing to commit,working directory clean 没有任何要提交的,工作区是干净的
git status -uno (仅仅查看已经add的文件)--no - Show no untracked files
2. 对比
git diff — 对比的是工作区和暂存区的差异
git diff <filename>— 对比的是工作区和暂存区的差异
git diff --cached(--staged) — 对比的是暂存区和版本区
git diff master( 这里写分支名字 ) — 对比的是工作区和版本库
3. 恢复还原工作区文件
git checkout commit_id <file.name> — 恢复指定文件
git checkout <file.name> — 工作区文件还原到版本区状态
4. 增加工作区更改到版本区
git add <filename> 增加修改到文件到缓存区
git add . —— 将所有新增修改添加到暂存区
git add . —— 将所有新增修改添加到暂存区,包括文件内容修改(modified)以及新文件(new);不包括被删除的文件(仅仅GIT Ver1.0);包括删除文件(Git Ver2.0)。
git add --ignore-removal —— 修改(modified)以及新文件(new),不包括删除的文件;
git add -u :它仅监控已经被add的文件(即tracked file),不会提交新文件(untracked file),(git add --update的缩写)但包括删除的文件;
git add -A :(git add --all的缩写),包括tracked file(修改文件),新文件,删除的文件;
5. 删除
git rm <file.name> — 把暂存区的文件删除( 工作区文件需删除,否则删除失败)
git rm --cache <file.name> — 把暂存区的文件删除(工作区保留)
git rm -f <file.name> — 把暂存区的文件和工作区的文件删除
6. 缓存区文件提交
git commit — 提交到版本区
git commit -m "注释内容" —— 直接添加版本注释
git commit -a -m "注释" —— 先将工作区内容添加到缓存区,然后提交至版本库(省略add操作)
git commit --amend — 撤销上次版本,与本次版本合并生成新的版本(误提交后重新对这次提交进行重新操作,合并一次新的提交方案)
git commit -m "change3" --amend
7. 恢复还原缓存区(回到commit前状态,包括已经缓存)
git reset HEAD <file.name> — 缓存区撤回到工作区
git reset --hard commit_id — 恢复制定版本
git reset --hard HEAD^ — 恢复到前面一个版本
git reset --hard HEAD~<num> — 恢复到前面第num个版本
git fetch --all 放弃本地更改,强制更新
git reset --hard origin/master
git reset --soft head(保留本地更改,add后的文件将不会被清除)
git reset --hard head(不保留本地更改,add后的文件将被清除)
git clean -xdf (删除没有add的文件,但是add后的文件不清除)
8. 暂存(在合并之前要保证没有未提交的文件,如果有未提交的文件但现在又不想提交,用stash命令暂存)
git stash #将本地修改暂时存储起来,包括未添加到暂存区的修改(unstaged changes)和添加到暂存区的修改(staged changes),但不包括工作目录中新的文件(untracked files)和忽略的文件(ignored files;
#-u或者--include-untracked可以stash untracked文件
#-a或者--all命令可以stash当前目录下的所有修改,
git stash save "message" #将本地修改暂时存储起来,并增加记录信息
git stash list #查看暂存的信息
git stash pop #应用最近一次暂存的内容,执行后该stash就不再stash list;
git stash apply stash@{1} #应用指定版本的暂存内容
git stash drop stash@{0} #移除存储
git stash clear #清空暂存栈
git stash show stash@{0}#查看指定stash和当前工作环境的diff,后面可以跟着stash名字;-p或--patch可以查看特定stash的全部diff;
git stash branch #创建一个新的分支,检出你储藏工作时的所处的提交,重新应用到的工作环境,如果成功,将会丢弃储藏!
9. 合并指定的几次提交(回退某个版本或在缓存状态下,合并commit)
git reset --hard 1d7444 #回退到某个版本
git cherry-pick 626335 #将某次commit的更改应用到当前版本
git cherry-pick …
10. 获取最新节点和更新改动到本地仓库
git fetch origin(仓库) master(branch)#获取远端仓库分支最新改动到本地仓库
git fetch origin(仓库) #获取远端仓库最新改动到本地仓库
git fetch ssh://192.168.8.32:29418/a/b/c refs/changes/65/7265/1 && git checkout FETCH_HEAD
git fetch ssh://192.168.8.32:29418/a/b/c refs/changes/65/7265/1 && git cherry-pick FETCH_HEAD
git fetch ssh://192.168.8.32:29418/a/b/c refs/changes/65/7265/1 && git format-patch -1 --stdout FETCH_HEAD
git pull ssh://192.168.8.32:29418/a/b/c refs/changes/65/7265/1
git fetch ssh://user@192.168.1.24:29418/a/b/c/d/e/f/g refs/changes/65/7265/1 && git cherry-pick FETCH_HEAD #应用某地提 交到本地
git merge (合并改动后需要commit)
git pull origin(仓库) master(branch)(等同于git fetch和git merge)
git pull origin(仓库) master(branch)--rebase(在最新节点基础上提交,没有该参数则自动merge本地,自动产生节点)
git fetch origin master;git checkout origin/branch #获取远端最新改动到本地仓库,然后取出最新提交改动的代码
11. 推送更新提交节点到远端仓库
git push origin(仓库) HEAD:refs/for/master(branch) --force(强制提交,可不用)
12. Gerrit进行审核合并
reply-->submit
13. 新建仓库
git remote add origin <server>
14. 克隆仓库
git clone /path/to/repository (本地)
git clone username@host:/path/to/repository (远端)
15. 基于origin/master分支创建本地branch分支feature_x
git checkout -b feature_x origin/master
16. 删除branch分支
git branch -d feature_x
17. 切换branch分支
git checkout master
git merge feature_x(合并分支feature_x 到 master)
18. 切换branch分支
git checkout master
19. 推送分支到远端仓库(其他人可见)
git push origin <branch>
git push origin HEAD:refs/for/master
20. 日志:
git reflog — 查找操作记录,可回到当前版本
git log — 查看提交历史(版本较多用回车键查看省略的历史版本,按q键可退出版本查看)
git log -n 查看3条提交历史
git config --global alias.ls "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit" (log 格式化,有点像hg)
git lg(log 格式化,有点像hg)
git log --graph ---查看提交节点
21 .版本
git rev-parse HEAD ----长commit
git rev-parse --short HEAD ---短commit
git版本自动生成:
version=$(git rev-parse --short HEAD)
echo "linux version:$version"
@/bin/echo -e "/*****auto create version file by makefile***************/\n" >git_version.h
@/bin/echo -e "#ifndef __GIT_VERSION_H_ \n#define __GIT_VERSION_H_\n" >>git_version.h
@/bin/echo -ne "#define GIT_SDK_VERSION \"$(version)\" \n" >>git_version.h
@/bin/echo -ne "#endif\n" >>git_version.h
git Windows界面:
Git GUI
Git Bash
Git CMD
git 深入理解与应用参考:http://www.runoob.com/git/git-tutorial.html
git log 格式化
git config --global alias.ls "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit"
#git lg
常见问题:
若git clone出现“no matching key exchange method found”字段,请在以下用户路径生成config文件
解决方法:
1,设置环境变量
exportGIT_SSH_COMMAND=ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 (linux 平台,windows在系统环境变量添加)
2,在.ssh 目录下创建config文件并增加
KexAlgorithms diffie-hellman-group1-sha1
本地建立远端仓库:
建立远程仓库时用git init --bare,建立一个空仓库,本地其他地方用git init 初始化一个仓库或者克隆远端仓库,然后推送到远端的空仓库里面;
创建远端仓库:
mkdir -p remoteRepo/testproject
cd remoteRepo/testproject
git init --bare
克隆仓库:
git clone /home/usenane/work/remoteRepo/testproject testproject
增加用户提交配置(--local):(也可以在/home/usenane 进行全局配置--global)
git config user.name cgf
git config user.email cgf@163com
git config push.default simple
初始化仓库:
git checkout –b master
echo initRepo>init.txt
git add init.txt
git commit -m "initRepo"
git branch
* master
git push origin master
# 更新目标仓库
git pull origin master
#更改添加
git add -u
git add <file&paths>
git commit -am "test for push"
git push origin master
git push origin master
git push origin HEAD:refs/heads/master
#查看远端提交记录:
git log remotes/origin/master
常见问题:
1,push 后找不到master
本地仓库需要 clone 后 git init 或git reset --hard 才能看到push后的内容.
或者远端创建时没有 --bare参数;需要登录到远程的那个文件夹,使用
git config --bool core.bare true 进行配置;
2,由于用户权限的问题,远端仓库objects没有权限
错误:
remote: error: insufficient permission for adding an object to repository database ./objects
chown -R git:git git仓库
chmod 777 -R ./objects
3,远端仓库创建默认权限设置为同组用户可读权限,需要将 git 仓库下文件的默认权限设置为同组用户均可读写执行 git init --bare --shared 或者
git init --bare --shared[=(false|true|umask|group|all|world|everybody|0xxx)]
如果仓库已经启用,在远程仓库目录下更改 git 配置的语法:
git config core.sharedRepository [(false|true|umask|group|all|world|everybody|0xxx)]
4,如果是允许其他用户组访问需要设置该仓库下所有新生成的对象文件的默认权限为7777,即拥有者和同组用户拥有读写执行权限,代码如下:
git init --bare --shared=7777
或者初始化仓库时
git config core.sharedRepository 7777
//已启用后配置
git查看提交修改的文件列表
查看最后一次提交记录的修改文件信息
git show --raw
查看指定commit id对应修改文件列表
git show --raw commit_id
git show --raw 2f80f1c8bb2cb8e91d22ad38480b681c194f6518
查看所有提交记录的修改文件信息
git log --stat
git log --name-only
查看所有修改相关的commit ID和comment信息
git log --pretty=oneline
查询指定author的修改信息
git log --author=cgf
Git 仓库的继承和迁移:
git clone --mirror xxx
$ git remote add remote2 xxx
$ git push --mirror remote2