如果想要更加深入学习Git,应该在官网上阅读.Git-Book.
下面我列一下我经常用到的命令吧.
git add file
开始跟踪一个文件,并且把file变成暂存状态
git add --all
跟踪全部文件
git reset HEAD file
取消跟踪的文件
git status
查看哪些文件处于什么状态
git commit -s
提交更新,并且跳转到提交编辑页面,如果不想跳转那么麻烦就用 -m
git pull --rebase
将远程服务器的代码更新到本地.同:git fetch + git rebase FETCH_HEAD rebase操作不会生成新的节点,而是将分支融合成一个线性的提交。
git rebase --abort
回到rebase操作之前的状态,之前的提交的不会丢弃,简单来说就是撤销rebase。
git rebase --skip
将引起冲突的commits丢弃掉,(慎用)
git rebase --continue
git pull --rebase 之后,本地如果产生冲突,手动解决冲突之后,用"git add"命令去更新这些内容的索引(index),然后只要执行:git rebase --continue 就可以线性的连接本地分支与远程分支,无误之后就回退出,回到主分支上。
注意:一般情况下,修改后检查没问题,使用rebase continue来合并冲突。
git commit --amend
对上次提交的内容进行修改,并修改提交说明
git push
将本地版本库的分支推送到远程服务器上对应的分支
git reset --hard
永久丢弃对所有文件的所有本地更改(慎用)
git reset --hard commit_id
回退到某个指定的版本(慎用)
git checkout - -
撤销本地变化(永久丢弃)
git reset --soft
回退到某个版本.只回退commit信息,不会将提交的文件也清除.如果还要提交,直接commit即可
git revert -n commit _id
撤销之前的某一版本,而且保留该目标版本后面的版本.反做,最后使用commit提交反做.
git branch
列出本地已经存在的分支
git checkout -b branchName
新建一个分支,并切换到这个分支
git branch --no-merged
查看尚未合并的工作分支
git branch -d branchName
删除该分支,如果这个分支中还包含着尚未合并进来的工作成果,那么会删除失败
git branch -D
强制删除该分支,不论是否合并过
git reflog show
查看所有分支的操作记录(即使已经被删除的commit),有了操作的commit_id之后就可以做许多事情了.比如有的时候删除了一个分支,然后又想恢复.这个时候查看git log是没有信息的,所以有了这条命令就不怕误删了.
git log --graph
显示ASCII 图形表示的分支合并历史
git stash
快速保存本地更改
git stash save xxx
可以在保存时添加备注信息,这这样对于多个stash管理和识别将更加方便
git stash list
列出所有以前暂储过的工作状态
git stash pop
用户回到上一个存储的工作状态并将其从stash存储列表中删除
git stash apply
作用与git stash pop类似,恢复更改,但是不删除储藏堆栈中的更改。
git checkout -b dev origin/dev
拉取远程分支到新的分支并切换到这个新分支上面
git cherry-pick commit_id
用于把其他分支的commit,移到当前分支
git clone
从远程库中克隆,克隆一个版本库到新的目录
git clone -b 远程分支名 --single-branch --depth=1 远程分支主仓库地址
有些库特别大,而我们只需要用到某个分支的时候,使用此命令
例如:git clone -b p/ali/l/forp/dev –single-branch --depth=1 ssh://aliserver:29418/ali/delivery/AliDelivery dev
git remote show origin
查看有关于origin的一些信息,包括分支是否tracking
git remote prune origin
会与远程库进行一次同步,最终清理掉版本库中的dev分支,但本地工作区中的dev分支并不会删除
制作补丁
最后一次提交
- 我们经常修复Bug,然后将该Bug的代码合并到某个分支中,如果每个分支都通过手动修改就会非常麻烦,这是可以将修改的代码制作称一个补丁,然后应用到其它分支即可。当我们修改并提交代码后,这个代码通常是最后一次提交,因此可以用下面命令非常方便的制作一个补丁。其中,-1表示最后一次提交,-o表示补丁文件输出的目录。
git format-patch -1 -o /root/patch/
- 有的时候这个Bug非常复杂,我们可能进行了多次提交,这个时候可以将命令调整为如下格式。示例中-5表示将最近5次提交制作成补丁。当然可以用下面介绍的第2中方式。
git format-patch -5 -o /root/patch/
从某commit以来的修改
- 有的时候这个Bug非常复杂,我们可能进行了多次提交,而且可能数起来都非常麻烦,这个时候可以将命令调整为如下格式,这个命令格式将某次提交(不包含该次提交)之前的所有提交做成补丁。
git format-patch de85add54522b7ca3b7ad99c7c5ea24525d39ba0 -o /root/patch/
- 如果我们只想将该次提交制作称补丁,那么应该怎么办呢?可以使用如下命令:
git format-patch -1 de85add54522b7ca3b7ad99c7c5ea24525d39ba0 -o /root/patch/
- 如果想将该次提交之前的若干个提交一起制作成补丁呢?可以使用如下命令,将该次提交之前的3个提交(含本次提交)制作成bud
git format-patch -3 de85add54522b7ca3b7ad99c7c5ea24525d39ba0 -o /root/patch/
两个commit间的修改
- 有的时候可能需要将新版本中解决Bug的代码移到老版本中,而代码提交的又多,又很久远。这是可以将两次提交之间的内容(包含两个commit)全部做成补丁。需要注意的是两次commit id之前是三个点(…)。
git format-patch 7f581e5fabbed21ad8c8ccd3398513d626f01ecf…de85add54522b7ca3b7ad99c7c5ea24525d39ba0e919cd7a -o /root/patch/
其实这个commit id不需要全量,可以只截取一部分。
git format-patch 7f581e5fabbed…de85add54522b7 -o /root/patch/
应用补丁
- 制作的补丁最终肯定是要用的,下面我们介绍一下如何使用git补丁。首先需要把生成的patch文件拷贝到某个目录下。比如本文假设生成在/root/patch/下。检查patch(补丁)文件这个命令用于检查补丁文件,确保文件没有问题。
git apply --stat /root/patch/0001-test-fix.patch
- 查看是否可以应用成功
这个命令用于检查如果应用到本代码树是否会有问题,相当于一个演练。这样可以避免合并的时候才出现问题。
git apply --check /root/patch/0001-test-fix.patch
- 实际应用补丁
这个命令是进行实际的应用,此时补丁代码会合并到代码树中。
git am -s < /root/patch/0001-test-fix.patch