最近在某推文(Git/SQL/正则表达式在线刷题学习网站)上发现一款可以用来学习 git
的游戏:Learn git
闯关过程中记录一些常用 git
命令:
本地操作
文件提交
bash1
2
3$git commit #提交暂存区文件到本地仓库
$git commit –m [提交描述]/[文件名] #提交暂存区文件到本地仓库
$gut commit -a -m [提交描述] #加的-a参数可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过git add添加到暂存区分支的合并以及 rebase 操作
bash1
2
3
4$git merge [branch xxx] #将xxx分支合并到当前分支,xxx分支停留在合并前的版本,当前分支不变
$git rebase [branch xxx] #以xxx为基础,将当前分支上的修改增加到xxx分支上,并生成新的版本
$git status #查看冲突文件
$git rebase --continue #解决冲突之后继续之前的rebase操作分支的新建,切换,删除
bash1
2
3
4$git branch [new branch xxx] #创建新分支xxx
$git checkout [branch xxx] #切换到xxx分支
$git checkout -b [branch xxx] #创建并切换到新分支xxx
$git branch -d [branch xxx] #删除xxx分支查看日志
bash1
2$git log --oneline -[number] #查看最近n次日志
$git log --oneline --graph #(图标形式)查看日志退回上一版本
bash1
2$git reset #将当前分支退回上一版本
$git revert #将当前分支退回上一版本并产生新commit
- 版本操作bash
1
2
3
4$git cherry-pick[version] #可以理解为”挑拣”提交,获取某一个分支的单笔提交,并作为一个新的提交引入到当前分支上
$git checkout [version/branch] #使HEAD指向某一次commit或者某一分支(^表示前一版本,~n表示前n版本)
$git rebase -i [version] #合并提交(有交互界面)
$git branch -f [branch xxx] [version] #直接将xxx分支重新分配到特定版本
远程操作
git clone
将远程库克隆到本地,同时产生origin/master
分支(远程分支,名字形如[remote name/branch name]
git fetch [remote] [place]
远程抓取到本地,走两步:将远程的新 commit 同步到本地,并将origin/master
分支的位置更新(指向远程库的最新 commit)[remote] [place]
与 push 使用方法类似- 若本地分支名称与远程分支名称不对应,可将
[place]
位置的参数改为[source] [destination]
,source 为远程位置,destination 为本地位置- 当
source
位置名称未声明过时会在本地创建新分支 - 当
source
位置为空,destination
位置名称未声明过时会在本地创建destination
新分支
- 当
git pull [remote][place]
=git fetch + git merge
抓取合并(远程分支与本地分支)git pull --rebase [remote] [place]
=git fetch + git rebase
抓取合并git push [remote] [place]
当且仅当本地的远程分支更新至最新版本时,将本地内容推至远程库。- 若本地远程分支非最新版本会报错,这时需要先执行
pull
再继续push
。 - 若本地分支名称与远程分支名称不对应,可将
[place]
位置的参数改为[source] [destination]
,source 为本地位置,destination 为远程位置- 当
destination
位置名称未声明过时会在本地和远程创建新分支 - 当
source
位置为空时会讲本地和远程的destination
库删除
- 当
- 若本地远程分支非最新版本会报错,这时需要先执行
将本地
foo
分支设置为跟踪origin/master
分支的两种办法:- 执行
git checkout -b foo o/master
- 执行
git branch -u o/master foo
- 执行
.gitignore
附一个网址:https://www.jianshu.com/p/699ed86028c2
版本切换
- 回退单个文件到某次commitbash
1
2$git log "filename" #找到对应commit短哈希
git reset "commit-id" "filename"
常见问题
出现报错:
fatal: refusing to merge unrelated histories
原因:远程仓库和本地仓库完全不相干,如果需要将两者合并可以使用命令如下bash1
$git pull origin master --allow-unrelated-histories
出现报错:
fatal: The current branch master has no upstream branch.
原因:没有将本地的分支与远程仓库的分支进行关联。出现这种情况主要是由于远程仓库太多,且分支较多。在默认情况下,git push 时一般会上传到 origin 下的 master 分支上,然而当 repository 和 branch 过多,而又没有设置关联时,git 就会产生疑问,因为它无法判断你的 push 目标。有关
git remote prune origin
https://blog.csdn.net/BryantLmm/article/details/85130091有关解决冲突
git status
可以告诉我们冲突的文件git merge --abort
命令仅仅在合并后导致冲突时才使用。``将会抛弃合并过程并且尝试重建合并前的状态。但是,当合并开始时如果存在未 commit 的文件,git merge --abort
在某些情况下将无法重现合并前的状态。(特别是这些未 commit 的文件在合并的过程中将会被修改时)- 运行
git-merge
时含有大量的未 commit 文件很容易让你陷入困境,这将使你在冲突中难以回退。因此非常不鼓励在使用git-merge
时存在未 commit 的文件,建议使用git-stash
命令将这些未 commit 文件暂存起来,并在解决冲突以后使用 git stash pop 把这些未 commit 文件还原出来。
清理远程仓库
附一个网址: https://www.cnblogs.com/kaerxifa/p/11211956.htmlgit stash
先附一个网址,之后再详细写。