Pro Git 第二版中文, 网站
这个是一个非常好的学习网站
这里是一个DEMO网站
commit
使用 git commmit --amend
来提交一个平行的变更
标签
- 查看标签
git tag
附注标签
git tag -a v1.4 -m 'my version 1.4'
轻量标签
$ git tag v1.4-lw
后期打标签
$ git tag -a v1.2 9fceb02
推送标签
git push origin --tags
git push origin <tag>
合并
合并冲突时,使用 git status 查看,冲突文件中会有标记
可以使用合并工具高效处理 git mergetool
–merged 与 –no-merged 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支。 –merge 在这个列表中分支名字前没有 * 号的分支通常可以使用 git branch -d 删除掉;你已经将它们的工作整合到了另一个分支,所以并不会失去任何东西。
存储临时未提交的内容
当遇到需要临时存储的时候,使用git stash
来进行存储
使用 git stash list
查看存储内容
使用 git stash pop
来恢复存储内容
cherry-pick
这个不同与base
,可以单独将其他分支的一个提交放到本分支上来
git cherry-pick c3
变基
其实,还有一种方法:你可以提取在 C4 中引入的补丁和修改,然后在 C3 的基础上应用一次。 在 Git 中,这种操作就叫做 变基。 你可以使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。
在需要使用交互方式的时候加上 -i
即可
注意变基时候的方向, 大多数情况使用 cherry-pick
会更好
$ git rebase <目的分支> <将被移动的分支>
不要对在你的仓库外有副本的分支执行变基。
拉取
clone
- 克隆一个项目到本地
git clone <url> --depth=1
这样就可以拉取最新的版本,不会有历史版本
当后面想拉取所有版本的时候,可以使用git fetch --unshallow
fetch
- 拉取远端到本地新分支
git fetch origin master:<new_branch>
或者
git fetch <主仓地址> master:<new_branch>
pull
git pull
在大多数情况下它的含义是一个 git fetch
紧接着一个 git merge
命令
fork的仓库,拉取主仓内容
git pull <主仓地址> <branch>
例如:
git pull https://github.com/networktocode/ntc-templates.git master
也可以单独对某个commit进行拉取
退回与恢复
恢复的方法
重点在于列出所有的commitgit reflog
然后checkout
到commit-id上就可以了
回退的两种方法
两种回退方式应该是reset
和revert
,其中reset
是本地退后,本质是checkout,而revert
的本质是将要退的地方提交一个新的commit。
git reset HEAD~
git revert HEAD
- 使用
reset
回退 - 使用
checkout
回退
reset
分为soft 和 hard 两种,soft只会回退状态,不会改变代码。hard回退会改变代码。默认是soft
git reset --hard [commit-id]
恢复即可找到之前的commit-id再reset
尽量不要使用--hard
checkout
使用checkout
更加的安全方便git checkout [commit-id]
将HEAD放到这个新的分支中, 再在这个分支中修改提交后。git checkout master
然后git merge [branch-id]
即可
或者直接使用 git branch -f [branch-id] <commit-id>
将这个分支指向这个commit
放弃跟踪文件
git rm -r --cache <file_path>
不删除本地文件
回退单个文件的方法
其实git log
和git checkout
后面都可以带单个文件
所以是
git log <file>
来查看此文件的历史提交git checkout <hash> <file>
来恢复特定版本
强制转移到另一个分支
git branch -f <master> <other_c>
.ignore 问题
对于track过的文件,后面的更改不想提交可以使用下面的方法
已经维护起来的文件,即使加上了gitignore,也无济于事。
用下面这个命令:
git update-index --assume-unchanged logs/*.log
这样每次提交就不会出现logs下面的文件了
关于远程的问题
当远端的历史发生变化,而自己这端提交新变更是提交不上的
解决办法是使用 git fetch
然后 git rebase orign/master
也就是将master基变到orgin/master上
简单的写法直接是git pull --rebase
远程push的同时可以创建分支
git push origin <branch>:<remoteNewBranch>
子模块
当我们需要拆分一个大项目,比如一个项目有很多个模块,每个模块都有自己的git仓库,那么我们可以使用git submodule add
来添加模块
worktree
当需要频繁切换分支的时候,会遇到刚做了一点,但是不想提交的情况,那么可以使用git worktree add
来创建一个worktree
worktree就是一个文件夹,这个文件夹与分支绑定在一起,进入了这个文件夹后,git的操作就会变成在这个文件夹中进行
创建worktree
git worktree add <worktree-name> <branch>
切换到worktree
cd <worktree-name>
列出所有的worktree
git worktree list
删除worktree
git worktree remove <worktree-name>
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 365433079@qq.com