基本命令:
1、创建一个空目录:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
2、git init 命令把这个目录变成 Git 可以管理的仓库:
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
3、用ls -ah命令查看目录
.git目录
4、用命令git add告诉 Git 把文件添加到仓库:
$ git add readme.txt
5、用命令git commit告诉 Git,把文件提交到仓库:
$ git commit -m “wrote a readme file”
6、运行git status命令看看结果:
$ git status
7、看看具体修改了什么内容 需要用git diff这个命令看看:
$ git diff readme.txt
8、git log命令查看版本:
$ git log
9、如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数:
$ git log --pretty=oneline
10、把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用git reset命令:
$ git reset --hard HEAD^
11、只要上面的命令行窗口还没有被关掉,指定回到未来的某个版本:
$ git reset --hard 3628164
12、再小心翼翼地看看 readme.txt 的内容:
$ cat readme.txt
13、把暂存区的修改撤销掉(unstage),重新放回工作区:
$ git reset HEAD readme.txt
14、删除文件
$ rm test.txt
15、删错了,把误删的文件恢复到最新版本:
$ git restore – test.txt
分支操作:
1、首先,我们创建 dev 分支,然后切换到 dev 分支:
$ git checkout -b dev
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
2、用git branch命令查看当前分支:
$ git branch
3、把 dev 分支的工作成果合并到 master 分支上:
$ git merge dev
4、合并完成后,就可以放心地删除 dev 分支了:
$ git branch -d dev
5、用带参数的git log也可以看到分支的合并情况:
$git log --graph命令可以看到分支合并图。
$ git log --graph --pretty=oneline --abbrev-commit
6、最后,删除 feature1 分支:
$ git branch -d feature1
7、–no-ff参数,表示禁用 Fast forward, Git 就会在 merge 时生成一个新的 commit,这样,从分支历史上就可以看出分支信息。:
$ git merge --no-ff -m “merge with no-ff” dev
Bug 分支
1、把当前工作现场“储藏”起来
$ git stash
2、工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令看看:
$ git stash list
3、恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash 内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把 stash 内容也删了:
$ git stash pop
Feature分支:
1、强行删除分支,需要使用命令git branch -D feature-vulcan
$ git branch -D feature-vulcan
多人协作:
推送分支
远程仓库的默认名称是 origin。
$ git push origin master
$ git push origin dev
抓取分支
1、创建远程 origin 的 dev 分支到本地,于是他用这个命令创建本地 dev 分支:
$ git checkout -b dev origin/dev
2、先用git pull把最新的提交从 origin/dev 抓下来,然后,在本地合并,解决冲突,再推送:
$ git pull
3、git pull也失败了,原因是没有指定本地 dev 分支与远程 origin/dev 分支的链接,根据提示,设置 dev 和 origin/dev 的链接:
$ git branch --set-upstream dev origin/dev
Branch dev set up to track remote branch dev from origin.
4、再 pull:
$ git pull
这回git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后,提交,再 push:
$ git push origin dev
其他命令:
1、添加所有文件到仓库:
$ git add --all
2、删除本地仓库:
1.在本地仓库的目录下调用命令行删除根目录下的.git文件夹,输入
find . -name “.git” | xargs rm -Rf
这样本地仓库就清除了,像下面这样,master不见了。
git commit之后,想撤销commit
写完代码后,我们一般这样
git add . //添加所有文件
git commit -m “本功能全部完成”
执行完commit后,想撤回commit,怎么办?
这样凉拌:
git reset --soft HEAD^
这样就成功的撤销了你的commit
注意,仅仅是撤回commit操作,您写的代码仍然保留。
说一下个人理解:
HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
至于这几个参数:
–mixed
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
–soft
不删除工作空间改动代码,撤销commit,不撤销git add .
–hard
删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。
顺便说一下,如果commit注释写错了,只是想改一下注释,只需要:
git commit --amend
此时会进入默认vim编辑器,修改注释完毕后保存就好了。
今天用git commit -m “注释”提交的时候,注释写错了,于是各种查资料开始了和git bash vim的纠缠。。。(网上的资料我真是没操作成功,不过最后还是摸索出来了。
首先 使用 git commit --amend 命令(修改最近一次提交的注释信息),会进入到vim 编辑器
然后 你会发现编辑器里你怎么输入都没反应,这是因为vim处在不可编辑状态,
按下字母键 c(此时进入编辑状态),可以开始修改注释信息了
修改好后,你会发现怎么都退出不了,然后如下操作:
按下Esc (退出编辑状态); 接着连按两次大写字母Z,你会惊喜的发现,终于保存好退出来了!
windows 系统 ,亲测有效!!拿走不谢!
2、其他Git管理参考。
https://blog.csdn.net/youzhouliu/article/details/78952453,Git使用详细教程。
https://github.com/MorvanZhou/tutorials/tree/master/gitTUT,MorvanZhou。
https://segmentfault.com/a/1190000006185954,checkout和reset的区别。
git&githib-给远程库取别名
若想将本地库的代码推送到远程库,就必须知道远程库的位置,有https和ssh两种传输方式
但是呢,你会发现这两个地址长度比较长,不能总是去gtihub上复制或者自己手敲,所以git当然也提供了解决该问题的办法:给访问路径取别名
给远程库取别名的命令:git remote add 别名 远程库路径
想查看别名以及对应远程库的路径,命令:git remote -v
解决Git报错-refusing to merge unrelated histories
https://blog.csdn.net/u012145252/article/details/80628451
git reflog
git checkout master
git reset --hard
Git 删除所有文件
硬盘删除文件后,执行$ git status
会提示你仍然需要$ git rm <文件>
此时如果是要删除大批量文件,这么一个一个命令下去不得累死人啊
其实可以这样(不管之前有没有已经本地物理删除)
执行 $ git rm * -r(记得,cd 到你要删除的目录下。当然 * 可以换成指定目录)
这时删除文件已经进入本地缓存区,
接下来就是正常的提交操作了
git add .
git commit -m “update”
git push origin branchName
petch/pull:
git checkout master
git reset --hard
1
2
git 强行pull并覆盖本地文件
git fetch --all
git reset --hard origin/master