git常用操作

来源:互联网 发布:淘宝一飞老师 编辑:程序博客网 时间:2024/06/07 17:44

修改提交说明:

1)最近一次提交说明  git commit --amend

2) 指定commit的提交  git rebase -i <commit id>

commit 的时候才会产生log

误提交文件撤回:git rm --cached file

放弃本地文件的修改 git reset --hard commitId 用指定提交状态的文件替换本地文件


git pull 拉取远程分支

git push本地推送远程

git log -l -m --status 2 

git ls-files 输出结果第三列的值大于0表示有文件冲突

当文件冲突时,只能手动解决冲突,然后add--commit

git mergetool可以交互式的解决冲突


tag:

git tag 显示标记(里程碑)

git tag -n<num> 显示num行tag的说明


branch:

git branch 显示本地分支列表

git branch branchname  基于当前HEAD提交创建分支

git branch branchname start-point 基于哪个提交建立分支

git branch -d branchname 删除分支,会检查分支合并,已合并拒绝删除

git branch -D branchname 强制删除分支

git branch -m branchname 修改分支名称,若已存在同名分支,拒绝修改

git branch -M branchname 强制占用该名称修改


git branch -r 查看远程分支

git checkout -b branchname remotename 基于远程的某个分支建立本地分支

git checkout remotename 将远程版本库的分支复制为本地远程版本库,会分离头指针,不推荐

git remote update 更新远程版本库

git remote rm branchname 删除远程分支


git format-patch -s HEAD~n..HEAD 将最近的n次提交转换为补丁文件

git send-email *.patch 将补丁文件以邮件的形式发送出去

git apply XX.patch 应用哪一个补丁文件




add:

git add将修改内容添加到暂存区

git add -u 提交所有修改

git add -i 对工作区文件交互性添加

git add -A 提交所有修改

git add -p 选择性提交修改

git add file 提交指定文件


diff:

git diff 未提交(add)的修改

git diff 分支名 与另一个分支的差异


stash:

git stash 保存当前工作进度(比如你需要紧急在留一个分支修改东西,但是当前分支已有修改,还不想提交,可以用stash暂存)

git stash pop恢复之前保存的进度,会删除stash引用

git stash list 查看当前保存进度

git stash diff 查看多个stash之间的差异

git stash apply stash@... 使用哪一个stash恢复工作区,不会删除引用,可以多次使用这个stash

git stash clear 清除git stash,删除之后 reflog以及stash引用都会丢失


操作svn:

git svn clone url

git svn fetch

git svn rebase

git svn dcommit


git grep 更友好的git目录下的搜索

git config -e 编辑git的配置文件

git commit --amend --allow-empty --reset-author


git status 查看当前git的状态

git status -s 用精简形式输出git的状态

 A是add暂存区新增文件  M是modify修改文件 ? 是本地新增

git log --pretty=oneline 精简输出log信息



git add 提交到暂存区,

git checkout file 撤销工作区尚未提交的修改

git reset HEAD 把提交到暂存区的文件撤回


commit 添加到本地版本库

git diff --cached|--staged 查看与版本库的差异

git diff 查看本地工作区与暂存区的差异

git diff HEAD 查看工作区与当前分支差异

git rm --cached file 删除暂存区的文件,本地工作区不受影响

git checkout . 用暂存区的文件替换工作区文件


git ls-tree l HEAD 查看目录树


git cat-file -t commit(40位的ID)

显示可能为 commit本次提交唯一标识  tree对应目录树 parent上次提交


访问git对象:

git rev-parse HEAD  显示最近的一次提交

git cat-file commitId 查看对应commitId的提交信息


使用git reset --hard commitId 用指定commit重置本地修改,这个重置无法恢复

但是,操作后本地的提交历史也会被删除,可以使用git reflog来挽救错误的重置

git reflog show master | head -5 可以找到reset前的提交commitId

如下:

再使用git reset 把对应的commit回复过来即可

比如 git reset --hard 2a0a98d 或者 git reset --hard master@{4}都可以



git checkout . 会拿暂存区的文件覆盖所有的本地文件

git clean -nd  列出会被删除的文件,以免误删除

git clean -fd  真正执行删除

git status -s 查看当前状态


git tag -m "comment" flagName 为本次提交打一个标签

git discribe 显示最近提交的标签


删除本地文件之后,使用git ls-file命令可以发现暂存区的文件并未被删除

git add -u 将本地文件的修改记录到暂存区

git commit 删除本地git仓库的文件

git push同步到远程

git show HEAD~1:a.txt > a.txt 从本地历史提交中恢复本地误删除文件

git mv originName toName 将文件改名为toName(相当于是git rm 和 git add的操作合并)


git ignore 语法:

# 这是注释行

*.a     #忽略所有.a为扩展名的文件

!lib.a  #但是lib.a不要被忽略

/TODO   #只忽略当前目录下的TODO文件,不忽略子文件夹的

build/  #忽略所有build文件夹的文件

doc/*.txt #忽略所有doc/的txt文件,但不包括子目录



git blame fileName 查看某个文件的提交历史 git blame -L 3,5 从第3行开始查看5行

git show-ref 查看所有的引用

.git/heads/ 开头的是分支

.git/remotes/ 开头的是远程版本库在本地的映射

.git/tags 开头的是里程碑


.git/refs  目录下存放的是所有的引用

.git/packed-refs 存放的是打包文件


 git fsck 查看版本库中没有被任何对象引用的松散对象

 git prune 清理那些松散对象

 du -sh .git 再次查看占用空间

 commit之后要先使用 git reflog expire --all 让引用失效,再使用gitprune清理,才会   有用(慎用,log恢复的最后一道闸门了,丢了再也回不来...)


git gc 对版本库进行整理  gc是git的一个小工具,可以看到gc后的版本空间占用小了很多

git gc --prune=now立马对所有的未关联对象进行整理,包括过期的和未过期的
















0 0