【Git】初入职工程师的Git推送之路
第一次的git提交
我有一些私事要和你说,从8月份开始,我在一家公司担任Web工程师。
前几天我完成了一个任务,想要进行git push,可是却惊讶地忘记了git的命令。我当时向前辈请教了一下,成功地完成了任务,感觉如释重负(´;ω;`)。
虽然我有知识,但我真实的想法是不知道在哪里、如何以及为什么要使用git命令。
这次我们回顾一下在那个时候使用的git命令,重点并不是命令本身,而是回顾一下整个工作流程。
之前我写过一篇类似的文章。这次的重点是更加实践性的内容。
使用【GitHub】进行应用程序的版本管理
创建仓库-提交
开始
创建一个仓库。(需要初始化吗?)
在这里,我正在git_test目录中创建一个仓库。
$ cd git_test
$ git init
Initialized empty Git repository in /Users/yuki/workspace/git_test/.git/
添加
可以使用-A选项将想要提交的文件添加到暂存区中。该选项可以选择当前目录及其子目录下的所有文件。
如果您想按文件分别提交,请指定文件名。
$ git add test.html
承诺
我会提交。并通过-m选项附加提交消息。
$ git commit -m "first commit"
[master (root-commit) aba6a83] first commit
1 file changed, 9 insertions(+)
create mode 100644 test.html
在远程存储库中进行同步
使用GitHub作为远程存储库。需要先预先创建存储库。
添加远程
将指定的名称与远程仓库的地址关联起来。
由于远程仓库存在于互联网上,所以在与本地仓库进行交互时,需要指定地址(路径)。
因为每次指定作业地址也很麻烦,所以在这里将其命名为”origin”并进行关联,以后可以使用”origin”来处理。
$ git remote add origin git@github.com:ユーザー名/リポジトリ名.git
推动
我会将更改写入远程存储库。
将提交的内容同步到源主分支(origin的master分支)。
$ git push origin master
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 308 bytes | 308.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:ユーザー名/リポジトリ名.git
* [new branch] master -> master
切出分支
刚刚使用的所有分支都是主分支。现在,我们将创建一个与主分支不同的新分支,并尝试将其同步到远程仓库的主分支上。
我不太清楚分支切割的标准,但在这里我会准备一个develop分支。
分支(一)
在指定的名称上创建一个分支。如果想要同时将创建的分支用作当前分支,可以使用git checkout -b 分支名称。
本次创建的develop分支与master分支的内容相同。
$ git branch develop
结账
转到指定的分支。
$ git checkout develop
Switched to branch 'develop'
分支(第2部分)
您可以查看所有现有的分支和当前分支。
在这里有两个分支,一个是主分支(master),另一个是开发分支(develop),现在我在开发分支上,这是其意思。
$ git branch
* develop
master
我会在这个develop分支上进行工作。
状态
显示已进行更改的文件。
由于在develop分支上进行了新的操作,因此显示了与之相关的test.html文件。
$ git status
On branch develop
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: test.html
no changes added to commit (use "git add" and/or "git commit -a")
以下是对git status的结果解读以及变更标准的时机比较难理解。这篇文章可能会给您一些参考,希望对您有所帮助。
Git的基本使用 – 将变更内容记录到代码仓库中。
与众不同
会将自上次分阶段以来发生变更的部分作为差异显示出来。也可以指定文件名进行执行。
在test.html中,对哪些部分进行了更改,已经以上下比较的方式显示出来了。
$ git diff
diff --git a/test.html b/test.html
index d1e9fdb..5bd36cc 100644
--- a/test.html
+++ b/test.html
@@ -6,6 +6,6 @@
<body>
<p>git_test</p>
-
+
</body>
</html>
即使外表看起来没有差异,但可能是由于不可见字符的影响。
【Atom】解决使用git diff发现的不可见字符(制表符、空格)的方法。
如果没有问题,就可以使用git add命令对相应的文件进行暂存。
$ git add test.html
我们来提交吧。
$ git commit -m "second commit"
[develop 9701c20] second commit
1 file changed, 2 insertions(+)
我会将更改推送到远程代码库。本次推送目标是develop分支。
$ git push origin develop
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 293 bytes | 293.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:ユーザー名/リポジトリ名.git
aba6a83..9701c20 develop -> develop
将更新应用于远程存储库的主分支。
接下来,我们要操作本地仓库的主分支。使用git checkout进行切换。
$ git checkout master
Switched to branch 'master'
拉 (lā)
同步远程仓库和本地仓库,并将更改合并到本地仓库的分支中。
如果有多人一起作業,将需要共同使用远程代码仓库。因此,在我自己工作的同时,可能会有其他人更新主分支。
因此,首先从远程存储库的主分支获取最新状态,并将其同步到本地存储库的主分支上(尽管这次没有任何变更)。
$ git pull origin master
From github.com:ユーザー名/リポジトリ名
* branch master -> FETCH_HEAD
Already up to date.
顺带一提,git pull命令是git fetch(同步远程仓库和本地仓库)和git merge(合并)两个命令的组合。
合并
合并其他分支的内容。
在本地存储库将主分支更新为最新状态,并将开发分支的内容合并进来。
现在可以准备将此推送到远程存储库了。
$ git merge develop
Updating aba6a83..9701c20
Fast-forward
test.html | 2 ++
1 file changed, 2 insertions(+)
将主分支的内容推送到远程仓库。工作已完成。
$ git push origin master
Total 0 (delta 0), reused 0 (delta 0)
To github.com:ユーザー名/リポジトリ名.git
aba6a83..9701c20 master -> master
一般来说,在主分支(master)上不进行更改操作。最后请返回到开发分支(develop)继续工作。
$ git checkout develop
Switched to branch 'develop'