Git常用命令
git
核心示意图。remote
就是GitHub
仓库,你可以狭义的理解为你在https://github.com/
网站上建的仓库。repository
代表版本库,这个版本库是在.git
里面保管着,你每次commit
提交的东西就在这里面。index
是暂存区。workspace
是工作区,就是你实实在在编写的代码。
关联远程仓库
- 先在本地初始化仓库,然后关联远端仓库
git init本地初始化,建立一个仓库
git remote add origin(远端别名,随便起) 远端网址
可以用git remote -V 查看远端仓库。
首次推送远端
git push -u origin(远程) master(本地)或 master/wpc(本地某一个分支)
后续推送
git push origin master:wpc
dev : dev
本 :远
- 直接克隆远端已经有的仓库,这样就直接关联了
git clone 网址
添加文件到repository
git add files #完成跟踪文件 把已经跟踪的文件放到暂存区,注意:每次修改都要add一下才可以
git commit -m "my commit comments "
上面两句可以缩写为一句
git commit -am "my commit comments"# 因为每次修改都要add一下,为了简单起见,可以用缩写(前提是曾经add过该文件一次)
如果已经提交(commit)
了一次,还没有push
,用下面语句可以覆盖上次提交
git commit -a --amend -m "my new commit comments"
不追踪文件
如果不想追踪某个文件,可以用
git rm --cache files#这句话并不删除源文件,只是git不再管理该文件了
或者
git reset HEAD files#直接回到最新提交的版本
不修改文件
如果修改了某个文件,又不想修改了,并且你还没有add该文件,可以用下面命令恢复该文件
git checkout -- files
-
没有放暂存区
git checkout -- files git checkout -- commit-id files 把文件还原到commit-id的样子
-
放在了暂存区
1. git reset HEAD file 把文件file放到工作区,不追踪了 2. git checkout -- files
-
放在了版本库
git reset
进行版本回退
查看状态
git status 笼统的说明哪些文件改变了
git diff 详细说明哪一个文件的哪一行变了
----------
git diff HEAD^ HEAD 后面的文件比前面文件多了什么,或者少了什么
git diff HEAD^ -- README.md 当前README.md比HEAD^多了什么,或者少了什么
git diff HEAD 当前工作区与最新commit的差异
git diff --cache 查看已经add的文件的不同
---------------
git log
git log --oneline --graph
-----
git show # 详细内容 看commit的内容
git show --stat #简略只显示文件名字
-----------------
touch files 创建文件
cat files 查看文件内容
echo 字符串输出
echo "输出内容"
echo "输出内容" >> files name
版本回退
git reset --hard commit-id / HEAD^ 回退到某一个commit-id 不保存当前所有改变 (工作空间 index都变)
git rest commit-id (工作空间变 index不变)
分支管理
建立分支
git branch dev 建立分支dev
git checkout dev 切到分支dev
上面两句话可以合并成一句话
git checkout -b dev
查看、删除分支
git branch 查看分支
git branch -d dev 删除分支
显示分支图
git log --simplify-by-decoration --decorate --graph --oneline --all
分支建立追踪
git branch --set-upstream [branch] [remote-branch]
合并分支有两种方法
合并分支
merge合并分支1
合并分支分两步,如下
-
切到
master
分支git checkout master
-
合并
bugfix
分支到master
git merge bugfix
merge分支冲突1
如果分支发生冲突,解决冲突后执行如下命令:
git add files
git commit -m "solve merge conflict"
---------------------或者
git commit -am "solve merge conflict"
rebase合并分支2
合并分支分两步,如下
-
切到
dev
分支git checkout dev
-
合并
bugfix
分支到master
git rebase master
Tips:
rebase
和merge
不同的地方merge是在master分支上,然后执行git merge bugfix 把bugfix分支融合到master分支上
rebase是在bugfix分支上,然后执行git rebase master 把bugfix分支融合到master分支上
他们最后形成的
commit
提交结果也不一样。
rebase分支冲突2
rebase
的时候,修改冲突后的提交不是使用commit
命令,而是执行rebase命令指定 --continue选项
。若要取消rebase,指定 --abort选项
。
git add myfile.txt
git rebase --continue
此时HEAD
的指针是指向bugfix(图中issue3)
的,我们需要执行如下命令把master
分支移动到HEAD
的位置
git checkout master
git merge bugfix(issue3)
拉取和推送分支
拉取分支
git pull [远程库] [远程分支]:[本地分支] # 注意:":"前后不要空格
------上面一句相当于下面两句
git fetch [远程库] [远程分支] #此时本地文件不变,产生了‘[远程库]/[远程分支]’分支,可以切到‘[远程库]/[远程分支]’分支查看,如果想合并该分支,在想要合并的主分支(例如master分支)上执行下面语句
git merge [远程库]/[远程分支]
------------------------------例子
git pull origin dev:dev #拉取远程dev分支到本地dev分支
-------
git fetch origin dev #本地生成origin/dev分支
git merge origin/dev # 切到master分支上执行该语句,dev就会合并到master分支上
推送分支
git push [远程库] [本地分支]:[远程分支] # 注意:":"前后不要空格
git stash 常用指令
git stash
git stash list
git stash pop
参考链接
猴子都能懂的git