实际中的git问题及解决办法

1.基本操作

1.1 创建版本库

在某个目录下执行 git init 可以把该目录变成可以管理的仓库。

1.2 添加文件到仓库

仓库建好后可以将文件添加到仓库,使用 git add <文件名> 将具体文件添加到仓库中,可以多次使用添加多个文件。也可以使用 git add -A 添加所有改变的文件。

1.3 提交文件到仓库

使用 git commit 将之前添加的文件提交到仓库中。一般配合参数 m 使用,git commit -m ‘message’ ,message 即为提交的信息。

1.4 查看状态

git status 可以查看当前工作目录和暂存区的状态。当我们在某个目录下执行 git init 后,该目录下会出现一个隐藏的文件夹 .git ,这个文件夹是 git 的版本库,其他的可见区域是工作目录,在那个隐藏的版本库中还有一个暂存区。当我们执行 git add 的时候,文件被添加到版本库中的暂存区,执行 git commit 的时候,文件才被提交到当前分支。

当我对工作目录文件作出改动,执行 git status 时可以看到下面的信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
zhang:gittest zhang$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)

修改: test_git.txt

未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)

another_tset.txt

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

以上信息显示我修改了 test_git.txt 文件,我新建的文件 another_tset.txt 处于未跟综状态。当这两个文件都添加后,再执行 git status 显示如下信息:

1
2
3
4
5
6
7
zhang:gittest zhang$ git status
位于分支 master
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)

新文件: another_tset.txt
修改: test_git.txt

使用 git commit 提交:

1
2
3
zhang:gittest zhang$ git status
位于分支 master
无文件要提交,干净的工作区

1.5 远程连接

可以通过 git remote 让本地的版本库与远程仓库比如 GitHub 连接。先在 GitHub 上建一个仓库,复制远程仓库的 url ,通过 git remote add git_test https://github.com/dongyingdepingguo/test_git.git 可以让本地仓库与远程仓库连接。其中 git_test 为远程仓库的名字,自己随意命名。

连接远程仓库时需要输入 GitHub 的用户名和密码,可以在用户根目录下编辑(没有就创建一个).git-credentials 文件,在其中添加内容 https://{username}:{password}@github.com 。这样以后再进行远程操作就不需要每次都输入用户名和密码。

2. git同时push到多个远程仓库

使用 git remote -v 可以看到远程仓库的情况:

1
2
3
zhang:gittest zhang$ git remote -v
git_test https://github.com/dongyingdepingguo/test_git.git (fetch)
git_test https://github.com/dongyingdepingguo/test_git.git (push)

可以看到 pushfetch 都来自同一个 远程库,当我们想把一个项目同时提交到多个远程仓库的时候,可以使用以下命令:

1
git remote set-url --add git_test https://github.com/dongyingdepingguo/another_test_git.git

这时再查看远程仓库:

1
2
3
4
zhang:gittest zhang$ git remote -v
git_test https://github.com/dongyingdepingguo/test_git.git (fetch)
git_test https://github.com/dongyingdepingguo/test_git.git (push)
git_test https://github.com/dongyingdepingguo/another_test_git.git (push)

3. 撤销已经push的内容

如果我不小心把代码 push 到 GitHub 上了,但 push 的内容又不是我想要的,我怎么退回呢?

  1. 使用 git reflog 查看想要退回的版本。
  2. 使用 git reset –soft HEAD~2 (2是要退回的版本) 退回到该版本,这种方式可以保证本地文件不变,但所有的改动都保存在暂存区,如果用的是 git reset –hard HEAD~2 直接把本地文件也改到当前版本。
  3. 使用 git rm –cached xxxxx 清除暂存区中你不想改动但被改动的文件(xxxx是文件名)。
  4. 使用 git commit 提交
  5. 使用 git push 仓库名 分支名 –force 强制提交,如果不加 force 会提醒你当前分支版本低于远程分支版本,要用 force 覆盖。

4. git 从仓库中删除已被跟踪的文件

有些文件我们不愿意同步到 GitHub 中,可以将文件添加到 .gitignore 中。但有时候我们做着做着才发现这个文件中有些隐私,此时再添加到 .gitignore 中已经晚了,因为远程仓库已经在跟踪这个文件了,这时候怎么办?

  1. 把这个文件添加到 .gitignore 中。
  2. 然后执行 git rm –cached 文件名 或者 git rm –cached -r 目录
  3. 最后执行 git add –allgit commitgit push