您的位置:首页 > 其它

Windows下 Git 常用操作记录

2017-11-05 20:17 218 查看

1、windows客户端安装

下载地址:http://msysgit.github.io/

全部默认安装即可。

安装完成后,会在系统右键菜单中集成
Git Bash Here
等菜单选项,说明安装成功。

2、配置git用户名及邮箱地址

这个就相当于一个用户的标识信息,表示创建仓库的所有者信息。

git config --global user.name "Your Name"
git config --global user.email "email@example.com"


3、创建版本库

新建一个空目录作为你的仓库。比如:
gitwork


在目录中右键选择
Git Bash Here
,输入
git init
,初始化当前目录作为你的仓库。

$ git init
Initialized empty Git repository in F:/gitwork/.git/


操作完成后,会在当前目录下创建一个
.git
的文件夹,默认是隐藏的,不要手动操作这个目录下的任何文件,它是git用来跟踪版本库的。

3.1、 添加文件到版本库

使用
git add readme.txt
将工作区的文件readme.txt(文件必须存在)添加到暂存区(staged状态,commit前必须的操作,否则无法commit。git提交(commit)的时候是将暂存区的文件全部一次性提交到仓库永久保存的,即一个新的主分支产生了)

$ git add readme.txt


commit 之前可以使用
git diff readme.txt
查看当前工作区副本与暂存区之间的差别

$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index e69de29..3641e2c 100644
--- a/readme.txt
+++ b/readme.txt
@@ -0,0 +1,3 @@
+test
+hello world


确定后,使用
git commit -m "注释"
提交到版本库

$ git commit -m "create new file readme.txt"
[master c773499] none
1 file changed, 3 insertions(+)


使用
git status
查看当前版本库工作目录中文件的状态。

文件状态有已提交(committed),已修改(modified),已暂存(staged),还有没有版本控制的(untracked)。

$ git status
On branch master
nothing to commit, working tree clean


平时开发的时候,肯定有很多临时文件(文件夹)是不需要提交到版本库的。但每次
git status
时会显示很多Untracked files,git提供一种方案来忽略显示这些文件,就是在目录中创建一个
.gitignore
文件,将你不想显示的文件类型都罗列出来。git已经提供了常用类型的配置文件,你不用自己创建,只需下载后手动增加修改即可,具体参考https://github.com/github/gitignore

Remarks:commit 前必须先 add ,这样 git 才知道要 commit 什么。

4、查看提交日志

使用
git log
可以查看提交的详细日志,如果嫌太繁杂,可以使用
git log --pretty=oneline
显示精简的日志。

$ git log --pretty=oneline
c77349985415c4eaba4ed4a5828246d2b228e471 (HEAD -> master) none
a7746fds312ef6f6jfdsopl7ss83ja7aa4ae9ijn modify readme.txt
ddf00b5312ef6f60648a941a5a223a7aa4aecc8e create new file readme.txt


前面的一大串数字字母表示提交的各个版本标识,是通过SHA1计算出来的。

括号里的HEAD表示这是最新的提交版本。

5、版本回退

现在最新提交的版本是c77349(上面日志中显示的版本标识的前6位),如果想回退到注释为
modify readme.txt
的版本。使用
git reset --hard 需要回退的版本标识


$ git reset --hard a7746f
HEAD is now at a7746f modify readme.txt


这样就回退到指定的版本了。

命令中的版本标识可以任意取前几位,但一定要唯一确定。

再使用
git log --pretty=oneline
查看一下提交日志。

$ git log --pretty=oneline
a7746fds312ef6f6jfdsopl7ss83ja7aa4ae9ijn (HEAD -> master) modify readme.txt
ddf00b5312ef6f60648a941a5a223a7aa4aecc8e create new file readme.txt


发现没,已经看不到注释为
none
这条记录了,最新的版本也跟着变成了
modify readme.txt
这个版本了。(与人类的观念一致)

如此,又有一个问题,你可能又后悔了,想重新恢复到注释为
none
的版本,当然你可以在
Git Bash
窗口记录中找到对应的版本id来恢复。

$ git reset --hard c773499


但是,可能你想这么做的时候已经是第二天了,电脑都关机了,哪里还知道这个id。没关系,

git也提供了相应的功能。输入
git reflog
即可。

$ git reflog
c773499 (HEAD -> master) HEAD@{0}: reset: moving to a7746fd
c773499 (HEAD -> master) HEAD@{7}: commit: none
a7746fd (HEAD -> master) HEAD@{6}: commit: modify readme.txt
ddf00b5 HEAD@{7}: commit (initial): create new file readme.txt


它记录了所有的commit操作信息,当然包括对应的版本的id了,这下终于没有后顾之忧了。

6、撤销工作区的修改

假如你又对 readme.txt 文件做了些修改,突然发现这些修改没什么意义,想撤销你的修改,回到没有修改以前的状态。可以使用
git checkout -- 文件名


$ git checkout -- readme.txt


如果之前没有将此文件添加到暂存区(add)的话,此文件就会恢复到 HEAD 版本库(最新的版本库)的状态。

如果之前已经添加到暂存区还没有提交的话,此文件就会恢复到添加到暂存区时的状态。

如果已经添加到暂存区,可是还是想恢复到提交 HEAD 版本时的状态的话,可以使用命令

git reset HEAD 文件名
,将某个文件单独回退到最新提交的状态(HEAD 表示最新提交的那个版本)。同时,这个命令会恢复暂存区中此文件的状态。

$ git reset HEAD readme.txt


7、删除文件并提交及误删处理

如果想从版本库中删除 readme.txt 文件,现在工作目录中删除此文件,这样 git 就会检测到,然后输入命令
git rm 文件名
,git 会从暂存区中删除此文件,然后正常
commit
提交即可。

$ git rm readme.txt
git commit -m "delete readme.txt"
[master c773499] remove readme.txt
1 file changed, 1 deletion(-)
delete mode 100644 readme.txt


这样文件就从版本库中真正的删除了。

如果是本地文件被误删了,可以使用命令
git checkout -- 文件名
恢复到最近一次
add
commit
操作的状态。

8、远程仓库操作

以上介绍的所有操作都是针对本地仓库。git 还可以对远程仓库进行克隆(将远程仓库的下载一份到本地,作为一个独立的分支),推送(将自己的修改提交到远程仓库)以及拉取(检出别人对仓库做的提交)。

下面分步介绍:

8.1、设置SSH Key(以 github 为例)

为了使与远程仓库通信更加安全,git 使用了 SSH 对通信加密。

所以需要生成 SSH 通信密钥。

Git Bash
中输入命令
ssh-keygen -t rsa -C "您的邮箱地址"
,一路回车,忽略存储路径和密码的设置。你就会在用户目录
C:\Users\用户名\.ssh
中发现两个文件,id_rsa(私钥)和 id_rsa.pub(公钥)。

私钥文件不要动。在 github.com 中依次打开 Settings-SSH and GPG keys-SSH keys,单机
New SSH Key
,在Title中输入提示信息,将id_rsa.pub的内容复制到Key中,保存。

8.2、克隆远程仓库

git是分布式版本控制系统,我们可以建立一个公开的仓库,可以让所有人都能从这个仓库克隆作为他们自己的分支,来帮助开源项目维护。

还是以github为例,首先在github上创建一个项目,叫
gittest


我们打开
Git Bash
,将目录切换到
gitwork
,输入命令
git clone 远程仓库地址


$ git clone git@github.com:***/gittest.git
Cloning into 'gittest'...
remote: Counting objects: 4, done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 4
Receiving objects: 100% (4/4), done.
Checking connectivity... done.


远程仓库地址可以从github上的gittest仓库信息中看到。这样在github上创建的远程仓库就被克隆到本地了,在当前目录中可以看到多了一个
gittest
目录,仓库中的所有文件也同步到本地了。

查看远程仓库信息

git remote -v


推送分支

git push origin master


origin 为远程仓库在本地默认的名字(就是对应远程仓库的地址),master 为本地分支名,此处为主分支(也是推送到远程仓库的主分支上)。一般情况需保持主分支与远程仓库同步就行。

如果多人都在同一个分支下工作的话,当一个人push后,另外一个人再push的话就会失败,必须先将分支上最新的代码pull下来,解决冲突后,再push。

抓取分支

git pull


pull之前必须设置本地分支与远程分支的对应关系,可以使用
git branch --set-upstream dev origin/dev
来将本地分支dev与远程仓库

分支dev的关系关联起来。

8.3、将本地仓库关联到远程仓库

我们还是先要在github上创建一个新的仓库,使用命令
git remote add origin 新仓库地址
,就将本地仓库与远程仓库之间建立了关联。

git remote add origin git@github.com:***/gittest.git


origin 为远程仓库在本地默认的名字。

使用
git branch --set-upstream master origin/master
,将本地主分支与远程仓库主分支建立远程关联。

使用
git pull
拉取远程仓库代码。

使用
git push
来推送本地代码到远程仓库。

git push origin master


最后的master表示要推送的本地分支名。

8.4、同步github账户fork的代码

github中曾经fork的代码不会自动与原作者保持同步。需要手动操作。

假设你的github中fork的仓库地址为:
git@github.com:yourname/yourfork.git


原始作者的仓库地址为:
git@github.com:authorname/projectname.git


关联原始作者的仓库

git remote add authorname git@github.com:authorname/projectname.git


抓取原始作者仓库修改的文件

git fetch authorname


切换到本地主分支

git checkout master


合并远程的原始作者主分支

git merge authorname/master


推送到自己的远程仓库

git push origin master


9、分支操作

平时开发的时候,新开一个项目,但又不想把还没完成的代码提交到主分支上。这时我们可以创建一个新的分支,来提交我们的代码,这样不用担心代码因未提交可能丢失,也不会影响主分支的功能。等所有功能完成后,还可将新建的分支代码合并到主分支上,并删除新建的分支。

新建分支 dev

git branch dev


切换分支(切换到dev分支)

git checkout dev


1、2 两步可用
git checkout -b dev
直接达到。

查看当前分支

git branch


从远程仓库克隆时,默认在本地只能看到主分支,使用
git checkout -b dev origin/dev
创建即可。

合并分支(将dev分支合并到当前分支)

git merge dev


删除分支

git branch -d dev


如果新建分支后,主分支一直没有提交新的操作,那么合并的时候,基本没有什么顾虑。但是新建分支后,主分支上也在继续开发,那么合并分支的时候,如果两个分支都对同一个文件的相同位置做了不同的修改,就会提示产生冲突,产生冲突后,可以用
git status
查看冲突文件,git会在文件中以
<<<<<<<
=======
>>>>>>>
来标注不同分支修改的内容,我们必须手动去掉这些标注来解决冲突后再提交就可以了。冲突解决后才能删除新建的分支。

查看分支合并图

git log --graph


git log --graph --pretty=oneline --abbrev-commit


如果当前代码已经写了一点,但不想提交到分支上,临时想切换到另一个分支分析点东西,可以使用
git stash
储存工作现场。

保存工作现场

git stash


查看保存的工作现场

git stash list


恢复工作现场(会自动删除保存的工作现场记录)

git stash pop


恢复指定的工作现场(不会自动删除保存的工作现场记录)

git stash apply stash@{0}


删除保存的工作现场记录

git stash drop


10、标签操作

标签相当于仓库的一个快照。不过标签是针对当前分支的快照。

创建标签

git tag v1.0
(v1.0为标签名)

标签默认是打在最新的提交的那个时间点的,如果在以前的某次提交忘打的话,可以使用
git log --pretty=oneline --abbrev-commit
查看那次的提交标识,使用
git tag v1.0 3628164
(3628164为版本标识)。

可以使用-a 指定标签名,-m 指定标签说明文字。

git tag -a v0.1 -m "version 0.1 released" 3628164
,这样的标签称为“附注标签“,与“轻量标签”对应。

查看所有标签

git tag


查看某个标签信息

git show v1.0


删除标签

git tag -d v0.1


切换到标签状态

git checkout v0.1


推送标签

通常
git push
的时候是不会将标签也提交到git服务器上的,需要另外手动操作。

git push origin v0.1


如果使用的github,可以去网站看看有没有推送成功。

使用
git push origin –tags
可以将本地所有未提交的标签一次性提交到git服务器。

删除远程服务器标签

先删除本地标签:
git tag -d v0.1


再提交到远程:
git push origin :refs/tags/v0.9
:refs/tags/
为固定格式,后面跟标签名。

11、界面操作软件

如果使用过TortoiseSVN,比较习惯界面操作的话,可以使用TortoiseGit,TortoiseGit是开源的客户端,只支持Windows。

TortoiseGit 只是一个界面程序壳,运行必须依赖核心Git客户端,比如msysgit。

下载地址:https://download.tortoisegit.org/tgit/

12、设置git代理

fatal: unable to access 'https://***.git': Failed to connect to chromium.googlesource.com port 443: Timed out


如果 url被墙的话,就需要设置 git代理了。

设置 git代理

git config --global http.proxy localhost:1080


git config --global https.proxy localhost:1080


localhost:1080为代理服务器 ip、端口。

如果需要用户名和密码:

git config –global http.proxy http://user:password@localhost:8080[/code] 
git config –global http.proxy https://user:password@localhost:8080[/code] 
取消 git代理

git config --global --unset http.proxy


git config --global --unset https.proxy
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: