您的位置:首页 > 其它

Git常用操作

2016-05-17 00:24 429 查看

Git常用操作

文档时间:2016年05月14日23:58:29

提交新文件

第一步添加文件:git add readme.txt //文件必须在git的仓库目下

第二步提交变动:git commit readme.txt //或者 git commit readme.txt -m “添加readme.txt文件,这里必须写入说明”

提交修改

git status命令查看仓库当前的状态

位于分支 master

尚未暂存以备提交的变更:

(使用 “git add <文件>…” 更新要提交的内容)

(使用 “git checkout – <文件>…” 丢弃工作区的改动)

修改: readme.txt

修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)

git diff查看difference

$ git diff

diff –git a/readme.txt b/readme.txt

index 9bb4dfe..981a41b 100644

— a/readme.txt

+++ b/readme.txt

@@ -1 +1,2 @@

My first git file

+这里是第一次修改

git add ×× 命令添加文件至仓库,git status查看状态

$ git status

位于分支 master

尚未暂存以备提交的变更:

(使用 “git add <文件>…” 更新要提交的内容)

(使用 “git checkout – <文件>…” 丢弃工作区的改动)

修改: readme.txt

修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)

git commit ×× -m “说明” 将文件提交。git status 查看仓库的当前状态

$ git status

位于分支 master

无文件要提交,干净的工作区

git 回到历史版本

git log 查看记录

$ git log

commit 1c71f838147fe1ccba9d271b6e887d69e1953150

Author: adaivskenan adaivskenan@foxmail.com

Date: Sun May 15 09:33:08 2016 +0800

第二次修改

commit cdd599457423fa678fbbafad3fafc78dc827b0da

Author: adaivskenan adaivskenan@foxmail.com

Date: Sun May 15 00:46:59 2016 +0800

添加改动

commit bbd0121be8fab4cfbe49554bc65ffa732ffa9796

Author: adaivskenan adaivskenan@foxmail.com

Date: Sun May 15 00:06:23 2016 +0800

提交了我的第一个readme,这里是本次提交的说明

查看可以加参数

$ git log –pretty=oneline

1c71f838147fe1ccba9d271b6e887d69e1953150 第二次修改

cdd599457423fa678fbbafad3fafc78dc827b0da 添加改动

bbd0121be8fab4cfbe49554bc65ffa732ffa9796 提交了我的第一个readme,这里是本次提交的说明

git reset –hard HEAD^ 用来回到上一个版本

gitreset–hardHEADHEAD现在位于cdd5994添加改动 git log –pretty=oneline

cdd599457423fa678fbbafad3fafc78dc827b0da 添加改动

bbd0121be8fab4cfbe49554bc65ffa732ffa9796 提交了我的第一个readme,这里是本次提交的说明

git 重返未来

git reflog 查看命令历史

$ git reflog

cdd5994 HEAD@{0}: reset: moving to HEAD^

1c71f83 HEAD@{1}: reset: moving to 1c71f83

cdd5994 HEAD@{2}: reset: moving to HEAD^

1c71f83 HEAD@{3}: commit: 第二次修改

cdd5994 HEAD@{4}: commit: 添加改动

bbd0121 HEAD@{5}: commit (initial): 提交了我的第一个readme,这里是本次提交的说明

git reset –hard commit_id 回到未来

gitreset–hard1c71f83HEAD现在位于1c71f83第二次修改 git log –pretty=oneline

1c71f838147fe1ccba9d271b6e887d69e1953150 第二次修改

cdd599457423fa678fbbafad3fafc78dc827b0da 添加改动

bbd0121be8fab4cfbe49554bc65ffa732ffa9796 提交了我的第一个readme,这里是本次提交的说明

撤销文件

撤销工作区文件

$ cat readme.txt

My first git file

这里是第一\这是第二次修改加入中间\次修改

add操作

add后添加

$ vi readme.txt

$ cat readme.txt

My first git file

这里是第一\这是第二次修改加入中间\次修改

add操作

add后添加

林俊杰JJ

$ git checkout – readme.txt

$ cat readme.txt

My first git file

这里是第一\这是第二次修改加入中间\次修改

add操作

add后添加

撤销缓存区文件

$ cat readme.txt

My first git file

这里是第一\这是第二次修改加入中间\次修改

add操作

add后添加

JJ 林俊杰

$ git status可以看到此时文件在暂存区

位于分支 master

要提交的变更:

(使用 “git reset HEAD <文件>…” 以取消暂存)

修改: readme.txt

$ git reset HEAD readme.txt //重置暂存区

重置后取消暂存的变更:

M readme.txt

$ cat readme.txt //工作区此时并未改变

My first git file

这里是第一\这是第二次修改加入中间\次修改

add操作

add后添加

JJ 林俊杰

$ git status

位于分支 master

尚未暂存以备提交的变更:

(使用 “git add <文件>…” 更新要提交的内容)

(使用 “git checkout – <文件>…” 丢弃工作区的改动)

修改: readme.txt

修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)

$ git checkout – readme.txt //丢弃工作区的改动

$ git status //此时文件以恢复HEAD的版本

位于分支 master

无文件要提交,干净的工作区

$ cat readme.txt

My first git file

这里是第一\这是第二次修改加入中间\次修改

add操作

add后添

撤销版本库文件(没有进行push到远程库的操作)

参考git 回到历史版本,先将HEAD指向历史版本

删除文件

文件add到暂存后删除工作区文件

$ la

.git readme.txt test.txt

$ git add test.txt

$ git status

位于分支 master

要提交的变更:

(使用 “git reset HEAD <文件>…” 以取消暂存)

新文件: test.txt

$ rm test.txt

$ git status

位于分支 master

要提交的变更:

(使用 “git reset HEAD <文件>…” 以取消暂存)

新文件: test.txt

尚未暂存以备提交的变更:

(使用 “git add/rm <文件>…” 更新要提交的内容)

(使用 “git checkout – <文件>…” 丢弃工作区的改动)

删除: test.txt

$ git rm test.txt

rm ‘test.txt’

$ git status

位于分支 master

无文件要提交,干净的工作区

文件commit到版本库后删除工作区文件

$ la

.git readme.txt test.txt

$ rm test.txt

$ git status

位于分支 master

尚未暂存以备提交的变更:

(使用 “git add/rm <文件>…” 更新要提交的内容)

(使用 “git checkout – <文件>…” 丢弃工作区的改动)

删除: test.txt

修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)

$ git rm test.txt

rm ‘test.txt’

$ la

.git readme.txt

$ git status

位于分支 master

要提交的变更:

(使用 “git reset HEAD <文件>…” 以取消暂存)

删除: test.txt

$ git commit -m “remove text.txt”

[master bcfd14e] remove text.txt

1 file changed, 0 insertions(+), 0 deletions(-)

delete mode 100644 test.txt

远程仓库

SSH Key

SSH Key为非对称加密的方式,及包含公钥和密钥。公钥存放在git远程服务器,用于校验是否是合法的用户在提交代码。密钥存放在本地,用于解密服务器端传送的数据。

SSH文件在用户的主目录中,我的SSH地址为/home/adaivskenan/.ssh。里面有id_rsa和id_rsa.pub两个文件,id_rsa为私钥,id_rsa.pub为公钥。如果没有需要用命令生成:

$ ssh-keygen -t rsa -C “youremail@example.com

输入命令后不需要其它输入,一直Enter就可以

添加远程仓库

git remote add origin git@github.com:adaivskenan/com.alex.qin.wechat.git

git push -u origin maste

推送本地库的内容推送到远程。由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

关联后,只要本地做了修改,就可以通过命令将master分支的最新修改推送至远程的github

$ git push origin master

从远程库克隆

git clone git@github.com:adaivskenan/com.alex.qin.wechat.git

分支管理

创建分支



每次提交master都会向前移动。HEAD并不是指向提交,而是指向master,再由master指向提交。因此HEAD表示当前分支。



新建分支dev,将HEAD指向dev则代表当前分支为dev。

$ git checkout -b dev

切换到一个新分支 ‘dev’

上面的命令分解为两条命令即:

$ git branch dev1

$ git checkout dev1

切换到分支 ‘dev1’

查看当前分支

$ git branch

合并分支



在dev分支上进行开发,commit后dev指向新节点,master并不变



dev开发完毕切换为master

git checkout master



假如我们在dev上的工作完成了,就可以把dev合并到master上。直接把master指向dev的当前提交,就完成了合并:

$ git merge dev

git merge命令用于合并指定分支到当前分支。



如果将dev删除则又恢复只有master

$ git branch -d dev

3.解决冲突

假设现在存在master和dev两个分支。dev对readme.txt进行修改后commit。master同时也修改了readme.txt。在dev完成修改需要与master合并的时候出现了conflict。

$ git merge dev

自动合并 readme.txt

冲突(内容):合并冲突于 readme.txt

自动合并失败,修正冲突然后提交修正的结果

手动修改master后继续commit便可以,dev则可以删除。因为merge的时候dev的内容以及合并到了master中,修改master后只需提交master即可。

$ git branch -d feature1

注意事项:

git分支没有主次之分,master叫主分支其实和别的分支完全一样

知识记录:

git status查看哪些文件被修改过

git diff可以查看修改内容

HEAD指向的版本就是当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版HEAD~10

用git log可以查看提交历史,以便确定要回退到哪个版本

git reflog查看命令历史,以便确定要回到未来的哪个版本

git reset –hard commit_id 用来切换版本

git checkout – file 接丢弃工作区的修改时,将版本库的文件直接取出来,本质就是用版本库中的文件替换工作区的文件

git reset HEAD file 将暂存区的文件丢弃,然后可以进行 git checkout – file的操作,即可以撤销add操作后的修改

git rm用于删除一个文件,与git add一样将此更新到暂存区,都需要进行git commit的操作,将暂存区合并至版本库

查看分支:git branch

创建分支:git branch

切换分支:git checkout

创建+切换分支:git checkout -b

合并某分支到当前分支:git merge

删除分支:git branch -d

git remote add origin git@server-name:path/repo-name.git:关联一个远程库

git push -u origin master 关联后,使用命令第一次推送master分支的所有内容

git push origin master 每次本地提交后,只要有必要,就可以使用命令推送最新修改

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

git log –graph –pretty=oneline –abbrev-commit 可以看到分支合并图
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git