Git超详细常用命令
Git是目前世界上最先进的分布式版本控制系统。
创建仓库(Repository)
一般的在实际项目中创建仓库有一个简单的方法:
在一个自己需要的目录下
$ git clone https://github.com/Stupidbird836/designPattern.git
到目录下查看
同时我们到该文件夹下
$ cd designPattern/
$ git remote -v
origin https://github.com/Stupidbird836/designPattern.git (fetch)
origin https://github.com/Stupidbird836/designPattern.git (push)
那么我们在实际项目之外的时候应该怎么创建一个仓库呢?
到一个目录下
$ cd ..
$ mkdir gitinit
$ cd gitinit/
$ git init
Initialized empty Git repository in E:/git/gitinit/.git/
当前目录下还有生成一个.git的隐藏文件夹,这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了
到这里,我们的一个简单的仓库已经创建完成了
搞点事情
下面我们在仓库里面做一些事情
创建一个write.txt
写一些东西
查看是否有文件未提交
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
write.txt
nothing added to commit but untracked files present (use "git add" to track)
提交到暂存区
$ git add .
提交到仓库
$ git commit -m "write something"
创建远程仓库
$ git remote add origin 远程地址
提交到远程仓库
$ git push origin master
这里需要注意一下:你add的是你需要push 后面的名字(暂且这样解释)
比如:$ git remote add aaaa 远程地址
$ git push aaaa master
一个正常的没有错误的提交逻辑大约是:
查看有没有需要提交的文件
$ git status
添加到暂存
$ git add .
或者添加一个文件到暂存
$ git add 具体的文件名
提交到本地仓库
$ git commit -m "提交描述"
这里其实就可push,但是你不能保证在你操作的期间别人有没有在该分支做过提交所以最好先
$ git pull origin 分支名
如果有冲突,就先解决冲突,然后从第一条命令开始
没有冲突那就提交到远程
$ git push origin 分支名
但是谁都不能保证每次都能顺利进行
版本回退
对write.txt文件进行修改,增加一行
内容为two line.
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: write.txt
no changes added to commit (use "git add" and/or "git commit -a")
$ git add .
$ git commit -m "two line"
[master 56cb32a] two line
1 file changed, 2 insertions(+), 1 deletion(-)
想回退你就得知道你的提交日志
$ git log
commit 56cb32a525480cb6612d152c927a027834e90f7c (HEAD -> master)
Author: huchenfei <[email protected]>
Date: Wed Jan 9 17:00:05 2019 +0800
two line
commit 5ba4de5ad731fae4eb0b2fdfabcb69fc59862e64
Author: huchenfei <[email protected]>
Date: Wed Jan 9 16:43:45 2019 +0800
write something
现在我想使用版本回退操作,我想把当前的版本回退到上一个版本,这里有两种命令可以选择
git reset --hard HEAD^
那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。但是弊端很明显,10次,50次之前的怎们办呢?
git reset --hard HEAD~100
该命令可以直接回退到100次之前
开始回退
$ git reset --hard HEAD^
HEAD is now at 5ba4de5 write something
[email protected] MINGW64 /E/git/gitinit (master)
$ cat write.txt
one line
只有最开始的 one line,第二次的two line已经被回退了
你可能发现了,这个日志太可怕了,有种总有刁民想害朕的即视感。我的回退记录没有,这可怎么办呢?
别急
$ git reflog
5ba4de5 (HEAD -> master) [email protected]{0}: reset: moving to HEAD^
56cb32a [email protected]{1}: commit: two line
5ba4de5 (HEAD -> master) [email protected]{2}: commit (initial): write something
刁民无处遁新
回退错了,我不想回退了怎么办。
看上面,不是已经把提交的版本号打出来了吗 56cb32a,是我们提交two line的版本号
$ git reset --hard 56cb32a
Git撤销修改和删除文件操作
天有不测风云,人有旦夕祸福,我正在奋笔疾书的写代码,突然我发现我写错位置了,但是改动的地方有很多,我没办法一点一点的删除修改的地方,怎么办??
在write.txt中加入three line
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: write.txt
no changes added to commit (use "git add" and/or "git commit -a")
$ git checkout -- write.txt
-- 很重要,没有--的话就成了切换分支了
$ cat write.txt
one line
two line
这种情况使用我还没有添加到暂存区,如果你已经添加到暂存区了,那你就可以选择通过回退来进行,无论你是删除了文件还是增加了文件,只要你还么有添加到暂存区,都可以使用这种方法
创建与合并分支
上面我们都是在master的分支上进行操作的,但是实际的生产中,我们并不允许直接在master上做代码的修改,那么我们该怎么办?
$ git branch 分支名
这里需要注意,注意你当前的分支,你在哪个分支下,你就会创建一份和当前分支一模一样的代码的另一个分支
所以一般我们创建分支的时候需要先切换分支到master上(特殊情况除外)
$ git checkout master
$ git branch aaaa
这样aaaa分支上的代码和master上的代码是完全一致的
删除分支:
一个项目结束之后,我们通常会选择释放分支,即删除分支,这个也不是必须的,只不过当你在本地仓库和远程仓库看到n年之前的分支还在那里,不显得很累赘吗?
删除分支,不能再要删除分支下操作
$ git branch -d aaaa
删除本地分支
$ git push origin :aaaa
:为必须要素,删除远程分支
当我们在我们自己的分支上做完功能之后,需要上线,这时候代码需要合并到master分支上
$ git checkout master
$ git merge --no-ff aaaa
同样的,如果我们需要同步master 的代码到我们自己的分支上
$ git checkout aaaa
$ git merge --no-ff master
-
查看分支:git branch
-
创建分支:git branch 分支号
-
切换分支:git checkout 分支号
-
创建+切换分支:git checkout –b 分支号
-
合并某分支到当前分支:git merge 分支号
-
删除分支:git branch –d 分支号
附一份我工作中常用到的git命令
生成**:
$ ssh-****** -t rsa
或者
$ ssh-****** -t rsa -C "[email protected]"
查看当前git的用户民和邮箱:
$ git config user.name
huchenfei
$ git config user.email
***********
修改当前git的用户名和邮箱:
$ git config --global user.name "your name"
$ git config --global user.email "your email"
git pull/push不需要输入密码
如果是https的连接需要下面的操作
$ git config --global credential.helper store
$ git pull
输入账号密码
$ git pull 这是就不需要了
如果是ssh的连接
需要把ssh key放到git上
Git查看配置:
$ git config --list
$ git config --global push.default simple
$ git config --global merge.ff false
基于某分支创建新分支:
$ git branch xxxx
$ git checkout xxxx
$ git push origin xxxx
检出分支:
$ git fetch
$ git checkout xxxx
提交代码:
$ git checkout xxxx
$ git add -A 或者 git add . 或者 git add 具体的修改文件
$ git commit -m "abcdefg"
$ git push origin xxxx
结束分支(把代码合并到master分支):
$ git checkout xxxx
$ git pull origin xxxx
$ git checkout master
$ git pull origin master
$ git merge --no-ff xxxx
$ git push origin master
删除本地分支:
$ git branch -d xxxx
删除远程分支:
$ git push origin :xxxx
合并(把源分支的代码合并到目标分支):
$ git checkout 源分支名
$ git pull origin 源分支名
$ git checkout 目标分支
$ git pull origin 目标分支名
$ git merge --no-ff 源分支名
$ git push origin 目标分支名
恢复以前的代码:
$ git reset --hard HEAD 代码没有commit之前,恢复到上一次commit的代码。
$ git reset --hard HEAD^ 还没有push之前,撤销最新的commit,代码恢复到上上一次的commit。
$ git reset --soft HEAD^ 还没有push之前,撤销最新的commit,代码不变。
学习之余也不要忘了劳逸结合哦
喜欢天马行空的同学请关注公众号: