Продолжаем осваивать Git

Автор | 02.06.2015

Начало тут
После того как мы создали пустой репозиторий на сервере, нужно добавить туда наш проект

git add * && git commit -m "Initial commit" && git push origin master

где,
origin это сервер на котором у нас код… и добавляется он вот так

git remote add origin ssh://git@/git/test.git

Возможны ошибки при первом комите:

root@client:app# git push
Password:
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'ssh://root@giserver.com/git/app'

Указываем явно куда пушить

root@gitclient# git push origin master
Password:
Counting objects: 3, done.
Writing objects: 100% (3/3), 203 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To ssh://root@gitserver.com/git/app
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'ssh://root@gitserver.com/git/app'

Все равно не поддается на провокацию. Сия ситуация хорошо описана тут http://pete.akeo.ie/2011/07/git-remote-repository.html
Git думает что раз репозиторий пустой, то есть не завершенный первый коммит и не дает простому смертному стать первым. Для этого мы на сервере создадим новую ветку:

root@gitserver : git checkout -b first-commit
Switched to a new branch 'first-commit'
root@gitserver $ git symbolic-ref HEAD refs/heads/first-commit

После этого можем внести изменения в код на клиенте и передать это на сервер

echo "new file" > README
git add README
git commit -m "Added file README"
git push origin master

1. Создаем новый файл
2. Добавляем в индекс
3. Коментируем и комитим
4. Передаем на сервер

Когда захотим просмотреть все изменения в проекте:

git log

Если нужно детальнее посмотреть информацию с diff

git log -p -2

Вот так выглядит diff для новосозданого файла

commit 56907f69cb50bfd2c8d9fd01740c62c6f4c40a7e
Author: reverse 
Date:   Tue Jun 2 09:56:38 2015 +0300

    added README

diff --git a/README b/README
new file mode 100644
index 0000000..656e4fd
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+new file

Для просмотра diff на уровне слов, а не строк можно использовать такую команду

git log -U1 --word-diff

На выходе что то похожее на это

new commit for query

diff --git a/rpc.rb b/rpc.rb
index 9b54be4..1b3555d 100644
--- a/rpc.rb
+++ b/rpc.rb
@@ -4,3 +4,3 @@ class MyClass
  def dosomething(a)
    puts "response for {+query+} #{a}"

Если нужна краткая информация :

git log --stat

Если проект большой и старый:

git log --since=2.weeks

Залишити відповідь